DVWA是一款基于PHP和mysql开发的web靶场练习平台,集成了常见的web漏洞如sql注入,xss密码破解等常见漏洞。本教程将以DVWA为例,演示常见的web漏洞的利用和攻击。
dvwa

下载安装

点击下面的连接开始下载,并配置config.inc.php文件。

$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'dvwa';
$_DVWA[ 'db_password' ] = '123456';

更改为你的数据库账号信息。

登录创建数据库

访问http://127.0.0.1输入账号和密码均为admin点击Create / Reset Database创建数据库,当数据库创建完成后,会自动登出,用户名:admin密码:password重新登录。

配置完成后的界面
登录成功
这样dvwa的安装和配置就完成了。

在dvwa security选项中,可以调整dvwa的难易程度,

Brute Force(low)

Brute Force即为暴力破解,通过枚举获取管理员的账号和密码,在实际的操作中,一般用来破解后台管理系统的登录。

准备

  • user.txt pass.txt(用户字典和密码字典)
  • 神器burp

    在burp中抓包

    打开浏览器,在该模块任意输入账号和密码,在burp中抓包。
    burp抓包
    抓到包后,右键send ro intruder
    send to intruder
    intruderpositions选择中,先点击clear$清除所有的变量。
    然后分别给usernamepassword这两个字段后面的内容添加add$
    添加变量
    并将attack type的值设置为cluster bomb
    payloads选择中分别给payload 1payload 2设置字典路劲。


    然后点击上方的start attack

    如上,开始枚举破解。
    通过length的长度判决即可。
    红色部分为破解的密码
    通过上面的破解,我们发现length的长度存在不一样,大的为破解成功的账号和密码。

    Brute Force(medium)

    中等等级的暴力破解和低等级的相同,只是低等级的暴力破解可以进行sql注入,而中等级的把其中的字符串给过滤掉了,但是操作相同。
    需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。

    Brute Force(higt)

    高等级的暴力破解和低等级、中等等级的暴力破解不相同,它增加了一个user_token参数,所以增加了爆破难度,但是依然可以破解

    通过和low的对比,多了一个token参数。
    将抓到的包发送到intrude,选择攻击模式为pitchfock,并且给要破解的项带上美元符号

    options选项中,找到grep-extact

    找到Redirections模块设置允许重定向,选择always

    设置密码本,点击payload,选择第一项的密码本与低等级的相同,第二项的时候选择Recursive grep 并且把之前得到的token值粘贴到下方的方框中。

    破解效果

    命令注入 Command Injection

    命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 命令)的一种注入攻击手段。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。

    命令连接符

    command1 && command2
    &&表示先执行command1,执行成功后执行command 2,否则不执行command 2
    command1 & command2
    $表示先执行command 1,不管是否成功,都会执行command 2
    command1 || command2
    ||表示先执行command1,执行失败后,执行command2

    low

    我们先选输入一个ip地址,发现是对ip地址的ping功能

    解决乱码问题

    解决此问题的方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可。
    利用

    192.168.0.1 && net user

    Medium级别

    服务端代码解读

     '', 
    
          ';'  => '', 
    
      ); 
    
      // Remove any of the charactars in the array (blacklist). 
    
      $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 
    
      // Determine OS and execute the ping command. 
    
      if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 
    
          // Windows 
    
          $cmd = shell_exec( 'ping  ' . $target ); 
    
      } 
    
      else { 
    
          // *nix 
    
          $cmd = shell_exec( 'ping  -c 4 ' . $target ); 
    
      } 
    
      // Feedback for the end user 
    
      echo "
    {$cmd}
    "; } ?>

    可以看到,相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&” 、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。

漏洞利用

127.0.0.1 & ipconfig

High

代码解读

 '', 

        ';'  => '', 

        '|  ' => '', 

        '-'  => '', 

        '$'  => '', 

        '('  => '', 

        ')'  => '', 

        '`'  => '', 

        '||' => '', 

    ); 

    // Remove any of the charactars in the array (blacklist). 

    $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 

    // Determine OS and execute the ping command. 

    if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 

        // Windows 

        $cmd = shell_exec( 'ping  ' . $target ); 

    } 

    else { 

        // *nix 

        $cmd = shell_exec( 'ping  -c 4 ' . $target ); 

    } 

    // Feedback for the end user 

    echo "
{$cmd}
"; } ?>

