목록write-up (28)
ii4gsp
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nuvBr/btqBDXt6Vo7/7kASeCKtS9Kqn9g3xxlVG0/img.png)
stack 영역을 사용할 수 없다. 라이브러리 영역도 사용할 수 없다. 또한 fgets()함수에서 arg로 입력을 받지않고 뜬금없이 stdin으로 입력을 받는다. stdin은 표준입력 파일 스트림이다. stdin은 입력 버퍼를 가지고 있다. 파일 복사 후 gdb로 파일을 열어주자 eax 레지스터에 0x8049a3c가 복사되고 push 된다. 0x8049a3c가 stdin의 주소이다. ret가 실행되기전 부분에 break point를 걸어주고 프로그램 실행 후 값을 넣어주자 stdin+4는 buffer의 end부분을 가리키고 stdin+12는 buffer의 start부분을 가리킨다. buffer의 start부분인 0x40015000을 payload에 사용하면된다. 페이로드는 NOP * 19 + shellc..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c5JevB/btqBzPnVd9h/sESebyrpHEV6Cn2LbdAHO1/img.png)
주석에 PLT라고 되어있다 RET를 strcpy()함수의 PLT주소로 변조해야 하는 문제이다. strcpy()함수의 PLT주소는 0x08048410이다. 값을 넣어주고 코어파일을 분석해보자 0x41414141가 있는 주소 0xbffffa50과 0x45454545가 있는 주소 0xbffffa5c를 사용할것이다. 페이로드는 buffer + sfp + &strcpy() + dummy + &strcpy() arg1 + &strcpy() arg2 + &shellcode [44byte] [4byte] [4byte] [4byte] [4byte] [4byte] #include int main() { printf("%p\n", getenv("shellcode")); return 0; } 쉘 코드 주소를 구하는 소스코드를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zT7eA/btqBuQuMfms/QgeY9F2grDsl2ri4JsRB4K/img.png)
주석에 FEBP라고 적혀있다 Fake EBP일것이다. 파일을 복사 후 gdb로 파일을 열어주자 ret가 실행되기전 leave 부분에 break point를 걸어주고 값을 넣어주자 leave - ret Gadget은 0x080484f0이다. 스택을 확인해보면 buffer의 주소는 0xbffffab0이다. 0xbffffab0 + 4 = 0xbffffab4 0xbffffab0 - 4 = 0xbffffaac 페이로드는 &buffer + 4 + dummy + shellcode + &buffer - 4 + leave - ret Gadget [4byte] [11byte] [25byte] [4byte] [4byte] payload ./zombie_assassin $(python -c 'print "\xb4\xfa\xf..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ctEMoC/btqBuwQe9KK/eJtD9ToYaMkghWHzy89TX0/img.png)
stack을 사용할 수 없고 RTL도 사용불가능이다. RET sled를 사용하여 문제를 풀어보자 gdb로 파일을 열고 ret부분에 break point를 걸고 RET에 RET를 한번더 넣고 NOP Sled와 쉘 코드를 넣어주자 RET에 RET를 넣어주고 0xbffffc0c를 RET로 잡고 페이로드를 작성해주자 buffer + sfp + &ret + 0xbffffc0c + NOP sled + 쉘 코드 [44byte] [4byte] [4byte] [100byte] [25byte] payload ./assassin $(python -c 'print "\x90" * 44 + "\x1e\x85\x04\x08" + "\x0c\xfc\xff\xbf" + "\x90" * 100 + "\x31\xc0\x50\x68\x2..