DVWA的典型例题分析

提醒,点击view source 可以查看源码(php)

Brute force

low

直接输入账号和密码(任意),使用burp抓包,并直接发送给intruder。如图所示:

先clear所有变量,在add$在需要爆破的字符前后,并且修改Attack type的变量,如图所示:

点击payloads攻击池,增加字典,或者手动添加爆破账号和密码,如图所示:

点击start attack开始攻击,如图所示:

根据爆破出来的字符长度变化获取账号和密码,如图所示:

medium

和low类似,不做演示。需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。

high

#账号和密码这里设置的是admin admin

使用burp抓包,发现token,发送给intruder模块,clear清空变量,add$增加要爆破的变量,修改Attack type值为pitchfork,如图所示:

在options中 找到grep extract,点击add设置如下参数,获取value值,并且复制下来,如图所示:

进而在options中找到redirections,修改为always,如图所示:

在resource pool中创建新的池,改为单线程,如图所示:

在payload中设置第一个攻击位,如图所示:

设置第二个攻击位,如图所示:

开始强制爆破,出来密码了,如图所示:

得到登录成功界面,如图所示:

Command injection

low

ping 127.0.0.1(回环地址)发现乱码,如图所示:

找到文件目录(D:\phpstudy_pro\WWW\DVWA-master\dvwa\includes)下dvwaPage.inc.php文件,用记事本打开,并把utf-8替换为gb2312,如图所示:

再次ping接,正常了,如图所示:

medium

#可以用 & 或 | 绕过

进行简单的ping接,如图所示:

也可以创建用户,127.0.0.1 | net user abc 123456/add 等等。#关涉到信息泄露,谨慎操作,最好虚拟机。

high

CSRF

low

本意是在网站里更改密码。

更改密码后,得到新的url,如图所示:

burp抓包,发现url栏的信息和请求的信息是一致的,如图所示:

修改url值,在新标签页打开,攻击成功了。如图所示:

medium

源码通过referer进行参数判断,抓包试试,如图所示:

构造页面

  • 本地ip地址,如图所示:

  • html页面名字改为网站的ip地址,如图所示:

目录,修改后缀名哦,如图所示:

访问网址Vulnerability: Cross Site Request Forgery (CSRF) :: Damn Vulnerable Web Application (DVWA)/ip地址,并抓包,如图所示:

攻击成功啦,如图所示:

high

本质上就是token问题。

输入修改的密码,使用burp进行抓包,如图所示:

利用medium中的网址进行抓包,添加token,如图所示:

得到结果,如图所示:

File inclusion

low

点击file1.php,显示page= 文件路径,如图所示:

访问不存在文件,如图所示:

访问linux系统文件,如图所示:

构建url,http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=D:\phpstudy_pro\WWW\DVWA-master\php.ini如图所示:

medium

查看源码发现对http存在过滤,如图所示:

远程文件上传目录,通过双写避开,把http改为hthttp即可。

high

存在对关键代码为 使用fnmatch()函数对page参数进行过滤,要求page必须以“file”开头,服务器才会包含相应的文件。如图所示:

修改page=file1.php为 page=file://+文件路径,如图所示:

File upload

low

分析上传图片,可以使用一句话木马

上传一句话木马,使用burp进行抓包,如图所示:

修改后缀名,png为php,如图所示:

forword放行获得文件上传路径,如图所示:

打开蚁剑,测试连接,如图所示:

进一步,就可以得到文件上传成功ok啦,如图所示:

medium
 // Is it an image?
    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
        ( $uploaded_size < 100000 ) ) {

图片格式必须是jpeg、png,文件要小于100000B!!!

相同步骤,不做演示。

high
// Is it an image?
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) &&
        getimagesize( $uploaded_tmp ) ) 

查看源码 发现只能上传后缀是 .jpg .png .jpeg 的文件,并且getimagesize(string filename) 函数会读取文件头。

利用文件包含上传就行。

Insecure CAPTCHA

low
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {
    // Hide the CAPTCHA form
    $hide_form = true;

    // Get input
    $pass_new  = $_POST[ 'password_new' ];
    $pass_conf = $_POST[ 'password_conf' ];
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '1' ) ) {
    // Hide the CAPTCHA form
    $hide_form = true;

    // Get input
    $pass_new  = $_POST[ 'password_new' ];
    $pass_conf = $_POST[ 'password_conf' ];

使用burp抓包,修改step=1为step=2,如图所示:

得到结果成功绕过,修改好密码了,如图所示

medium
<input type=\"hidden\" name=\"passed_captcha\" value=\"true\" />

增加passed-captcha验证,所使用bp进行抓包,修改值,如图所示:

得到结果,如图所示:

high
<?php
if( isset( $_POST[ 'Change' ] ) ) {
    // Hide the CAPTCHA form
    $hide_form = true;
    // Get input
    $pass_new  = $_POST[ 'password_new' ];
    $pass_conf = $_POST[ 'password_conf' ];
    // Check CAPTCHA from 3rd party
    $resp = recaptcha_check_answer(
        $_DVWA[ 'recaptcha_private_key' ],
        $_POST['g-recaptcha-response']
    );
    if (
        $resp || 
        (
            $_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3'
            && $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA'
        )
    ){
        // CAPTCHA was correct. Do both new passwords match?
        if ($pass_new == $pass_conf) {
            $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
            $pass_new = md5( $pass_new );
            // Update database
            $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "' LIMIT 1;";
            $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

            // Feedback for user
            echo "<pre>Password Changed.</pre>";
        } else {
            // Ops. Password mismatch
            $html     .= "<pre>Both passwords must match.</pre>";
            $hide_form = false;
        }
    } else {
        // What happens when the CAPTCHA was entered incorrectly
        $html     .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
        $hide_form = false;
        return;
    }
    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
?>

满足三个条件即可跳过验证

  • 验证码为真

  • g-recaptcha-response为hidd3n_valu3并且HTTP_USER_AGENT为reCAPTCHA

因此,可以利用第二种方法跳过验证。

不做过多演示,如图所示:

SQL injection

low

判断是否存在注入,尝试万能公式1' or 1=1 #,如图所示:

判断为字段型注入,查看字段名

-1' union select database(),group_concat(column_name) from  information_schema.columns where table_schema='dvwa' and  table_name='users' #

,进行联合注入爆破库1' union select 1,database()#,如图所示:

逐步爆破表·列·内容,如图所示:

-1' union select group_concat(user_id,first_name),group_concat(user,password) from users #

根据md5解密得到结果,如图所示:

sql注入中级和高级和初级做法差不多哦!!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰汐儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值