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

首先我们来看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. 51nod1227 平均最小公倍数

    $Ans(l,r)=ans(r)-ans(l-1)\\ans(n)=\sum\limits_{i=1}^n \sum\limits_{j=1}^i \frac{j}{gcd(i,j)}\\=\sum\ ...

  2. js通过replace()方法配合正则去除空格

    <script> //去掉全部空格 var str = " 546546 4564 46 46 88 88 "; var str = str.replace(/\s+/ ...

  3. 7.11 animals.c 程序

    7.11 animals.c 程序 #include <stdio.h> #include <ctype.h> int main(void) { char ch; printf ...

  4. 事务回滚 SET XACT_ABORT ON

    USE tempdb IF OBJECT_ID ('dbo.test') IS NOT NULL DROP TABLE dbo.test GO CREATE TABLE dbo.test ( id I ...

  5. Resharper快捷键汇总

    编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...

  6. lucene搜索之高级查询

    使用Query子类查询 MatchAllDocsQuery TermQuery NumericRangeQuery BooleanQuery 使用QueryParser QueryParser Mul ...

  7. MJRefresh在Xode6中报错处理

      MJRefresh在Xcode6中会报错,objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self),简单调 ...

  8. python-封装方法用于读取excel

    1.实现获取excel某张表的行数.单元格数据 #coding=utf-8 import xlrd #获取excel文件 data = xlrd.open_workbook('file_path/xx ...

  9. 来源于知乎专栏:https://zhuanlan.zhihu.com/p/29619457

    1. 校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1- ...

  10. 214. Spring Security:概述

    前言 在之前介绍过了Shiro之后,有好多粉丝问SpringSecurity在Spring Boot中怎么集成.这个系列我们就和大家分享下有关这方面的知识. 本节大纲 一.什么是SpringSecur ...