DVWA靶场-File Upload 文件上传

往期博文:

DVWA靶场-Brute Force Source 暴力破解

DVWA靶场-Command Injection 命令注入

DVWA靶场-CSRF 跨站请求伪造

DVWA靶场-File Inclusion 文件包含

靶场环境搭建

https://github.com/ethicalhack3r/DVWA

[网络安全学习篇附]:DVWA 靶场搭建

目录

 

File Upload

Low File Upload

核心代码

Medium File Upload

核心代码

High File Upload

核心代码

windows下 制作图片木马

linux下 制作图片木马

Impossible File Upload

核心代码


File Upload

Low File Upload

核心代码

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
        // Yes!
        echo "<pre>{$target_path} succesfully uploaded!</pre>";
    }
}

?>

low 级别对上传的文件没有任何的过滤,并且会输出文件上传成功后保存的路径

我们本地构造info.php 文件

<?php phpinfo(); ?>

将其上传

上传成功后,使用输出的路径直接追加到当前页面的url 之后

../../hackable/uploads/info.php

 

Medium File Upload

核心代码

<?php 

    // File information

    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];

    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];

    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; 

    // Is it an image?

    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&

        ( $uploaded_size < 100000 ) ) 

?>

中级相较于初级增加了文件类型检测机制,我们只需要通过bp 抓包,修改tyoe 参数即可绕过

 

High File Upload

核心代码

<?php 

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

    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];

//取得文件后缀名

    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);

    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ]; 

    // 判断后缀名是否为jpg,jpeg,png

    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&

        ( $uploaded_size < 100000 ) &&

//getimagesize 进行图片检测

        getimagesize( $uploaded_tmp ) ) {

?>

这里的getimagesize 函数会对我们上传的图片进行验证,我们可以通过制作图片木马来绕过这个函数,

windows下 制作图片木马

copy pic.png/b+info.php/a info.png

linux下 制作图片木马

# 将 info.php 内容追加到 pic.png

cat info.php >> pic.png

 

# png + php 合成 png 图马

cat pic.png info.php >> info.png

 

# 直接 echo 追加

echo '<?php phpinfo();?>' >> pic.png

 

上传成功

这里我们结合文件包含漏洞去验证我们上传的图片木马

vulnerabilities/fi/?page=file:///C:\phpStudy\WWW\DVWA-master\hackable\uploads\test_info.jpg

 

Impossible File Upload

核心代码

<?php

    // token 防御csrf
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); 

    //使用时间戳的md5值作为文件名
    $target_file   =  md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;

    // 检测文件的后缀名,文件大小,getimagesize()检测
    if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) && ( $uploaded_size < 100000 ) &&
    ( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
    getimagesize( $uploaded_tmp ) ) { 

        // 删除源数据,重新生成图片
        if( $uploaded_type == 'image/jpeg' ) {
            $img = imagecreatefromjpeg( $uploaded_tmp );
            imagejpeg( $img, $temp_file, 100);
        }
        else {
            $img = imagecreatefrompng( $uploaded_tmp );
            imagepng( $img, $temp_file, 9);
        } 

       //销毁图像资源
       imagedestroy( $img ); 

// Generate Anti-CSRF token
generateSessionToken(); 

?>

 

可以看到,Impossible级别的代码对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入token防护CSRF攻击,同时对文件的内容作了严格的检查,过滤了图片中的恶意代码,导致攻击者无法上传含有恶意脚本的文件。


https://www.sqlsec.com/2020/05/dvwa.html#toc-heading-31

https://www.freebuf.com/articles/web/119467.html

猜你喜欢

转载自blog.csdn.net/weixin_43252204/article/details/106567267