zoukankan      html  css  js  c++  java
  • 论剑场web21 php伪协议+反序列化

    1. 看到题目,提示不是admin;查看源码发现部分PHP代码,审计PHP代码。
    a. 这里需要输入两个参数user和file。user值需要满足不为空,并且经过函数去取文件file_get_contents($user,'r')后,需要为字符串形式的admin。
    b. 文件包含了$file的值,并提示包含值应该为class.php

    2. 根据include()文件包含,可以想到的是用php伪协议读取文件,所以参数file=php://filter/read=convert.base64-encode/resource=class.php || index.php 这里读取index.php和class.php的源码;而对于参数user需要满足这个file_get_contents($user,'r')==="admin")。
    3. 如果让参数user的值为一个字符串,当file_get_contents($user,'r'),如果找不到该文件,其结果为false,就算可以找到文件也不能确定文件转换为字符串之后为admin,所以这里考虑到使用php://input协议。php://input协议可以对没有经过处理的post参数值进行文件读写操作。故参数user=php://input,并且传递一个post参数 admin。

    4. 获取到index.php和class.php 经过base64加密过的源码。解密后继续审计代码。
    a. index.php中文件包含结束后,要对参数$pass的值进行反序列化,并输出反序列化后的类$pass
    b. class.php的Read类中toString()函数,将文件转换成字符串,并输出。并提示应读取的文件为fla9.php

    5. 构造payload,对于参数user,其值继续为php://input并传递一个post值admin;对于参数file=class.php,将class.php文件包含进来;对于参数pass应该为Read序列化后的字符串,并且其变量$file值应为fla9.php。


    6. 在其源码中获得flag

  • 相关阅读:
    MyBatis(十)插件开发 之 插件运行原理
    通用Mapper(二)使用通用 Mapper
    通用Mapper(十四)通用Mapper接口大全
    通用Mapper(十三)通用Mapper原理
    通用Mapper(十二)通用Mapper配置项
    通用Mapper(十)二级缓存
    通用Mapper(九)通用 Mapper 接口扩展
    Linux安装与部署SonarQube
    Sonarqube分析代码并导出PDF分析报告
    SVN update失败,cleanup后再update
  • 原文地址:https://www.cnblogs.com/ersuani/p/web21.html
Copyright © 2011-2022 走看看