2019-2-26 dvwa学习(3)--sql注入级别high和session

这篇博客详细介绍了在DVWA中,针对SQL注入的High级别进行的学习和研究。作者通过分析代码执行流程,发现High级别的安全性并不如预期,没有使用字符转义,仅通过LIMIT 1限制查询结果,但可被SQL注入攻击。同时,作者尝试使用sqlmap进行攻击,遇到了因查询与结果在不同页面导致的挑战,通过使用--second-order参数解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019-2-26 dvwa学习(3)–sql注入级别high和session

继续把dvwa环境安全级别调整为high
观察界面
在这里插入图片描述
high级别页面,点击"here to change your ID",会打开另外一个网页(session-input.php),然后输入3,提交,在主页面上会显示数据。
感觉high和low差不多,只不过high的提交和显示结果不在一个页面上。
先尝试按照low级别的同样方法攻击。
在这里插入图片描述
结果也是可以注入成功,说明high也字符型注入。
我们可以研究一下与源代码的执行过程。
step1./var/www/html/vulnerabilities/sqli/index.php

 $page[ 'body' ] .= "Click <a href=\"#\" onclick=\"javascript:popUp('session-input.php');return false;\">here to change your ID</a>.";

以上代码表示点击"here to change your ID",会打开session-input.php页面

step2./var/www/html/vulnerabilities/sqli/session-input.php

<?php

define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';

dvwaPageStartup( array( 'authenticated', 'phpids' ) );

$page = dvwaPageNewGrab();
$page[ 'title' ] = 'SQL Injection Session Input' . $page[ 'title_separator' ].$page[ 'title' ];

if( isset( $_POST[ 'id' ] ) ) {
        $_SESSION[ 'id' ] =  $_POST[ 'id' ];
        //$page[ 'body' ] .= "Session ID set!<br /><br /><br />";
        $page[ 'body' ] .= "Session ID: {$_SESSION[ 'id' ]}<br /><br /><br />";
        $page[ 'body' ] .= "<script>window.opener.location.reload(true);</script>";
}

$page[ 'body' ] .= "
<form action=\"#\" method=\"POST\">
        <input type=\"text\" size=\"15\" name=\"id\">
        <input type=\"submit\" name=\"Submit\" value=\"Submit\">
</form>
<hr />
<br />

<button onclick=\"self.close();\">Close</button>";

dvwaSourceHtmlEcho( $page );

?>

简单说明
1.这个页面数据是提交本页的<action="#">
2.数据提交后,

<think>好的,我现在需要处理用户关于DVWASQL注入的请求。首先,用户想要了解相关的教程或示例,我得确保回答结构清晰,符合他们提供的系统级指令。 首先,我应该回忆一下DVWA的基本情况。DVWA是一个用于练习Web应用漏洞的平台,包含SQL注入等模块。用户可能需要知道如何配置环境,所以第一步可能需要介绍如何设置安全等级为Low,因为不同等级对应不同的防护措施,而Low是最基础的,适合演示注入原理。 接下来,用户可能需要具体的示例步骤。我需要分步骤解释如何在Low级别下进行注入,比如输入&#39; or &#39;1&#39;=&#39;1之类的Payload,并解释其原理。同时,要确保所有数学表达式代码正确使用LaTeX格式,比如变量用$包裹,代码块用三个反引号标注语言。 然后,用户可能想知道其他安全等级的情况,比如MediumHigh,以及如何防范SQL注入。这时候需要分点说明每个等级的不同防护措施,例如Medium使用下拉菜单mysql_real_escape_string,而High使用更复杂的Token机制。同时,提供防御措施,比如预处理语句输入过滤,并引用提供的参考资料,比如引用[1][2]。 还要注意生成相关问题,这可能包括不同等级的注入方法、如何绕过防护以及防范的最佳实践。确保问题与用户查询相关,并且能够引导他们深入理解。 另外,必须检查是否有正确的引用标识,比如在提到防御方法时引用[^1][^2],以及在渗透测试资源处引用[^3]。需要确保引用标记自然放置在相关段落的末尾,而不是生硬添加。 最后,要确保整个回答使用中文,语言流畅,结构清晰,分步骤说明,并且包含代码示例引用。同时避免使用任何Markdown格式,除了代码块引用标识。需要检查LaTeX是否正确,比如$符号的使用,以及独立公式是否用$$包裹,但在这个回答中可能数学表达式不多,主要集中在代码示例上。 可能还需要验证用户提供的引用链接是否与内容相关,比如引用[1]是关于快速排序的,但用户的问题是关于SQL注入的,所以可能需要调整引用的使用,确保引用内容与上下文相关。例如,在提到安全资源共享时引用,在渗透测试工具时引用。 总结,回答的结构应该是先介绍DVWASQL注入的基本设置,然后分步骤讲解不同安全等级的注入方法,提供代码示例,接着讨论防御措施,最后生成相关问题,并正确引用提供的参考资料。</think># DVWA SQL注入教程与示例分析 ## 一、环境准备 1. 安装DVWA:需部署PHP环境(推荐XAMPP/WAMP),下载DVWA源码解压至Web目录 2. 设置安全等级:登录后进入"DVWA Security",将安全级别设为**Low**(原始无防护状态) 3. 访问注入页面:导航栏选择"SQL Injection" ## 二、Low级别注入 ### 步骤演示 ```sql 用户ID输入框输入:&#39; or &#39;1&#39;=&#39;1 等效SQL语句: SELECT first_name, last_name FROM users WHERE user_id = &#39;&#39; or &#39;1&#39;=&#39;1&#39; ``` 此时会返回所有用户数据(如图1所示)。该漏洞源于直接拼接用户输入: $$sql = "SELECT first_name, last_name FROM users WHERE user_id = &#39;$id&#39;";$$ ### 其他Payload示例 1. `&#39; UNION SELECT user, password FROM users#`(获取凭证数据) 2. `&#39;; DROP TABLE users;-- `(破坏性注入) ## 三、中级(Medium)防护 当安全级别设为Medium时: 1. 输入方式变为**下拉菜单** 2. 后端使用`mysql_real_escape_string()`过滤 3. 绕过方法:通过Burp Suite拦截修改POST参数 ## 四、高级(High)防护 安全级别High时: 1. 使用Session验证Token 2. 输入限制为单条查询 3. 绕过需要结合二次注入技术 ## 五、防御措施 1. 使用预处理语句: ```php $stmt = $db->prepare("SELECT first_name FROM users WHERE user_id = ?"); $stmt->bind_param("i", $id); ``` 2. 实施输入过滤:`preg_match(&#39;/^[0-9]+$/&#39;, $_GET[&#39;id&#39;])` 3. 最小化数据库权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值