RFI到RCE利用

时间:2015-08-05 20:09:43

标签: php regex

我的挑战是$_GET['mPage']包含php文档。

代码下方:http://example.com/ includeMe.php

<?php
phpinfo();
?>

moveTo.php 正则表达式:

if(preg_match("/(data|http|https|ftp):\/\/([a-zA-Z0-9-_]+)\.([a-zA-Z0-9-_]+)/i", $_GET['mPage'])) {
echo 'no';
}

如何绕过包含includeMe.php

尝试:

http://example.com/moveTo.php?mPage=http://example.com/incldue.php

1 个答案:

答案 0 :(得分:1)

假设两个php文档都可以在同一个域下访问,你可以使用&#34;相对文件访问&#34;并尝试这样的事情:

http://example.com/moveTo.php?mPage=includeMe.php
http://example.com/moveTo.php?mPage=../includeMe.php

如果文件位于同一个文件夹中,那么前者为我工作。 根据文件在文件系统中的位置,您可能需要使用多个../和正确的文件夹名称遍历文件系统。

如果&#34; includeMe.php&#34;可以在不同的域(例如example2.com)下访问,您需要使用未包含在正则表达式中的协议。

正如您在此处所见:DEMO所有使用httphttpsdataftp的尝试都被阻止。您可以使用ftps,这在RFI中也很常见。

可能进一步逃避的清单:https://websec.wordpress.com/2010/02/22/exploiting-php-file-inclusion-overview/