先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权;未经授权请勿转载。

投稿

  • 直接右上角【个人中心】-【创建新帖子】-【节点模块】选择【技术文章】。投稿时麻烦提供下可联系到作者的IM,方便审核沟通。(如未收到回复,联系wx:50421961)

  • Ps: MD编辑器支持图片拖拽上传、Word文档图片直接复制上传、截图复制自动上传 (๑•̀ㅂ•́)و✧


前言

做了一道Pwnhub会员日的题,整道题思路非常好玩,也引发了自己对于布尔盲注、伪随机数以及安全研究的一点点思考。文末有题目源码,复现起来很方便。
代码也发给了先知的工作人员,之后可能会有官方的复现环境供大家练习。

分析题目流程


一开始,是一个很常规的登录页面,简单测一下,没有SQLi,然后上扫描器,扫出来register.php、index.php(废话)、profile.php、config.php、flag.php。
profile.php需要先登录,于是去register.php(测过,没注入)注册一个账号,然后在index登录。
欢迎页面:

然后有一个莫名其妙的id参数,随便换一个数字,发现是其它账号的登录信息。

猜测背后的sql语句是:

select * from user where id='id'

ctf的老套路了,想办法弄出来admin,一般来说admin的账号id都是0或者1,但今天遇到个二般情况,admin的id是2……
然后,好玩的来了。

访问得到全部的源码(I like this~)。

审一遍就可以了解整个题目的逻辑。
首先,注册账号,来到这个神奇的profile页面,然后通过进入admin的欢迎页面,Get源码。其实,在这里不一定要挨个去试admin的id,因为id这个参数是个注入点,并且很容易就能发现,(但我是看了源码才知道……),我们可以通过注入,让它回显位显示admin。

payload:http://54.223.59.178/profile.php?id=1998%20union%20select%201,%27admin%27,3,4,5--+

拿到源码后,寻找flag输出点,在flag页面

需要的条件有两个,
1、POST传递duihuanma参数为正确的兑换码(与数据库里的一致)。

2、POST传递captcha参数经过md5加密之后取前四位,与之前生成的session['captcha']相等。
也就是
(substr(md5($_POST['captcha']), 0, 4)===$_SESSION['captcha'])
而sessionp[‘captcha’]会在上次页面刷新的时候输出出来

破题

就是以上两关,下面我们来一一破之

第一关难点

兑换码在数据库中的某一列中,但是我们并不知道列名,并且唯一的注入点,过滤了 【 . 】、【 _ 】、【 ( 】、【 ) 】
列名无法获取,数据无法直接通过回显爆出来。
但这时有一个技巧,就是通过order by在不知道列名的情况下通过布尔盲注的形式,注出来数据。
而问题有来了,布尔盲注需要不断访问页面,通过回显判断正确与否,但是profile.php页面会记录你的访问次数,一旦超过140次就会重置数据库里的兑换码。所以我们需要在140次之内爆出来36位数据。

通过布尔盲注爆出数据库里的兑换码

如何在不知道列名的情况下爆出来其中的数据呢?从朋友Sn00py那儿学了一招:

就是通过字符的ASCII码比较来获取。
通过手动测试能测出来,回显位是第二位,在数据库中兑换码为第四列
所以payload长这样:
http://54.223.59.178/profile.php?id=157%20union%20select%201,%27no%27,3,%275%27,5%20order%20by%204%20limit%200,1--+
我们可以在第四个显示位中放上猜测的可能的数据
举个例子,兑换码第一位字符为5,以下两种payload会得到不一样的回显


当输入字符的ASCII码大于正确字符时,会正确回显我们的ID

那怎么在140次之内爆出36位字符呢?
遍历求解肯定不行,次数太多,需要用到二分法。只使用二分法也不行,因为我本地测试的时候用了193次。
我们再来看一下生成36位字符串的代码

function duihuanma_product()
{
    $string = "1234567890abcdefghijklmnopqrstuvwxyz";
    return str_shuffle($string);
}

注意,str_shuffle函数是将字符串用伪随机的方式打乱,所以一个字符被使用过一次之后就不会再被使用。
所以我们的脚本中可以在获取一位的信息之后,可以将这个字符去掉。

脚本如下:

点击收藏 | 0 关注 | 0
登录 后跟帖