常见的sql注入环境搭建

By : Mirror王宇阳

Time:2020-01-06

PHP+MySQL摘要

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

常规回显注入

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

<?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>';
}
?>
' union select 1,database(),version(),4; -- +

报错注入

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

<?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>'; } ?>
' and updatexml(1,concat(0x7e,database(),0x7e,version()),1); -- +

盲注

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

盲注主要分为两种:

  • 布尔盲注:通过判断页面响应确定是否正确的布尔sql拼接。
  • 时间盲注:通过sql查询的时间延迟sleep函数来测定构造的布尔sql是否成立。
<?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返回结果为第二类情况则适用时间盲注,通过时间延迟的方式来判断布尔结果并不断的猜解
*/
?>
  • 布尔盲注测试
' or left(database(),2)='te'; -- +

  • 时间盲注测试
if(ascii(substr(database(),1,1))='t',1,sleep(10)); -- +

宽字节注入

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

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

<?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 '--+

<!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>
admin'; -- +

常见的sql注入环境搭建的更多相关文章

  1. SQL注入环境的搭建

    使用Phpstudy搭建SQL注入环境: 1.下载phpstudy安装 2.下载sql实验环境 所用环境的代码是一个印度人的开源项目平台.里面包含了基本的各种注入类型,同时又有get和post类型,以 ...

  2. 常见的SQL注入检测语句(转载)

    0x00 前言 现在很多WAF都能拦截sqlmap.havij 等注入工具的发包注入,所以这时我们需要在浏览器上使用hackerbar 进行手工注入,或者说是手工绕过注入攻击 0x01 发现SQL 注 ...

  3. AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建

    一.测试环境介绍 1. 宿主使用工作站(HYPR-V)基本配置如下: 处理器:Intel(R) Core(TM) i5-4470 CPU @ 3.20GHz 3.20GHz 内存(RAM):8.00G ...

  4. 初探SQL注入需要知道的5个问题

    SQL注入产生原理 可控变量(注入点,就是传参) 带入数据库查询 变量未存在过滤或过滤不严谨 例子: 获取admin表的pass里面的数据 select * from users where id=1 ...

  5. 搭建sql注入实验环境(基于windows)

    搭建服务器环境 1.下载xampp包 地址:http://www.apachefriends.org/zh_cn/xampp.html 很多人觉得安装服务器是件不容易的事,特别是要想添加MySql, ...

  6. SQL Server 学习之环境搭建

    SQL Server 环境搭建 说明:本文是sqlServer的安装和测试环境的搭建 版本是SQLServer 2005版,由于该版本只能在Windows7或者更低的系统上才能安装,更高的系统请安装S ...

  7. 代码审计之SQL注入

    0x00概况说明 0x01报错注入及利用 环境说明 kali LAMP 0x0a 核心代码 现在注入的主要原因是程序员在写sql语句的时候还是通过最原始的语句拼接来完成,另外SQL语句有Select. ...

  8. SQL注入之重新认识

    i春秋作家:anyedt 原文来自:https://bbs.ichunqiu.com/thread-41701-1-1.html 引言 作为长期占据 OWASP Top 10 首位的注入,认识它掌握它 ...

  9. SQL注入之DVWA平台测试mysql注入

    今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...

随机推荐

  1. Laravel引入第三方库的方法

    https://blog.csdn.net/will5451/article/details/52472695 1.首先在app目录下创建一个新的文件夹,命名libs(可自定义) 2.(可选)考虑到后 ...

  2. ccf-201403-3有趣的命令行

    傻逼题,要是考试只能得0分.. 提供几组傻逼数据,这要是在真实的生活中一定是错的... 还是要好好读题吧,全凭自己的感觉就得0分 albw:x 4 ls -a docu Case 1: -a ls - ...

  3. js中的数据类型及常用属性和方法

    JavaScript 字符串 字符串(或文本字符串)是一串字符(比如 "Bill Gates").字符串被引号包围.您可使用单引号或双引号您可以在字符串内使用引号,只要这些引号与包 ...

  4. 2019-1-29-win10-uwp-使用-Microsoft.Graph-发送邮件

    title author date CreateTime categories win10 uwp 使用 Microsoft.Graph 发送邮件 lindexi 2019-01-29 16:36:3 ...

  5. tf.variance_scaling_initializer() tensorflow学习:参数初始化

    CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...

  6. git clone和download zip的区别

    采用git clone的项目包含.git目录,这里面有历史版本信息 采用下载zip文件的是没有版本历史信息的.只是当前分支的最新版本 克隆指令: $ git clone git://github.co ...

  7. Django入门3--Models

  8. mysql ”Invalid use of null value“ 解决方法

    1.问题描述 因为要更改"information"表中的"编号"列为非空,使用数据库查询语句“alter table information modify '编 ...

  9. Server,Servlet,ServletConfig,ServletContext,Session,Request,Response

    Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...

  10. CF1151div2(Round 553)

    CF1151div2(Round 553) 思路题大赛 A 少考虑了一种情况,到死没想到 B 貌似我随机化50000次,没找到就无解貌似也过了 感觉随随便便乱搞+分类讨论都可以过的样子 #includ ...