본문 바로가기

Wargame Write-Up/HackCTF69

[HackCTF] (Pwnable) ezshell 풀이 ezshell 힙공부를 미뤄둬서, hackctf 남은문제가 다 힙인줄알고 안풀었는데, 재밌는 쉘코딩문제도 있어서 풀어봐따. 저 쉘코드 50바이트 뒤에 내가 입력한 쉘코드를 strcat 으로 붙여서, xor 부터 실행해준다. 필터링하는 opcode 는 다음과 같다 \xb0 → mov r8, imm8 \x3b → execve call number \x0f05 → syscall syscall 필터링하는거는 syscall opcode 가 주어지니, jmp $- ~~ 으로 syscall 을 실행시킬 수 있다. al 에 mov 를 통해 값을 넣을 수 없으니, push/pop → inc 으로 우회할 수 있다. 하지만 rsp 를 0 으로 만드니 push/pop 을 사용할 수 없게된다. fs 세그먼트를 이용하면, rsp.. 2021. 10. 5.
[HackCTF] (Forensic) Let'S get it ! Boo*4 풀이 문제이름에서 볼 수 있듯이, LSB steganography 문제이다. stegsolve 툴로 lsb 를 추출할 수 있는데, RGB 값으로는 안나온다.. 그래서 다 해보다가 BGR로 하니까 나오는 것을 확인할 수 있다. HackCTF{0U] .B10C 0xCDA9 0xBD84 0xD788 0d.8AC000 H.8CE58 0xC788 0xB294 0xC874 0xC7AC 0v.8C57C} 다음과 같은 문자열이 나오는데, 이상하게 생겼다. 이것은 플레그가 아닐테고, 디코딩 해봐야 할 것 같다. 0xXXXX 와 같이 나오는데, 이 문자들만 모아서 unicode 디코딩해보자. 5글자이상 붙어있는 글자 빼고 디코딩을 해봤다. 0x 제외하고, 4글자식 잘라서 넣으면 되더라. 2021. 6. 1.
[HackCTF] (Pwnable) babyfsb 풀이 printf(buf) 부분에서 fsb 가 발생한다. buf 값의 입력가능 범위는 SFP 전까지이다. 리턴주소 ( __libc_start_main + 2XX ) 을 leak 하면서, 카나리 부분을 덮은 뒤, ___stack_chk_fail@got 을 main 함수로 덮는다. 2라운드 에서는, leak 한 주소를 바탕으로 ___stack_chk_fail@got 을 원샷 함수로 덮거나, printf@got 을 system 으로 덮은 다음, 카나리 부분을 덮은 뒤, buf 에 "/bin/sh" 를 입력해서 printf(buf) -> system("/bin/sh") 실행 일단 rsp + 6번째가 buf 의 값을 나타낸다. 프로그램을 실행하고, __stack_chk_fail@got 을 보면, 아직 호출된 적이 없기.. 2021. 5. 14.
[HackCTF] (Pwnable) Unexploitable_4 풀이 마지막시리즈다. 보호기법은 NX 가 꺼져있다. bss 에 쉘코드를 적어서 리턴하면 될텐데, dummy+sfp+ret 합쳐서 0x20 byte 여서 ret 넘어서 입력받을 수 있는 데이터는 13byte밖에 되지 않는다. 13byte 짜리 쉘코드는 찾아봤는데 없는 것같다. 그래서 23byte 쉘코드를 스택피보팅으로 나눠서 입력해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 from pwn import * # r=process("./Unexploitable_4") r=remote("ctf.j0n9hyun.xyz", 3039) context.log_level='debug' bss=0x601000+0x800 .. 2021. 5. 3.