ii4gsp
FTZ - Level15 본문
힌트파일을 보면 level14문제에서 보았던 check변수를 포인터로 바뀐것을 알 수 있다.
포인터 변수는 메모리의 주소 값을 저장하는 변수이기 때문에 check변수에 들어가는 값은 메모리 주소의 값이 저장된다.
<main+17> - 0xffffffc8은 ebp-56이다.
<main+29> - 0xfffffff0은 ebp-16이다.
따라서 buf에서 *check까지의 거리는 56 - 16 = 40
40byte라는 빈공간을 채워줘야 할 것이다.
<main+32> - 0xdeadbeef와 *check 포인터가 값을 비교한다.
메모리 상에서 0xdeadbeef의 주소를 알아내 *check의 주소를 0xdeadbeef의 주소로 덮어 씌우면 쉘이 실행될 것이다.
0x080484b2가 0xdeadbeef의 메모리 상의 주소이다.
이제 페이로드를 작성할 수 있을 것이다.
buf ~ *check + \xb2\x84\x04\x08
payload
(python -c 'print "\x90" * 40 + "\xb2\x84\x04\x08"';cat) | ./attackme
'시스템 해킹 > FTZ' 카테고리의 다른 글
FTZ - Level17 (0) | 2020.01.10 |
---|---|
FTZ - Level16 (0) | 2020.01.10 |
FTZ - Level14 (0) | 2020.01.09 |
FTZ - Level13 (0) | 2020.01.08 |
FTZ - Level12 (0) | 2020.01.08 |
Comments