zoukankan      html  css  js  c++  java
  • 攻防世界-web ics-05

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

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

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

    查看一下源码吧

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

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

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

    然后我们利用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

    构造好后来go一下,

    这样页面里出现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

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

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

    构造Pyload:

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

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

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

    Pyload:

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

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

    pyload:

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

    成功读取flag.

    cyberpeace{e451121369f5be315f891e55e01fe1d6}

  • 相关阅读:
    MOSS中的User的Title, LoginName, DisplayName, SID之间的关系
    如何在Network Monitor中高亮间隔时间过长的帧?
    SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
    如何查看SQL Profiler? 如何查看SQL死锁?
    什么是Telnet
    The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain.
    Windows SharePoint Service 3.0的某个Web Application无搜索结果
    网络连接不上, 有TCP错误, 如果操作系统是Windows Server 2003, 请尝试一下这里
    在WinDBG中查看内存的命令
    The virtual machine could not be started because the hypervisor is not running
  • 原文地址:https://www.cnblogs.com/awsole/p/13866994.html
Copyright © 2011-2022 走看看