深圳网站优化培训,wordpress内页关键词,抖音seo关键词优化,学生模拟网站开发实验目的
学习sql显注的漏洞判断原理掌握sqlmap工具的使用分析SQL注入漏洞的成因
实验工具
sqlmap是用python写的开源的测试框架#xff0c;支持MySQL#xff0c;Oracle#xff0c;PostgreSQL#xff0c;Microsoft SQL Server#xff0c;Microsoft Access#xff0c;I…实验目的
学习sql显注的漏洞判断原理掌握sqlmap工具的使用分析SQL注入漏洞的成因
实验工具
sqlmap是用python写的开源的测试框架支持MySQLOraclePostgreSQLMicrosoft SQL ServerMicrosoft AccessIBM DB2SQLiteFirebirdSybaseSAPMAXDB并支持6种SQL注入手段。 实验内容
SQL注入SQL Injection SQL注入攻击的产生 当应用程序使用输入内容来构造动态SQL语句以访问数据库时会发生SQL注入攻击。 如果代码使用存储过程而这些存储过程作为包含未筛选的用户输入的字符串来传递也会发生SQL注入。 SQL注入漏洞的本质是把用户输入的数据当做代码来执行违背了数据与代码分离的原则。 SQL注入漏洞有两个关键条件理解这两个条件可以帮助我们理解并防御SQL注入漏洞 用户能控制输入的内容 Web应用执行的代码中拼接了用户输入的内容 实验步骤
本次实验中我们先手工发现注入点再使用sqlmap工具来注入。
步骤1SQL注入漏洞验证 本步利用手工发现sql显注 什么是sql显注在sql注入的漏洞分类中如果程序员没有对数据库的报错进行过滤那么数据库所以产生的错误信息将呈现给前台的用户。当我们进行测试时通过报错信息来证明用户的输入传递至数据库此种漏洞的类型即为sql显注。 首先我们输入在浏览器中打开目标机网址172.16.12.2进入漏洞验证平台登录用户名为admin密码 password是个典型的弱密码。
在右侧下方的DVWA Secruty设置中将DVWA漏洞演示环境的安全级别设置为Low级别。
来到SQL Injection 显注的页面。
步骤2 手工判断注入点
看到他的user ID 是可以随意输入的
输入1的情况下返回的页面情况(网站正常的访问策略) 如果尝试输入1‘的情况下返回错误页面 我们发现页面中报错是直接返回数据库的报错信息至此可以断定此页面存在sql注入并且为显注模式。
步骤3使用sqlmap 本步骤将使用sqlmap对目标注入点进行扫描 sqlmap简介 sqlmap是一个开源的渗透测试工具可以自动检测和利用SQL注入漏洞。并且它拥有一个强大的检测引擎在安全人士眼中这是一款必备的安全工具。 sqlmap常用选项
-u url 指定要测试的网页URL常用于get类型的url测试。--cookiecookie值“ 指定测试链接时所使用的cookie常用于需登录后方能访问的页面。-p 指定存在注入点的参数可提高sqlmap的检测效率。-r 从文件读取数据 准备工作1我们需要启动burpsuite工具
准备工作2我们需要将浏览器的代码配置为 127.0.0.1 端口 8080
浏览器 “首选项”----“高级” ----“网络”----连接 “设置” ----填入代理地址后保存退出即可。 如果配置成功我们DVWA页面我们将看到burpsuite的proxy选项卡中成功的抓取到HTTP请求。 并且我们能看到一行对本次试验非常重要地方PHPSESSIDxxxxx,securitylow 至此准备工作已经全部完成开启我们的攻击之旅啦
在burpsuite的intercept中右键将截获的信息保存到文件中。
开启终端使用sqlmap攻击使用-r参数 我们所使用的sql语句为 sqlmap -r /root/2
至此我们成功使用sqlmap对URL进行了注入测试我们可以清晰的看到sqlmap成功的对URL进行了测试。
在输出中成功的检测到目标主机的数据库版本、操作系统版本PHP版本以及Apache的版本。 实验分析
本步骤将针对源代码进行审计探寻漏洞产生的原因。 ?php
if(isset($_GET[Submit])){// Retrieve data$id $_GET[id];$getid SELECT first_name, last_name FROM users WHERE user_id $id;$result mysql_query($getid) or die(pre . mysql_error() . /pre );$num mysql_numrows($result);$i 0;while ($i $num) {$first mysql_result($result,$i,first_name);$last mysql_result($result,$i,last_name);$html . pre;$html . ID: . $id . brFirst name: . $first . brSurname: . $last;$html . /pre;$i;}
}
?当代码获取用户所传入的参数后直接带入sql进行查询 在正常情况下传输至数据库的语句为select first_name,last_name from users where user_id1; 而当攻击者输入1‘后传输至数据库的语句则变成select first_name,last_name from users where user_id1 当出现了2个‘后则前面的一个闭合了代码中的’但多出的一个‘则会导致sql产生错误并且直接传回至web页面。 这也是为何我们使用1’测试显注的方式。