利用php7新特性繞過查殺正則

利用php7新特性繞過查殺正則

最近在研究webshell免殺,抽出心得的一個新穎的點。原因是突然想到既然php7.1不能利用可變函數的assert,那就利用php7的新特性來繞過查殺正則,最終繞過某盾和“某d0g”。

實驗環境在7.1.9,所有馬兒在php7以下的環境均不能使用。

D盾規則庫(最新):20191227

某d0g因為可能會因為用其產品測試,導致侵權行為,為了防止被舉報所以就不放圖了。

前置實驗

立即學習PHP免費學習筆記(深入)”;

某盾

首先以下代碼

利用php7新特性繞過查殺正則

利用php7新特性繞過查殺正則

直接誤報了。

因此,直接傳參到eval里面是不現實的。

所以接下來我們要利用函數,配合php新特性來繞過它。

某d0g

而對于某d0g,只要以下代碼

利用php7新特性繞過查殺正則

就會讓其誤報。

因此在寫免殺馬的時候,post中的變量,不要出現在eval中的字符串中。就像上面`b`一樣,盡管他在`eval`中是以變量的形式出現的。有了這個基礎就可以進入正題了。

PHP7.0.x

[php手冊-php7.0.x新特性]( https://www.php.net/manual/zh/migration70.new-features.php)

返回值類型申明

php7增加了返回值類型聲明的支持,在定義函數時增加一個 `:類型`便可以了。

例如:

利用php7新特性繞過查殺正則

就是函數返回值類型要為int。否則會強制轉換或者顯示語法錯誤。

如果未更新此特性的查殺軟件,就會不認識此函數,導致被繞過。

例如:

利用php7新特性繞過查殺正則

可以用查殺軟件測試一下。

利用php7新特性繞過查殺正則

發現沒有被檢測到。

利用php7新特性繞過查殺正則

可以使用。

null合并運算符

由于日常使用中存在大量同時使用三元表達式和 `isset()`的情況, 添加了null合并運算符 (*??*) 這個語法糖。如果變量存在且值不為**`NULL`**, 它就會返回自身的值,否則返回它的第二個操作數

簡單來說:

利用php7新特性繞過查殺正則

如果運用 `??`符號,查殺軟件不會理解著個處理過程 ,可能就會導致繞過。

就像以下代碼就可以繞過某d0g

利用php7新特性繞過查殺正則

再利用函數調用一下

利用php7新特性繞過查殺正則

利用php7新特性繞過查殺正則

可以發現已經過了D盾

測試一下可用性

利用php7新特性繞過查殺正則

接下來看看7.1的特性吧

php7.1.x

[php手冊-php7.0.x新特性](?https://www.php.net/manual/zh/migration71.new-features.php?)

可為空(Nullable)類型

參數以及返回值的類型現在可以通過在類型前加上一個問號使之允許為空。當啟用這個特性時,傳入的參數或者函數返回的結果要么是給定的類型,要么是 null 。

比7.1的特性多了個 `?`函數返回值若不是給定類型,則為空。

使用同樣的代碼:

利用php7新特性繞過查殺正則

不出意外

利用php7新特性繞過查殺正則

過了D盾

短數組語法

短數組語法([])現在作為list()語法的一個備選項,可以用于將數組的值賦給一些變量(包括在foreach中)。

這里選用中括號 `[]類型`的列表來演示。

利用php7新特性繞過查殺正則

這樣,就把數組的值分別賦給了` $c`,`$d`.`$c=’a’;$d=’b’;`

這樣,就可以用這個少用的特性,來繞過靜態查殺

首先寫一個最簡單的:

利用php7新特性繞過查殺正則

然后就過了某d0g。自行測試。

之后就可以配合函數。就像這樣:

利用php7新特性繞過查殺正則

查殺一下

利用php7新特性繞過查殺正則

測試可用性

利用php7新特性繞過查殺正則

list()現在支持鍵名

官方說明:現在list()和它的新的[]語法支持在它內部去指定鍵名。這意味著它可以將任意類型的數組 都賦值給一些變量(與短數組語法類似)

這個很繞,看一下例子也許就會明白了。

eg:

利用php7新特性繞過查殺正則

稍微改改就能過某d0g(自行測試):

利用php7新特性繞過查殺正則

試試D盾

利用php7新特性繞過查殺正則

報了一級

再次借助自定義函數。

利用php7新特性繞過查殺正則

利用php7新特性繞過查殺正則

成功過D,測試可用性。

利用php7新特性繞過查殺正則

支持為負的字符串偏移量

官方說明

現在所有支持偏移量的字符串操作函數 都支持接受負數作為偏移量,包括通過[]或{}操作字符串下標。在這種情況下,一個負數的偏移量理解為一個從字符串結尾開始的偏移量。

這個在小于7.1版本中,負的偏移量返回空字串。

eg:

利用php7新特性繞過查殺正則

7.1.x中返回 `s`,但是以前的版本中 返回 ` string(0) “” `

思路:我們可以這個拆分字符串,使規則識別不出來。最后再配合php的可變變量:

利用php7新特性繞過查殺正則

這樣就可以過某d0g了。但是對于D盾來說,會識別拼接字符,和可變變量。報一級`可疑文件`,不得不說這點做的確實很好。

結尾

其實還有很多特性,就像`通過define()定義常量數組`,也都可以舉一反三去繞過。而且不止自定義函數,還可以配合類,可變變量等,來繞過靜態查殺。

還可以利用 `太空船操作符(組合比較符)`,`整數除法函數 intdiv()`等來繞過動態查殺。

更多相關文章,請關注php中文網web服務器安全欄目!

以上就是利用

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享