代码审计-PHP框架MVC类上传断点调试挖掘

相关知识点
关键字搜索
- 文件上传的相关函数:
move_uploaded_file等 - 文件上传的关键字:在写上传的时候会有注释,如
//上传 - 全局变量
$_FILES - 应用功能抓包:前台会员中心,后台新闻添加等可能存在上传的地方
Beescms 无框架后台任意文件上传


搜索相关关键字


查看其中一个文件上传的处理过程

访问该页面

上传一个doc文件抓包分析看传递的参数

传递的参数:文件说明:
file_info和uppic,传递的表单名为up

fl_html()里面将传递的字符串利用htmlspecialchars将特殊字符转换为 HTML 实体is_uploaded_file()函数检查指定的文件是否是通过 HTTP POST 上传的。如果文件是通过 HTTP POST 上传的返回 TRUE,可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件。$_FILES['up']['tmp_name']是is_uploaded_file()要检查的文件,up是要上传的表单名,tmp_name变量中的值就是文件在Web服务器中临时存储的位置(上传文件的临时保存文件)- 确定文件的大小限度(这里是系统设置的值)
up_file处理上传的文件,并且验证是否符合上传标准- 根据
up_file返回值(返回的字典形式)确定文件的路径、扩展名、大小、时间 - 最后在进行数据库的插入操作
- 定位函数
up_file,传递了三个参数:表单名,文件大小,文件类型


pathinfo()以数组的形式返回关于上传的文件路径信息,如/testweb/test.txt,生成数组:[dirname] => /testweb;[basename] => test.txt;[extension] => txt;[filename] => test

- 这里的关键就是绕过
pathinfo(),让php文件的格式的能够最后检测,最后测试结果是没办法绕过
更换一个
$_FILES函数存在的文件(admin_pic_upload.php)

抓包分析


处理图片上传的函数是
up_img(),还传递了一个数组,因该是允许上传文件的格式,定点查询这里函数

pathinfo()函数以数组的形式返回关于文件路径的信息。[dirname]: 目录路径;[basename]: 文件名;[extension]: 文件后缀名;[filename]: 不包含后缀的文件名(注意:这里没有检测[extension],之前检测了这里是无法绕过的)

将临时文件上传到设置路径上

抓包修改文件类型

在上传目录查看,由于随机有规律,可以尝试根据规律进行穷举尝试,或者通过其他方式获得文件名

Finecms 基于前台 MVC 任意文件上传

对头像上传进行抓包分析(上传
test.jpg文件,这是一个基于MVC的框架的网站),s对应目录,c对应文件名,m对应方法

在MVC框架内的
controller中,查找member目录,文件名为account,函数为upload(一般核心代码都在控制器里面)

将file进行正则式匹配,取第三个(这里应该是文件的路径+文件后缀名),然后将传参的值进行替换,解码,写入新文件(在这里没有存在任何的过滤)


直接上传文件,返回1,文件查看(发现了四张图片)


将目录文件删除,修改数据包的文件头为PHP格式,上传后返回报错

但是文件夹有第一个文件的php,漏洞的原因就是没有严格过滤文件名

最后一次更新于2022-04-07 09:57
Alipay
Wechat
0 条评论