代码审计-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
0 条评论