常见的sql注入环境搭建

By : Mirror王宇阳

Time:2020-01-06

PHP+MySQL摘要

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

常规回显注入

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

  1. <?php
  2. echo '<h1>';
  3. echo 'SQL常规回显注入环境';
  4. echo '</h1>';
  5. $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
  6. if (!$conn){//判断连接是否成功
  7. echo '连接MySQL发生错误:'.mysqli_error($conn);
  8. }else{
  9. echo '成功连接MySQL!';
  10. }
  11. echo '<hr>';
  12. // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
  13. mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
  14. // mysqli_query() -- 执行sql命令
  15. // set names utf-8 -- 写入数据库采用的编码(utf-8)
  16. mysqli_query($conn, 'set names utf-8');
  17. // 接收参数text
  18. if(isset($_GET['text'])){
  19. $text=$_GET['text'];
  20. }
  21. // 拼接sql语句并执行
  22. $sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
  23. echo 'SQL拼接结果:'.$sql;
  24. echo '<hr>';
  25. // 执行sql语句并返回结果
  26. $result=mysqli_query($conn, $sql);
  27. $row=mysqli_fetch_array($result, MYSQLI_BOTH);
  28. if ($row){ //回显结果
  29. echo '<table>';
  30. echo '<tr>';
  31. echo '<td>UID</td><td>NAME</td><td>PASS</td>';
  32. echo '</tr><tr>';
  33. echo '<td>'.$row['uid'].'</td>';
  34. echo '<td>'.$row['name'].'</td>';
  35. echo '<td>'.$row['pass'].'</td>';
  36. echo '</tr>';
  37. echo '</table>';
  38. }
  39. ?>
  1. ' union select 1,database(),version(),4; -- +

报错注入

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

  1. <?php
  2. echo '<h1>';
  3. echo 'SQL报错注入环境';
  4. echo '</h1>';
  5. $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
  6. if (!$conn){//判断连接是否成功
  7. echo '连接MySQL发生错误:'.mysqli_error($conn);
  8. }else{
  9. echo '成功连接MySQL!';
  10. }
  11. echo '<hr>';
  12. // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
  13. mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
  14. // mysqli_query() -- 执行sql命令
  15. // set names utf-8 -- 写入数据库采用的编码(utf-8)
  16. mysqli_query($conn, 'set names utf-8');
  17. if(isset($_GET['text'])){
  18. $text=$_GET['text'];// 接收参数text
  19. }
  20. $sql = "SELECT * FROM admin WHERE uid = '$text';";
  21. echo $sql."<hr>";
  22. $result = mysqli_query($conn, $sql )
  23. or die( '<pre>' . mysqli_error($conn) . '</pre>');
  24. //mysqli_error -- 返回最近调用函数的最后一个错误描述
  25. $row=mysqli_fetch_array($result, MYSQLI_BOTH);
  26. if($row){
  27. echo '<table>';
  28. echo '<tr>';
  29. echo '<td>UID</td><td>NAME</td><td>PASS</td>';
  30. echo '</tr><tr>';
  31. echo '<td>'.$row['uid'].'</td>';
  32. echo '<td>'.$row['name'].'</td>';
  33. echo '<td>'.$row['pass'].'</td>';
  34. echo '</tr>';
  35. echo '</table>';
  36. }
  37. ?>
  1. ' and updatexml(1,concat(0x7e,database(),0x7e,version()),1); -- +

盲注

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

盲注主要分为两种:

  • 布尔盲注:通过判断页面响应确定是否正确的布尔sql拼接。
  • 时间盲注:通过sql查询的时间延迟sleep函数来测定构造的布尔sql是否成立。
  1. <?php
  2. echo '<h1>';
  3. echo 'SQL常规盲注环境';
  4. echo '</h1>';
  5. $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
  6. if (!$conn){//判断连接是否成功
  7. echo '连接MySQL发生错误:'.mysqli_error($conn);
  8. }else{
  9. echo '成功连接MySQL!';
  10. }
  11. echo '<hr>';
  12. // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
  13. mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
  14. // mysqli_query() -- 执行sql命令
  15. // set names utf-8 -- 写入数据库采用的编码(utf-8)
  16. mysqli_query($conn, 'set names utf-8');
  17. if(isset($_GET['text'])){
  18. $text=$_GET['text'];// 接收参数text
  19. }
  20. $sql = "SELECT * FROM admin WHERE uid = '$text';";
  21. echo $sql."<hr>";
  22. $result = mysqli_query($conn, $sql ) ;
  23. $row=mysqli_fetch_array($result, MYSQLI_BOTH);
  24. if($row){
  25. echo '查询结果存在!';
  26. // echo '查询完成';
  27. } else {
  28. echo '查询结果不存在!';
  29. // echo '查询完成';
  30. }
  31. /*
  32. 如上源码,当echo返回结果为第一类情况则适用布尔盲注的方法不断的猜结
  33. 当echo返回结果为第二类情况则适用时间盲注,通过时间延迟的方式来判断布尔结果并不断的猜解
  34. */
  35. ?>
  • 布尔盲注测试
  1. ' or left(database(),2)='te'; -- +

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

