博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asis CTF 2015-Car_Market
阅读量:4659 次
发布时间:2019-06-09

本文共 1671 字,大约阅读时间需要 5 分钟。

恰好找到了这道题的bin文件,就来做一下。

这道题目是一个经典的选单程序但是具有三级选单,在bss段存在指针数组ptr,ptr中的值指向每个主结构,其中主结构如下所示。

[16]  model[4]   price[4]   padding;[8]   pointer 共32byte

其中pointer会指向一个子结构customer

[32]  first_name[32]  name[8]   pointer共72byte

这个pointer又会指向一个一块内存comment

[72] 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 = 0;  while ( v4 < a2 )  {    v2 = _IO_getc(stdin);    if ( v2 == '\n' )    {      result = v5;      *(_BYTE *)v5 = 0;      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 + 24) )  {    if ( *(_QWORD *)(*(_QWORD *)(a1 + 24) + 64LL) )// [64]                                                // [8] pointer    {      free(*(void **)(*(_QWORD *)(a1 + 24) + 64LL));      memset(*(void **)(a1 + 24), 0, 72uLL);    }    free(*(void **)(a1 + 24));  }  v1 = Alloc_ZI_STRUCT();  result = a1;  *(_QWORD *)(a1 + 24) = v1;  return result;}

 实际是通过控制内存块来控制free函数的值,实现free全局指针域。然后紧接着的分配会重用这个块,控制了指针以进行任意地址读写。感觉这道题还是很有难度的,洞比较好找,但是想出利用却比较难。

转载于:https://www.cnblogs.com/Ox9A82/p/6006955.html

你可能感兴趣的文章
Linux命令date日期时间和Unix时间戳互转
查看>>
LightOJ - 1297 Largest Box LightOJ(一元三次方程求极大值)
查看>>
883H - Palindromic Cut(思维+STL)
查看>>
.NET FTP上传文件
查看>>
操作系统中的调度算法
查看>>
JVM方法调用栈
查看>>
目标跟踪之Lukas-Kanade光流法
查看>>
python基础(第二课)
查看>>
C语言预处理条件语句的 与或运算
查看>>
D1图论最短路专题
查看>>
.Net core的日志系统
查看>>
shell脚本颜色的设置
查看>>
2019春总结作业
查看>>
小程序数据绑定的拓展用法
查看>>
DRF 版本 认证
查看>>
MVC 4将jQuery升级到1.9出现各种问题。。。
查看>>
JedisPool资源池优化
查看>>
第2次作业+105032014140
查看>>
JS防抖与节流
查看>>
redhat enterprixe 5.0 DNS 服务配置与管理
查看>>