PWN手的从成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持
远程连接,没有什么可用信息。
file 查看文件。32 位 ELF 可执行文件。
checksec 查看文件安全属性。开启了 NX 保护,栈上无法执行。
IDA 打开文件。查看 main 函数,发现了 gets()
高危函数。
并且在 get_secret
函数中找到了后门。它用只读模式打开 flag.txt ,之后将文件存放在 fl4g 变量中。那么我们就可以想到,用 printf()
函数将 fl4g 变量内容打印出来。
分析 main函数的汇编代码,发现其没有 push 指令,并且 retn 没有设置返回地址,因此构造 exp 的时候就不需要覆盖返回地址。
计算溢出大小:0x2D+0=0x2D
我们需要调用 printf()
函数,所以我们要找到它的内存地址。
双击 printf,就找到了其内存地址
调用 printf 函数之前,我们需要了解 printf 函数的输出原理:printf 函数并不会立即把输出内容写显示到屏幕上,而是先将输出内容写入到缓冲区中。只有满足一定条件时(比如缓冲区满,遇到换行符 \n 且开启了行缓冲模式、程序正常结束或调用 flush 函数刷新缓冲区等),缓冲区中的内容才会被实际输出到对应的设备上。
因此脚本就需要添加一个返回地址。
大致流程:先溢出,之后直接执行后门,让程序将 flag.txt 的内容存到 fl4g 变量中,再调用 printf
函数地址,因为这里 printf
函数得到输入后,没有结束程序,所以数据就会保存在缓冲区中,这时就要调用一个返回地址结束程序(exit
函数),然后触发 printf
的输出机制,再在后面添加 fl4g 变量的内存地址,让 printf
定位到 fl4g 的数据。(简洁流程:调用 printf
地址获取 fl4g 的内容,再调用 exit
结束地址触发缓冲区刷新以显示内容,最后到 fl4g 的内存地址,让 printf
定位数据。)
exit
函数地址(返回地址)
printf
函数地址。
fl4g 变量地址。
编写 exp:
from pwn import *
r=remote('node5.buuoj.cn',29302)
get_secret_addr=0x80489A0
printf_addr=0x0804F0A0
exit_addr=0x0804E660
flag_addr=0x080ECA2D
payload=b'a'*(0x2D)+p32(get_secret_addr)+p32(printf_addr)+p32(exit_addr)+p32(flag_addr)
r.sendline(payload)
r.interactive()
flag 被打印出来。
PWN手的从成长之路-08-not_the_same_3dsctf_2016-溢出+函数调用劫持的更多相关文章
- 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- OpenCV成长之路:图像直方图的应用
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- 架构师成长之路3.1-Cobber原理及部署
点击返回架构师成长之路 架构师成长之路3.1-Cobber原理及部署 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理 ...
- 架构师成长之路2.2-PXE+Kickstart安装部署
点击返回架构师成长之路 架构师成长之路2.2-PXE+Kickstart安装部署 系统测试环境: 实验环境:VMware Workstation 12 系统平台:CentOS Linux releas ...
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 架构师成长之路5.7-Saltstack数据系统
点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
随机推荐
- git 已经commit 没有 poll / upload 回退
git reset id 这里的id 是提交前一个id 完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改.不对代码进行撤销可以重新提交.
- 模拟退火解 深圳杯2020C题
简介 下面链接有赛题和数据 http://www.m2ct.org/view-page.jsp?editId=12&uri=0D00233&gobackUrl=modular-list ...
- Load text: https://tensorflow.google.cn/tutorials/load_data/text
Tensorflow Load text: This tutorial demonstrates two ways to load and preprocess text. First, you wi ...
- SIP REG Digest认证算法分析
一.回顾SIP Register的认证过程 Client(通常是话机)向REG Server(一般是OpenSIPS或Freeswitch)发起REGISTER注册请求(注:此时发送的请求里,只有一些 ...
- 使用python完成光明旅者冲刺挑战成就
前言 最近在玩游戏光明旅者(Hyper Light Drifter),真的很好玩,强烈推荐. 其中的冲刺有一定的冷却CD,但是抓住时机以一定频率冲刺就可以破除CD不停地冲刺,我尝试了一下连续冲刺十五次 ...
- Win10系统如何删除多余账户的问题
有一位雨林木风系统的用户,反馈说,他的win10专业版的电脑上不知道怎么创建了好多个账户,可是,这么多账户也没啥用啊,那该如何把多余账户删除呢?接下来,雨林木风系统小编就来详细的删除办法,大家一起来学 ...
- Sgt 模板代码
struct Sgt{ int lazyTag; int val; }t[maxn]; void pushUp(int x, int l, int r){ t[x].val = t[x].lazyTa ...
- 绩效管理系统对比解析:OKR考核好还是KPI考核好?
在绩效管理进入系统化.数字化时代的今天,企业不再仅仅依靠年终考核来评估员工表现,而是开始探索更敏捷.更具激励性的管理模式.OKR和KPI,作为两种主流的绩效考核方法,经常被拿来比较.但现实中,这并不是 ...
- Compiler - 编译器
The first compiler was build by John Backum and his group between 1954 and 1957 at IBM.编译器就是将高级语言翻译为 ...
- 通过bat启动jar的命令
title sso java ^ -Dspring.datasource.url=jdbc:mysql://172.18.25.12:3307/working-drawing-1.0.0^?chara ...