Subject
SQL Injection
Mind Palace
输入URL获得提示 => table = flag;column = flag
提交 1 获得
BP抓包发现 POST 请求 请求的内容 id
盲猜数字型注入;使用 1 and 1=1;# 测试
说明需要进行绕过;尝试 1 order by 2;# 失败
双写尝试 1 anandd 1=1;# 失败
大小写换乱尝试 1 AnD 1;# 失败
尝试只输入一个'
:
输入其他除开1或2的值都是返回 false
另外:
但是
确定是数字型SQL注入;并且过滤了许多字段(包括但不限于union、and、or、空格)
=> 猜测没有过滤左右括号(如果没有且函数名也没有被过滤就可以使用函数)
正常返回 => 可以使用括号
确定本题是布尔盲注且有大量过滤;还剩下一个问题是如何绕过空格
尝试 %00
;发现会是 SQL 语句执行异常
尝试 %0a 0b ...
:
正常返回;空格绕过方式为:%0a
;
下面开始构造payload => 由于 and 也被过滤了(并且暂时没有找到绕过的方式)
再鉴于左右括号的可用 => 使用 MySQL 的 IF 函数
编写Python代码进行布尔盲注:
返回的是 id=1 的回显 => 说明flag第一个字符为 f ;根据此编写代码
这里出现的问题是:Python代码在基本无错误的情况下但是直接返回了false => 说明'
单引号需要 urlencode => 失败了
说明虽然在BP中可以通过 %0a
绕过空格但是在 Python 代码中不能做到 => 猜测Python处理字符串的时候会有和直接在BP中输入的底层情况不一样(需要深入理解Python的字符串及相关情况 此处挖坑)
payload:
py = f"if(ascii(mid((select(flag)from(flag)),1,1))=ascii('f'),1,2)"
Look Ahead
根据不同情况下的过滤情况采用不同方式的注入;
并且在debug代码的时候尽量把代码写的清晰明了
END ヾ(?)?