宽字节注入

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

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

  1. <?php
  2. echo '<h1>';
  3. echo 'SQL宽字节注入环境';
  4. echo '</h1>';
  5. $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
  6. if (!$conn){//判断连接是否成功
  7. echo '连接MySQL发生错误:'.mysqli_error($conn);
  8. }else{
  9. echo '成功连接MySQL!';
  10. }
  11. echo '<hr>';
  12. // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
  13. mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
  14. // mysqli_query() -- 执行sql命令
  15. // set names utf-8 -- 写入数据库采用的编码(utf-8)
  16. mysqli_query($conn, 'set names gbk');
  17. // 接收参数text
  18. if(isset($_GET['text'])){
  19. $text=$_GET['text'];
  20. }
  21. // 拼接sql语句并执行
  22. $sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
  23. echo 'SQL拼接结果:'.$sql;
  24. echo '<hr>';
  25. // 执行sql语句并返回结果
  26. $result=mysqli_query($conn, $sql);
  27. $row=mysqli_fetch_array($result, MYSQLI_BOTH);
  28. if ($row){ //回显结果
  29. echo '<table>';
  30. echo '<tr>';
  31. echo '<td>UID</td><td>NAME</td><td>PASS</td>';
  32. echo '</tr><tr>';
  33. echo '<td>'.$row['uid'].'</td>';
  34. echo '<td>'.$row['name'].'</td>';
  35. echo '<td>'.$row['pass'].'</td>';
  36. echo '</tr>';
  37. echo '</table>';
  38. }
  39. ?>

登录框注入

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>SQL_login注入测试</title>
  5. <meta charset="utf-8"/>
  6. </head>
  7. <body>
  8. <form action="./sql_login.php" method="post">
  9. <div>
  10. 用户名:<input type="text" name="name" />
  11. </div>
  12. <div>
  13. 密码:<input type="password" name="pass" />
  14. </div>
  15. <input type="submit" value="提交" />
  16. </form>
  17. <div>
  18. <?php
  19. $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 连接mysql
  20. if (!$conn){//判断连接是否成功
  21. echo '连接MySQL发生错误:'.mysqli_error($conn);
  22. }else{
  23. echo '成功连接MySQL!';
  24. }
  25. echo '<hr>';
  26. // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str
  27. mysqli_select_db($conn, 'text') or die ("无法正确连接到数据库!");
  28. // mysqli_query() -- 执行sql命令
  29. // set names utf-8 -- 写入数据库采用的编码(utf-8)
  30. mysqli_query($conn, 'set names utf-8');
  31. // 接收参数name pass
  32. $name=$_POST['name'];
  33. $pass=$_POST['pass'];
  34. // echo $name . "~" . $pass;
  35. // 拼接sql语句并执行
  36. $sql="SELECT * FROM admin WHERE name='$name' and pass='$pass' LIMIT 0,1";
  37. echo 'SQL拼接结果:'.$sql;
  38. echo '<hr>';
  39. // 执行sql语句并返回结果
  40. if($result=mysqli_query($conn, $sql)){
  41. $row=mysqli_fetch_array($result, MYSQLI_BOTH);
  42. if ($row){ //回显结果
  43. echo '<table>';
  44. echo '<tr>';
  45. echo '<td>UID</td><td>NAME</td><td>PASS</td>';
  46. echo '</tr><tr>';
  47. echo '<td>'.$row['uid'].'</td>';
  48. echo '<td>'.$row['name'].'</td>';
  49. echo '<td>'.$row['pass'].'</td>';
  50. echo '</tr>';
  51. echo '</table>';
  52. } else {
  53. echo "用户名或密码错误";
  54. }
  55. }
  56. ?>
  57. </div>
  58. </body>
  59. </html>
  1. 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. ng-model 将时间戳转换为标准时间

      html部分 <div class="form-group loginCon1"> <label class="col-sm-2 control-l ...

  2. hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  3. supersocket新的配置属性 "textEncoding"

    在 SuperSocket 1.6 之前的版本, 当你通过Session对象发送文本时, 将文本信息转换成能够通过Socket传输的二进制数据的默认编码是UTF8. 你可以通过设置 Session 的 ...

  4. wpf 登录时显示状态动态图

    下面的示例演示了如何在登录过程时,界面上显示状态图标,登录完成后隐藏图标: public partial class MainWindow : Window { public MainWindow() ...

  5. h5的canvas绘制方格(边框随即色)

    文章地址 https://www.cnblogs.com/sandraryan/ 两个循环绘制 <body> <canvas id="cv" width=&quo ...

  6. Appium + python 自动化测试环境配置

    -------------------------------------------------------------- 1. jdk-8u121-window(32位的就下载32位的,64位的就 ...

  7. 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统

    本文告诉大家如何安装这个系统 本文的方法我自己没试过,如果失败了,不要打我 下载地址 中文版 https://pan.baidu.com/s/1gAJSSE6KB9JHXo4BT_VfmA 其他请看 ...

  8. H3C DHCP中继显示及维护

  9. Storm使用总结

    Strom安装 Strom启动 ./zkServer.sh start 启动nimbus主节点: nohup bin/storm nimbus >> /dev/null & 启动s ...

  10. wpf passwobox 添加水印

    之前有做过wpf texbox添加水印,这个并不难 重写一下样式就可以了,今天用到了passwordbox 添加水印的时候 发现还是有点难度的. 这个难度就在于如何去取password的长度来控制水印 ...