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;或者回到浏览器,先刷新页面,后右键图片在新标签页打开

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

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

230216PM08_11

230216PM08_12

230216PM08_13

230216PM08_14

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

后续步骤如法炮制而来

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

230216PM10_15

230216PM10_16

3. Web shell upload via path traversal

Web Shell 通过路径遍历上传

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

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

230217AM12_20

230217AM12_19

4. Web shell upload via extension blacklist bypass

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

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

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

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

第一步、修改.htaccess文件

1
2
3
4
5
6
7
8
# 修改名称 
.htaccess

# 修改 Content-Type
text/plain

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

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

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

1
2
3
4
5
6
7
8
# 修改名称 
code.shell

# 修改 Content-Type
image、png

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

230217AM10_23

230217AM10_24

230217AM10_25

230217AM10_26

5. Web shell upload via obfuscated file extension

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

利用%00 截断

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

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

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

230217AM11_27

230217AM11_28

6. Remote code execution via polyglot web shell upload

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

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

在 kali 中安装 ExifTool

1
apt install libimage-exiftool-perl

利用 ExifTool

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

230217PM06_34

230217PM06_35

7. Web shell upload via race condition

通过竞争条件上传 Web shell

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

230217PM09_36

230217PM09_38

230217PM10_40

230217PM10_41


© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k