跳转到帖子

recommended_posts

发布于
  • Members

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重新登录。
iijyq1zazpq2072.png
配置完成后的界面
登录成功
这样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设置字典路劲。
    3b0ad2c7a44e90c9069edfb66286931d
    54e0212a967731bf03086b51d388eb9f
    然后点击上方的start attack
    2ffb4edccb05cd8478d80b6b59508e44-blogsy
    如上,开始枚举破解。
    通过length的长度判决即可。
    红色部分为破解的密码
    通过上面的破解,我们发现length的长度存在不一样,大的为破解成功的账号和密码。

    Brute Force(medium)

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

    Brute Force(higt)

    高等级的暴力破解和低等级、中等等级的暴力破解不相同,它增加了一个user_token参数,所以增加了爆破难度,但是依然可以破解
    6dad122ff46192368a81537161e80713
    通过和low的对比,多了一个token参数。
    将抓到的包发送到intrude,选择攻击模式为pitchfock,并且给要破解的项带上美元符号
    204ee21435764c9d2201b32190b66546-blogsy
    options选项中,找到grep-extact
    f2281a79f44823799bdf3fe34c47568b
    找到Redirections模块设置允许重定向,选择always
    eba2bf14ab5564958ffd35aee9ead088
    设置密码本,点击payload,选择第一项的密码本与低等级的相同,第二项的时候选择Recursive grep 并且把之前得到的token值粘贴到下方的方框中。
    c9d81e74fcd8237f18e4ccdce430aeb2
    破解效果
    b75c0058aef7311f9b1194ffc37c238a

    命令注入 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功能
    a8528764dac8a09f8c5459b5845bd5a2

    解决乱码问题

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

    192.168.0.1 && net user

    428298de8abea7db34028a4c12b7d471

    Medium级别

    服务端代码解读

    <?php 
    
    if( isset( $_POST[ 'Submit' ]  ) ) { 
    
      // Get input 
    
      $target = $_REQUEST[ 'ip' ]; 
    
      // Set blacklist 
    
      $substitutions = array( 
    
          '&&' => '', 
    
          ';'  => '', 
    
      ); 
    
      // 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 "<pre>{$cmd}</pre>"; 
    
    } 
    
    ?>

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

漏洞利用

127.0.0.1 & ipconfig

865d1cb148eaaea1f2e6630b1081c262-blogsy

High

代码解读

<?php 

if( isset( $_POST[ 'Submit' ]  ) ) { 

    // Get input 

    $target = trim($_REQUEST[ 'ip' ]); 

    // Set blacklist 

    $substitutions = array( 

        '&'  => '', 

        ';'  => '', 

        '|  ' => '', 

        '-'  => '', 

        '$'  => '', 

        '('  => '', 

        ')'  => '', 

        '`'  => '', 

        '||' => '', 

    ); 

    // 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 "<pre>{$cmd}</pre>"; 

} 

?> 

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

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

127.0.0.1|dir

9cf27d48c4bc44c2433f668413d1dabc

跨站请求(csrf)

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

low级别

我们先对其抓包
698d85b86e061f5ef61313a59cd6efc2

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

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)就可以绕过了
5ea64de302446dbda17ecdc8aec93ab5

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 效果如下:
55e640ed51b6e27f0cc3911993228d93
在bur中对其抓包
f512c035de51e6b4b7ff021b63f3ae83
读取任意文件测试,我们在D盘新建一个txt
构造下面命令:
读取d盘下的bbskali.txt文件
http://192.168.123.129/vulnerabilities/fi/?page=D:\bbskali.txt
de8c9b528e5f89ffc4228fa091d401ee
访问远程文件
http://192.168.123.129/vulnerabilities/fi/?page=http://192.168.123.129/22.php
190dd4a71042dd413746594f7394c513
这样便完成了文件包含攻击。

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文件,浏览后直接上传成功。
c93840fb49b05a1b89bc4e599092dc0e

medium

如果我们直接上传,会提示如下Your image was not uploaded. We can only accept JPEG or PNG images.可以看到,对上传的文件做出了要求,必须是jpg和png
解决方法
抓包修改文件类型即可
38368a33ab260456ecf9cc3484ebe651
如下,成功上传。
ee0043cc6ee41fc81f61aad766981e95
还有一种方法就是将php的后缀改成jpg,然后在burp中将其重新改回php即可。

high

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

GIF98
<?php
phpinfo();
?>

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

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

866ca0c6f26d5548df6d2e936334b60f
成功将图片转变为php
7f55ef7739775dff344a4f5a8244824b

SQL Injection

low

首先我们对其进行抓包
6a5524eb4fbcdbcea838293f24fb064e
废话不说,神器sqlmap走一波

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

提示302跳转到了登录页面
abf88eeae8ff9a5aa69ed1ec255c7de0
所以,我们要在命令中加入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

成功爆出数据库
b9911d95095677ef2eed4f9f4113ffb4
其他的后续操作我这里就不在啰嗦了。

medium

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

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

e6ca654d09a9dfcdbada766316a71353

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

  • 查看数 704
  • 已创建
  • 最后回复

参与讨论

你可立刻发布并稍后注册。 如果你有帐户,立刻登录发布帖子。

游客
回帖…