文章目录
知识点
1.文件上传漏洞挖掘:
- (1)关键字搜索(函数、键字、全局变量等):比如$_FILES(全局变量),move_uploades_file等
- (2)应该功能抓包(burp 抓包看路径):寻找任何可能存在上传的应用功能点,比如前台会员中心,后台新闻添加等。
- (3)漏洞举例:逻辑漏洞-先上传文件再判断后缀名,通过MIME类型来判断文件类型、前端校验文件类型而服务端未校验。
2.MVC开发框架类:
https://www.cnblogs.com/wsybky/p/8638876.html
MVC各部分的职能:
模型Model – 管理大部分的业务逻辑和所有的数据库逻辑。模型提供了连接和操作数据库的抽象层。
控制器Controller - 负责响应用户请求、准备数据,以及决定如何展示数据。
视图View – 负责渲染数据,通过HTML方式呈现给用户。
3.Thinkphp框架:
了解怎么查找就行
http://sites.thinkphp.cn/1556331
4.phpstorm+xdebug调试:
调试步骤可参考:
https://mp.weixin.qq.com/s/7K8edea8imalZ8_jJp3ODw
https://blog.csdn.net/yinhangbbbbb/article/details/79247331
文件上传漏洞挖掘过程
- 搜索$_FILES–>后台中心–>上传图像–>跟踪代码–>逻辑判断
- 业务功能分析–>会员中心–>上传图像–>跟踪代码–>逻辑判断
- 搜索文件上传–>会员中心–>上传图像–>跟踪代码–>逻辑判断
演示案例
- PHP文件上传全局变量$_FILES
- PHPStorm+xdebug断点调试演示
- Beescms无框架后台任意文件上传
- Finecms基于前台MVC任意文件上传
- Cltphp基于前台TP5框架任意文件上传
1.PHP文件上传全局变量$_FILES
活用函数定位,全局搜索等相关功能
2.PHPStorm+xdebug断点调试演示
![在这里插入图片描述](https://img-blog.csdnimg.cn/b22da1d7b71946e28982d4d13d15be91.png
配置好xdebug 后开始调试:
跳出浏览器,你要不断放包才能到指定的登入界面
上传图片到达该界面:
一步一步放包可以看代码它是怎么走的
Beescms无框架后台任意文件上传
上传时抓包,看到相关文件名
搜索相关文件名:文字查找
载入源码到审计系统
搜索文件上传——$_FILES
登陆后台查看
或者抓包
找到参数,指向文件
找代码里是否有过滤函数
双击定位up_file
定位函数:
再对比前面是对比文件类型mime
这里file_type 是后缀名
获取路径文件名验证文件后缀等
上传一个.jpg发现不允许
pathinfo:以数组的形式显示文件的路径 名字 后缀
匹配到的后缀是txt
仍是txt
尝试截断%00
此处没有漏洞
换一个代码
抓包
这个是判断MIME,存在上传漏洞,.php上传成功。
PHP文件上传全局变量$_FILES
PHPStorm+xdebug断点调试演示
登录后台管理admin
点击步入,依次加载向后执行
Finecms基于前台MVC任意文件上传
控制器里找核心代码
逻辑问题:他先上传 后验证
public function upload() {
// 创建图片存储文件夹
$dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';
@dr_dir_delete($dir);
!is_dir($dir) && dr_mkdirs($dir);
if ($_POST['tx']) {
$file = str_replace(' ', '+', $_POST['tx']);
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){
$new_file = $dir.'0x0.'.$result[2];
if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {
exit(dr_json(0, '目录权限不足或磁盘已满'));
} else {
$this->load->library('image_lib');
$config['create_thumb'] = TRUE;
$config['thumb_marker'] = '';
$config['maintain_ratio'] = FALSE;
$config['source_image'] = $new_file;
foreach (array(30, 45, 90, 180) as $a) {
$config['width'] = $config['height'] = $a;
$config['new_image'] = $dir.$a.'x'.$a.'.'.$result[2];
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));
break;
}
}
list($width, $height, $type, $attr) = getimagesize($dir.'45x45.'.$result[2]);
!$type && exit(dr_json(0, '图片字符串不规范'));
}
} else {
exit(dr_json(0, '图片字符串不规范'));
}
} else {
exit(dr_json(0, '图片不存在'));
}
这个函数:将一个字符串写入文件
要写入的文件,文件内容
逻辑问题:先上传 后验证
Cltphp基于前端TP5框架任意文件上传
核心代码在框架里
在个人中心上传文件抓数据包
参考上一例:mvc 结构
根据url访问模式决定
分析代码,不如说分析框架
也是逻辑问题——不使用thp官方验证,验证和顺序
上传不成功,抓不到包
前端——view
涉及资源:
ThinkPHP网址导航-教程资源:https://sites.thinkphp.cn/1556331
php MVC框架实例教程:https://www.cnblogs.com/wsybky/p/8638876.html
phpstorm+xdebug调试详细教程:https://blog.csdn.net/yinhangbbbbb/article/details/79247331
参考:
https://www.bilibili.com/read/cv13692186/
https://blog.csdn.net/grb819/article/details/118600611