Asis CTF 2015-Car_Market
恰好找到了这道题的bin文件,就来做一下。
这道题目是一个经典的选单程序但是具有三级选单,在bss段存在指针数组ptr,ptr中的值指向每个主结构,其中主结构如下所示。
[] model
[] price
[] padding;
[8] pointer
共32byte
其中pointer会指向一个子结构customer
[] first_name
[] name
[] pointer
共72byte
这个pointer又会指向一个一块内存comment
[] comment
第一个漏洞存在于sub_400BFB中,这是自己实现的Read函数,这个Read函数在读取长度限制的最后一个字节之后还会把指针加1,并且又符了0值,从而造成NULL byte off-by-one。代码如下
__int64 __fastcall sub_400CC9(__int64 a1, int a2)
{
int v2; // eax@3
__int64 result; // rax@6
int v4; // [sp+10h] [bp-10h]@1
__int64 v5; // [sp+18h] [bp-8h]@1 v5 = a1;
v4 = ;
while ( v4 < a2 )
{
v2 = _IO_getc(stdin);
if ( v2 == '\n' )
{
result = v5;
*(_BYTE *)v5 = ;
return result;
}
if ( v2 != 0xD )
{
*(_BYTE *)v5++ = v2;
++v4;
}
}
result = v5;
*(_BYTE *)v5 = 0;
return result;
}
这个漏洞可以说是比较难找的,主要是程序代码量比较大,很容易忽略这里。
拿到这个null byte off-by-one之后肯定就是围绕这个漏洞展开思考,首先想的是两种常用的利用方法,第一想到的肯定是去构造unlink,因为几乎是每次获取输入都使用了这个存在漏洞的Read函数,所以可以off-by-one的地方很多。想了一下可以在哪里unlink,因为unlink存在check,所以也就只有存在了指针指向的地方才可以用来构造unlink,经过一番查找缺发现这道题并没有提供这样的机会。
后来发现其实这道题的关键在于这里
__int64 __fastcall Add_custom(__int64 a1)
{
__int64 v1; // rdx@5
__int64 result; // rax@5 if ( *(_QWORD *)(a1 + ) )
{
if ( *(_QWORD *)(*(_QWORD *)(a1 + ) + 64LL) )// [64]
// [8] pointer
{
free(*(void **)(*(_QWORD *)(a1 + ) + 64LL));
memset(*(void **)(a1 + ), , 72uLL);
}
free(*(void **)(a1 + ));
}
v1 = Alloc_ZI_STRUCT();
result = a1;
*(_QWORD *)(a1 + ) = v1;
return result;
}
实际是通过控制内存块来控制free函数的值,实现free全局指针域。然后紧接着的分配会重用这个块,控制了指针以进行任意地址读写。感觉这道题还是很有难度的,洞比较好找,但是想出利用却比较难。
Asis CTF 2015-Car_Market的更多相关文章
- CTF-Keylead(ASIS CTF 2015)
将keylead下载到本地用7-ZIP打开,发现主要文件 keylead~ 在ubuntu里跑起来,发现是个游戏,按回车后要摇出3,1,3,3,7就能获得flag. 拖进IDA 直接开启远程调试,跑起 ...
- Asis CTF 2016 b00ks理解
---恢复内容开始--- 最近在学习堆的off by one,其中遇到这道题,萌新的我弄了大半天才搞懂,网上的很多wp都不是特别详细,都得自己好好调试. 首先,这题目是一个常见的图书馆管理系统,虽然我 ...
- [DEFCON全球黑客大会] CTF(Capture The Flag)
copy : https://baike.baidu.com/item/ctf/9548546?fr=aladdin CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的 ...
- [CTF]Capture The Flag -- 夺旗赛
CTF(Capture The Flag) 简单介绍 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式. `In co ...
- 引言:CTF新世界
1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...
- PHP代码安全杂谈
虽然PHP是世界上最好的语言,但是也有一些因为弱类型语言的安全性问题出现.WordPress历史上就出现过由于PHP本身的缺陷而造成的一些安全性问题,如CVE-2014-0166 中的cookie伪造 ...
- 攻防世界 reverse leaked-license-64
mark一下,以后分析 原文:http://sibears.ru/labs/ASIS-CTF-Quals-2016-Leaked_License/ [ASIS CTF Quals 2016] - 泄露 ...
- mma ctf 1st && csaw 2015
(很久以前做的,现在发一下)最近做了两个CTF,水平太渣,做了没几道题,挑几个自己做的记录一下. mma ctf 1st 之 rps: from socket import * s = socket( ...
- 网络安全学习和CTF必不可少的一些网站
[转载备用] 原文地址 http://blog.csdn.net/ida0918/article/details/52730662 http://www.sec-wiki.com/skill/ 安全 ...
随机推荐
- HDU 4825 tire树
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- (三)论sizeof与strlen之间的区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- 压缩前端文件(html, css, js)
1:原因 在写前端代码时, 因为要尽可能的适合阅读会加入许多注释, 空格等, 这些在开发时是必要的, 但当你要发布时, 就需要让代码更加精简, 精简压缩的同时也混淆了代码, 安全性也加强了, 可以说是 ...
- nginx反向代理下载文件失败处理
最近遇到了客户在从我们的服务器下载文件失败时的情况.然后把解决方案一并整理一下以备后续.需要说明的是,我们前端都是使用nginx来做反向代理,后面的逻辑处理采用php的方式. 1.缓存目录不可写 ng ...
- 朝韩危机-Python模拟导弹互射
萨德系统是麻省理工学院的林肯实验室牵头开发的.林肯实验室可以说是美军方手中的一张王牌.二个反导系统(末段高空区域导弹防御(THAAD)系统,和 国家导弹防御系统(NMD))均由实验室牵头.它既是技术支 ...
- Bayer图像处理
Bayer是相机内部的原始图片, 一般后缀名为.raw. 很多软件都可以查看, 比如PS.我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化过来的..raw格式 内部 ...
- go build 不同系统下的可执行文件
Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能. 1.Mac下编译Linux, Windows平台的64位可执行程序: 1 2 $ CGO_ENABLED=0 GOOS=linu ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- javascript 中检测数据类型的方法
typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...
- align-items和align-content的区别
最近在研究flex布局,容器中有两个属性,是用来定义crossAxis测轴排列方式的.一开始接触align-items还可以理解感觉不难,后来看到align-content就感觉有点混淆了,特开一篇博 ...