ThinkPHP5.1文件上传漏洞攻防实验,基于最新版的ThinkPHP V5.1.41 LTS做的攻防实验。
实验目的:市面上基于ThinkPHP5.1开发的程序存在getshell高危后门很多没有维护或者得不到维护,对于没有一定技术含量用户也不知道怎么维护。同时waf防火墙防御getshell也有限,毕竟存在绕过可能。所以推出本教程,可以让一些用户做简单维护安全参考和临时后门修复。文章写的很菜请见谅,过阵子我会把环境开源出来。环境可以做攻防实验又可以满足运营,是一个轻量级安全的网址导航cms。
文章目录
0x1 存在上传漏洞的方法 示例
0x2 攻击效果
0x3 跟具官方文档修复漏洞方案
0x4 防御效果
0x5 附加nginx目录安全配置
0x6 参考文献
0x1 存在上传漏洞的代码 示例
class Upload extends Base
{
public function image()
{
$sys = db('sysconfig')->where('varname', 'imagesurl')->find();
$file = request()->file('file');
if (empty($file)) {
$this->error('请选择上传文件');
}
$info = $file->move($_SERVER['DOCUMENT_ROOT'] . '/upload');
$filename = $info->getSaveName();
$filename = str_replace('\', '/', $filename);
$imgurl = $sys['value'] . $filename;
if ($filename) {
$arr = array(
'state' => '1',
'imgurl' => $imgurl,
);
return json($arr);
} else {
$this->error($file->getError());
}
}
}
0x2攻击效果:后缀.php后门文件上传成功!
0x3 根具官方文档修复漏洞方案 示例
class Upload extends Base
{
public function image()
{
$sys = db('sysconfig')->where('varname', 'imagesurl')->find();
$file = request()->file('file');
if (empty($file)) {
$this->error('请选择上传文件');
}
$info = $file->validate(['ext' => 'jpg,png,gif'])->move($_SERVER['DOCUMENT_ROOT'] . '/upload');
if ($info) {
$filename = $info->getSaveName();
$filename = str_replace('\', '/', $filename);
$imgurl = $sys['value'] . $filename;
if ($filename) {
$arr = array(
'state' => '1',
'imgurl' => $imgurl,
);
return json($arr);
} else {
$this->error($file->getError());
}
} else {
$this->error('error不支持该文件格式上传');
}
}
}
0x4防御效果:没有进入文件上传流程,返回错误提示。
防御逻辑:使用手册中validate()方法,通过ext配置项,定义允许上传文件的白名单过滤。validate(['ext' => 'jpg,png,gif']);然后通过对象赋值的$info进行判断真假,抛出相对于的error。
0x5附加nginx目录安全配置
例子1:nginx,利用deny all;或者return 404;禁止访问,防止了上传目录的脚本执行权限。
#nginx
location ~ ^/upload/.*.(php|php5)$
{
deny all;
}
#nginx
location ~ ^/upload/.*.(php|php5)$
{
return 404;
}
0x6参考文献:
[ThinkPHP5.1手册-文件上传]https://www.kancloud.cn/manual/thinkphp5_1/354121
本文始发于微信公众号(安全龙):ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论