相比Medium级别的代码,High级别的代码进一步完善了黑名单,但由于黑名单机制的局限性,我们依然可以绕过。
漏洞利用

黑名单看似过滤了所有的非法字符,但仔细观察到是把| (注意这里|后有一个空格)替换为空字符,于是 |成了“漏网之鱼”。

127.0.0.1|dir

跨站请求(csrf)

CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

low级别

我们先对其抓包


也就是说,当我们访问http://127.0.0.1/vulnerabilities/csrf/?password_new=888888&password_conf=888888&Change=Change我们的密码就会改变,我们可以伪造这条链接,发送给受害者,在不知不觉中对方的密码就会被修改。

Medium

Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是192.168.153.130),希望通过这种机制抵御CSRF攻击。
漏洞利用
过滤规则是http包头的Referer参数的值中必须包含主机名(这里是192.168.153.130)
我们可以将攻击页面命名为192.168.153.130.html(页面被放置在攻击者的服务器里,这里是10.4.253.2)就可以绕过了

hig

High级别的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。
试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成CSRF攻击。

File Inclusion(文件包含)

File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

low

我们先点击file1.php 效果如下:

在bur中对其抓包

读取任意文件测试,我们在D盘新建一个txt
构造下面命令:
读取d盘下的bbskali.txt文件
http://192.168.123.129/vulnerabilities/fi/?page=D:\bbskali.txt

访问远程文件
http://192.168.123.129/vulnerabilities/fi/?page=http://192.168.123.129/22.php

这样便完成了文件包含攻击。

Medium

Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。但是对相对路劲的限制没多大。
http://192.168.123.129/vulnerabilities/fi/?page=hthttp://tp://192.168.123.129/22.php
当然,上面的方法比较麻烦的话,我们可以尝试将url进行编码。这样便躲过了规则的限制。

High

High级别的代码规定只能包含file开头的文件,看似安全,但依然可以利用file协议绕过防护策略。

文件上传(File Upload)

利用文件上传,我们可以上传我们的一句话木马,很方便的会获得系统shell

low

我们建立一个php文件,浏览后直接上传成功。

medium

如果我们直接上传,会提示如下Your image was not uploaded. We can only accept JPEG or PNG images.可以看到,对上传的文件做出了要求,必须是jpg和png
解决方法
抓包修改文件类型即可

如下,成功上传。

还有一种方法就是将php的后缀改成jpg,然后在burp中将其重新改回php即可。

high

要求上传的文件类型必须为:”.jpg”、”.jpeg” 、”*.png”之一,同时限制了文件的长度。
所以,一种简单的方法就是,合成图片木马。但是这种方法受到php环境的限制,有时不能成功解析php图片木马。
最佳方案
图片木马配合命令注入
我们先做一个图片木马

GIF98


然后在命令注入模块中,执行下面命令

127.0.0.1 & copy D:\phpstudy_pro\WWW\hackable\uploads\22.jpeg D:\phpstudy_pro\WWW\hackable\uploads\aa.php


成功将图片转变为php

SQL Injection

low

首先我们对其进行抓包

废话不说,神器sqlmap走一波

sqlmap -u "http://192.168.123.129//vulnerabilities/sqli/?id=1&Submit=Submit" --dbs

提示302跳转到了登录页面

所以,我们要在命令中加入cookie保存会话的在线
在burp抓到的包里面,我们复制PHPSESSID=ff4rv0j6rkgv9fnqlvfmhch8bh; security=low放到sqlmap即可。
所以,最终的命令为:

sqlmap -u "http://192.168.123.129//vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=ff4rv0j6rkgv9fnqlvfmhch8bh; security=low" --dbs

成功爆出数据库

其他的后续操作我这里就不在啰嗦了。

medium

同样的方法,还时对其抓包
通过抓包和low的对比发现,由原来的get方式变成了post
将抓到的包复制另存为bbskali.txt

执行如下命令;

sqlmap -r "/root/bbskali.txt" --dbs

未完待续,好累?睡觉了!明天接着码字!

最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