第一次成功复现一个简单漏洞,于是写下这篇随笔记录一下

首先我们来看dvwa中low级的sql注入的源码

源码文件路径如下图:

源码如下:

 <?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 . '<br>名字: ' . $first . '<br>姓氏: ' . $last;
$html .= '</pre>'; $i++;
}
}
?>

简单分析一下源码,

当php确认用户提交表单后开始执行,接受id参数给$id,未经任何过滤直接用sql语句查询数据库,最后将查询后的结果集中的数据打印出来

接下来为了复现漏洞,用phpMyAdmin创建一个新数据库

创建了一个test的数据库,库里创建了users表,表中随便写了一些数据如下:

然后写一个可以查询数据库内容的网页,开始复现漏洞

代码如下:

 <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
<form action="" method="GET">
<p>id:<br/><input type="text" name="id">&nbsp<input type="submit" name='submit' value="submit"/>
</p>
</form>
<?php error_reporting(E_ALL&~E_NOTICE); // 连接数据库和test表
$con=mysql_connect("localhost","root","root");
if (!$con){
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db("test", $con); if(isset($_GET['submit'])){ //判断表单是否提交
$id=$_GET['id']; //接受表单中id的参数赋给$id
$sql="SELECT user_name FROM users WHERE user_id='$id'"; //sql查询语句 //执行查询语句并将结果集赋给$result
$result=mysql_query($sql) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result);
$i = 0;
while ($i < $num) { //提取$result的结果集中的user_name的数据并将其赋给$name
$name = mysql_result($result,$i,"user_name"); // 将$id和$name的值拼接在变量$html上最后打印出来
$html .= '<pre>';
$html .= 'ID: ' . $id . '<br>名字: ' . $name;
$html .= '</pre>';
$i++;
}
echo $html;
} ?>
</body>
</html>

测试

先试试正常的输入,显示出与用户ID相应的用户名

                     

    接着试试 万能密码 ,显示出了所有用户名

接着就是查看数据库及其管理员账号

接着是一系列sql注入

爆数据库名

      

      爆列名(这里好像把dvwa数据库的users表里的内容也爆出来了……)

     

爆user_pwd里的内容

总结

    复现漏洞的过程中,能逐渐理解、明白漏洞的原理,清楚代码的构造,收获很大。

DVWA中low级的sql注入漏洞的简单复现的更多相关文章

  1. [CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现

    记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php ...

  2. mybatis的sql中使用$会出现sql注入示例

    mybatis的sql中使用$会出现sql注入示例: 模拟简单登录场景: 页面代码: function login(){ //sql注入 var user = { username : "' ...

  3. 关于ECSHOP中sql注入漏洞修复

    标签:ecshop sql注入漏洞修复 公司部署了一个ecshop网站用于做网上商城使用,部署在阿里云服务器上,第二天收到阿里云控制台发来的告警信息,发现ecshop网站目录下文件sql注入漏洞以及程 ...

  4. sqlmap查找SQL注入漏洞入门

    1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...

  5. 手工检测SQL注入漏洞

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  6. SQL注入漏洞总结

    目录: 一.SQL注入漏洞介绍 二.修复建议 三.通用姿势 四.具体实例 五.各种绕过 一.SQL注入漏洞介绍: SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序.一个成功的S ...

  7. SQL注入漏洞知识总结

    目录: 一.SQL注入漏洞介绍 二.修复建议 三.通用姿势 四.具体实例 五.各种绕过 一.SQL注入漏洞介绍: SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序.一个成功的S ...

  8. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  9. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

随机推荐

  1. C# 6.0:Null – Conditional 操作符

    在引入nameof操作符的同时,C# 6.0 还引入了Null-Conditional操作符.它使开发者可以检查object引用链中的null值.这个null-conditional 操作符写作&qu ...

  2. 廖雪峰Java8JUnit单元测试-2使用JUnit-1使用Before和After

    1. @Before和@After 同一个单元测试内的多个测试方法: 测试前都需要初始化某些对象 测试后可能需要清理资源fileInputStream.close() @Test public voi ...

  3. 面向对象版Tab栏切换

    <div class="wrapper" id="wrapper"> <ul class="tab" id="t ...

  4. nginx+uwsgi配置

    nginx #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; ...

  5. ubuntu10.04换官方源

    ubuntu10.04LTS官方已经不再维护,导致部分软件.库文件等下载有问题,可换以下源地址解决问题 deb http://old-releases.ubuntu.com/ubuntu lucid ...

  6. ubuntu 下安装mulval

    怎么在虚拟机下安装ubuntu这里就不多说了 ubuntu怎么安装静态ip可以参考:https://www.cnblogs.com/braveym/p/8640563.html ubuntu安装jdk ...

  7. projective dynamics的global solve中 引入拉格朗日乘子的简化方法

    想了一下使用乘子法还是可行的/做一个简化.在约束C(xn) 在C(xn-1)处线性展开 (n是时间步骤)具体推导留作备份等有时间了去代码实现 3式是一个典型的LCP问题 用PGS就行 左边的系数部分依 ...

  8. eShopOnContainers 看微服务④:Catalog Service

    服务简介 Catalog service(目录服务)维护着所有产品信息,包括库存.价格.所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 先看代码结构(下图). 主要依赖: ...

  9. Git 记不住命令

    Git 记不住命令 每次用每次查 真棒 git log --stat --author=someone # git查询某个人修改记录 git log filename # fileName相关的com ...

  10. Python第7天

    其他内置函数: abs() 绝对值 all()均为真则为True any()有一个为真就为True bin()十进制->二进制 bool() 空,0,None为False,其余为True byt ...