freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

从零玩转DVWA-02低安全逐模块讲解及演示效果(我叫树新风)
我叫树新风wei 2022-03-30 18:23:31 109628
所属地 北京

从这篇开始由最低安全级别逐个模块开始细分,一直讲到高安全级别,即使您是一位零基础对网络安全感兴趣或者已经刚刚步入工作,都能很好的理解里面所讲的知识点,不光是看,请跟着一起做,动手是学习的主要方式。
一. DVWA每个模块的详细解释和漏洞介绍


1.1.1 Datebase Setup 数据库设置模块
可对DVWA数据库进行重置,在每次实验后,大家写完笔记之后记得重置。


1.1.2 Brute Force 脆弱性模块
可以对设置的用户名/密码进行登录操作,关于登录DVWA的问题,即使不知道密码也可以破解,后面会和大家详细讲解。


代码

<?php 
if( isset( $_GET['Login'] ) ) { 
    $user = $_GET['username'];    
    $pass = $_GET['password'];
    $pass = md5($pass);
    $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );
 
    if( $result && mysql_num_rows( $result ) == 1 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "avatar" );
        // Login Successful
        echo "<p>Welcome to the password protected area " . $user . "</p>";
        echo '<img src="' . $avatar . '" />';
    } else {
        //Login failed
        echo "<pre><br>Username and/or password incorrect.</pre>";
    } 
    mysql_close();
} 
?> 


1.1.3 Command Execution命令执行模块
大家从这块可以很好的看出这个是一个ICMP的漏洞尝试


代码

<?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) {    
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';      
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';       
    }    
}
?> 


1.1.4 CSRF跨站请求伪造模块
通过这个大家可以看出这个是修改密码的地方 


源码

<?php            
    if (isset($_GET['Change'])) {
        // Turn requests into variables
        $pass_new = $_GET['password_new'];
        $pass_conf = $_GET['password_conf'];
        if (($pass_new == $pass_conf)){
            $pass_new = mysql_real_escape_string($pass_new);
            $pass_new = md5($pass_new);
            $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
            $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );                      
            echo "<pre> Password Changed </pre>";        
            mysql_close();
        }   
        else{        
            echo "<pre> Passwords did not match. </pre>";            
        }
    }
?> 


1.1.5 Insecure CAPTCHA不安全验证码模块
大家可以发现这个和跨站请求伪造是不是很相像,但是不是用同一种攻击方式


源码

Insecure CAPTCHA Source
<?php
 
if( isset( $_POST['Change'] ) && ( $_POST['step'] == '1' ) ) {
    
    $hide_form = true;
    $user = $_POST['username'];
    $pass_new = $_POST['password_new'];
    $pass_conf = $_POST['password_conf'];
    $resp = recaptcha_check_answer ($_DVWA['recaptcha_private_key'],
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);
 
    if (!$resp->is_valid) {
        // What happens when the CAPTCHA was entered incorrectly
        echo "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
        $hide_form = false;
        return;    
    } else {
            if (($pass_new == $pass_conf)){
            echo "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes. <br /></pre>";
            echo "
            <form action=\"#\" method=\"POST\">
                <input type=\"hidden\" name=\"step\" value=\"2\" />
                <input type=\"hidden\" name=\"password_new\" value=\"" . $pass_new . "\" />
                <input type=\"hidden\" name=\"password_conf\" value=\"" . $pass_conf . "\" />
                <input type=\"submit\" name=\"Change\" value=\"Change\" />
            </form>";
            }    
 
            else{
                    echo "<pre> Both passwords must match </pre>";
            $hide_form = false;
            }
    }
}
 
if( isset( $_POST['Change'] ) && ( $_POST['step'] == '2' ) ) 
{
    $hide_form = true;
        if ($pass_new != $pass_conf)
        {
                echo "<pre><br />Both passwords must match</pre>";
        $hide_form = false;
                return;
        }
        $pass = md5($pass_new);
        if (($pass_new == $pass_conf)){
               $pass_new = mysql_real_escape_string($pass_new);
               $pass_new = md5($pass_new);
 
               $insert="UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
               $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
 
               echo "<pre> Password Changed </pre>";
               mysql_close();
        }
 
        else{
               echo "<pre> Passwords did not match. </pre>";
        }
}
 
?>


1.1.6 File Inclusion文件包含模块


源码

<?php
    $file = $_GET['page']; //The page we wish to display 
?>


1.7 SQL Injection 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");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';
 
        $i++;
    }
}
?>




1.1.8 SQL Injection (Blind) 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); // Removed 'or die' to suppres mysql errors
 
    $num = @mysql_numrows($result); // The '@' character suppresses errors making the injection 'blind'
 
    $i = 0;
 
    while ($i < $num) {
 
        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';
 
        $i++;
    }
}
?>



1.1.9 File Upload 文件上传模块


源码

<?php
    if (isset($_POST['Upload'])) {
 
            $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
            $target_path = $target_path . basename( $_FILES['uploaded']['name']);
 
            if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
                
                echo '<pre>';
                echo 'Your image was not uploaded.';
                echo '</pre>';
                
              } else {
            
                echo '<pre>';
                echo $target_path . ' succesfully uploaded!';
                echo '</pre>';
                
            }
 
        }
?>




1.1.10 Reflected Cross Site Scripting (XSS)跨站脚本攻击模块


源码

<?php
 
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
 
 $isempty = true;
 
} else {
        
 echo '<pre>';
 echo 'Hello ' . $_GET['name'];
 echo '</pre>';
    
}
 
?>




1.1.11 Stored Cross Site Scripting (XSS)跨站脚本攻击模块

代码

<?php
 
if(isset($_POST['btnSign']))
{
 
   $message = trim($_POST['mtxMessage']);
   $name    = trim($_POST['txtName']);
   
   // Sanitize message input
   $message = stripslashes($message);
   $message = mysql_real_escape_string($message);
   
   // Sanitize name input
   $name = mysql_real_escape_string($name);
  
   $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
   
   $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
   
}
 
?>



2.1.1 DVWA Security安全等级调整
可以在这里修改安全等级


2.1.2 PHPINFO 查看PHP版本 


PS:从下节开始将从上至下模块来进行教学,安全级别从低到高都会在后续更新,并且还有更多靶场教学,不妨关注防止走丢。

# 渗透测试 # 网络安全 # web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 我叫树新风wei 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
我叫树新风wei LV.3
这家伙太懒了,还未填写个人描述!
  • 7 文章数
  • 2 关注者
SQLILABS-详解less-5
2024-02-28
SQLILABS-详解less-4
2024-02-28
SQLILABS-详解less-3
2024-02-28