상세 컨텐츠

본문 제목

[TAMU 2018] pwn3

SYSTEM HACKING/CTF, etc

by koharin 2019. 8. 10. 01:03

본문

728x90
반응형

 

 

1. IDA로 pseudo code 확인

 

 

- echo 함수에서 gets 함수로 s 변수에 저장된 문자열을 출력 -> overflow 발생시켜 return address 덮을 수 있음

- s 변수의 주소 출력 -> 이 출력된 변수를 따로 다른 변수에 저장해서 return address를 이 주소로 덮는다.

- s 변수 + SFP에는 NOP + shellcode + NOP 으로 채운다.

 

2. 보호기법 확인

 

신경쓸만한 보호기법 X

 

3. s 변수에서 return address 까지 거리

 

 

 

bp 1 : echo 함수 첫 번째 명령어 - return address 값 가지고 있는 최상위 stack 주소

bp 2 : gets 함수 호출 명령어(gets 함수 호출 전) - gets 함수 호출 전 인자 구성 시 push eax -> eax 확인

                                                              - buf 변수 주소

 

(bp 1 에서 구한 주소) - (bp 2 에서 구한 주소) = s 에서 return address 까지 거리 = 242

 

따라서 아까 pseudo code를 확인해보면 ebp-EEh가 나와있는데 이건 s 변수의 크기이다. 

s 변수의 크기가 0xEE = 238 바이트이므로 s(238) + SFP(4) = 242 로 dummy는 없다.

 

4. payload 

 

 

위와 같이 payload를 작성했을 때는 EOF를 전달받았다.

 

어떻게 써야할지 생각해봤는데, 일단 NOP + shellcode + NOP으로 shellcode를 감싸줘서 nop sled로 제대로 원하는 주소로 갈 수 있도록 하고, len 함수로 shellcode 길이 구할 때가 잘못됐나해서 확인해봤다.

 

 

그냥 shellcraft.sh()를 한 것을 len에 넣으면 안 되고,

asm 함수로 assembly code 변환 후의 shellcode를 넣어야 했다.

 

그리고 s 변수의 주소를 받아올 때 p.recvuntil("!\n") 나 p.recv(10)을 사용했을 때 계속 오류가 생겨서 pwntools를 다시 확인해봤다.

 

 

딱 10 바이트만 받고 싶은 거니까 recvn 함수를 사용하면 될 것 같아서 p.recvn(10)으로 썼다.

 

최종 expoit 코드는 다음과 같다.

 

 

(코드는 길어지지만 shellcraft.nop()으로 NOP을 쓸 수도 있어서 한 번 사용해봤다.)

 

5. exploit

 

 

 

 

 

728x90
반응형

'SYSTEM HACKING > CTF, etc' 카테고리의 다른 글

[HITCON-Training] lab5 : simplerop  (0) 2019.08.15
[TAMU 2019] pwn2  (0) 2019.08.14
[TAMU 2019] pwn1  (0) 2019.08.14
[TAMU 2018] pwn4  (0) 2019.08.10
[HITCON-Training] lab3 : ret2sc  (0) 2019.08.10

관련글 더보기