PWNHUB 七月内部赛 babyboa、美好的异或 Writeup

                                                        

这次的 PWNHUB 内部赛的两道题目都不是常规题,babyboa 考察的是 Boa Webserver 的 cgi 文件的利用,美好的异或考察的则是通过逆向分析解密函数来构造栈溢出 ROP。两道题目的考点都非常新颖,其中第一道题更是结合了 Web,值得大家复现学习。点击头顶图片!

babyboa

这道题的外表就是一个 Web 页面

但是实际上他的主要内容都在 cgi 文件中

cgi 文件是使用静态编译的,这在线下比赛的题目中是非常常见的,所以学会如何还原静态库的符号信息非常重要,所以这里我们第一步先尝试着还原静态库的符号信息。

1.还原静态库的符号信息

还原静态库的信息一般用的是 IDA 提供的 FLIRT,这是一种函数识别技术,即库文件快速识别与鉴定技术(Fast Library Identification and Recognition Technology)。可以通过 sig 文件来让 IDA 在无符号的二进制文件中识别函数特征,并且恢复函数名称等信息,大大增加了代码的可读性,加快分析速度。

而标准库的 sig 文件也有现成制作好的,在https://github.com/push0ebp/sig-database中下载,并且把文件导入到 IDA/sig/pc 中就能够使用,我这里为了快速找到我们导入的 sig 文件,将该文件夹中原有的文件都放到了 bak 目录下,把我们猜测可能会用到的符号文件放置到目录下

导入后再在 IDA 中按 Shift + F5,打开“List of applied library modules”页面

然后再按 INS 并选择要自动分析特征还原的静态库文件

我这里测试多次后选择的是 Ubuntu 16.04 libc6(2.23-0ubuntu6/amd64),如果你不知道静态编译使用的是哪个版本的库文件,可以尝试多导入几个版本的文件进行测试。

导入之后可以看到识别到了 623 个函数,并且大部分函数都有了名称

2.逻辑分析

在 Web 页面中输入密码可以抓到如下的包

也就是实际上 Web 页面就是用来向后端的 cgi 传递参数,并且在 cgi 中判断密码信息

main 函数中分别判定了 REQUEST_METHOD 和 QUERY_STRING 是否正确,这两个参数分别代表的是访问的模式和传递的参数,在上面例子中应该是 GET 和 password=wjh。

通过初步的判断之后,就把参数的 127 字节复制到 bss 段上的一块内容上,并且通过 handle 函数来处理参数信息。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值