Rumah Operasi dan penyelenggaraan Keselamatan 利用php7新特性绕过查杀正则

利用php7新特性绕过查杀正则

Mar 04, 2020 am 10:45 AM
php7

利用php7新特性绕过查杀正则

最近在研究webshell免杀,抽出心得的一个新颖的点。原因是突然想到既然php7.1不能利用可变函数的assert,那就利用php7的新特性来绕过查杀正则,最终绕过某盾和“某d0g”。

实验环境在7.1.9,所有马儿在php7以下的环境均不能使用。

D盾规则库(最新):20191227

某d0g因为可能会因为用其产品测试,导致侵权行为,为了防止被举报所以就不放图了。

前置实验

某盾

首先以下代码

5f3c12408810786a7bb1e5786039be8.png

162fdadd8cddbbda72865af2da3acaa.png

直接误报了。

因此,直接传参到eval里面是不现实的。

所以接下来我们要利用函数,配合php新特性来绕过它。

某d0g

而对于某d0g,只要以下代码

bd54f5d656cb5afb3cee6ba29289fa6.png

就会让其误报。

因此在写免杀马的时候,post中的变量,不要出现在eval中的字符串中。就像上面`b`一样,尽管他在`eval`中是以变量的形式出现的。有了这个基础就可以进入正题了。

PHP7.0.x

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

返回值类型申明

php7增加了返回值类型声明的支持,在定义函数时增加一个 `:类型`便可以了。

例如:

6ee65e418c8a599aa1614c3ccd729cc.png

就是函数返回值类型要为int。否则会强制转换或者显示语法错误。

如果未更新此特性的查杀软件,就会不认识此函数,导致被绕过。

例如:

2d820c9d27c48f053bdf060120c8290.png

可以用查杀软件测试一下。

dd6dcc1fc46d7d19d83215869a8010b.png

发现没有被检测到。

330fde65eb0dbf439b9c59f6bf470a7.png

可以使用。

null合并运算符

由于日常使用中存在大量同时使用三元表达式和 `isset()`的情况, 添加了null合并运算符 (*??*) 这个语法糖。如果变量存在且值不为**`NULL`**, 它就会返回自身的值,否则返回它的第二个操作数

简单来说:

ccf12cdd4f866425c0a631d1a952f70.png

如果运用 `??`符号,查杀软件不会理解着个处理过程 ,可能就会导致绕过。

就像以下代码就可以绕过某d0g

bcdda91540aaf9ab5c7c5902a20949b.png

再利用函数调用一下

d685659156f6ec2be755995a867bb19.png

3567ace09f7579c35a7b0433b89d8d1.png

可以发现已经过了D盾

测试一下可用性

829358de94ac57cdbd459ee50d3221a.png

接下来看看7.1的特性吧

php7.1.x

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

可为空(Nullable)类型

参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。

比7.1的特性多了个 `?`函数返回值若不是给定类型,则为空。

使用同样的代码:

45c88f712da97c55b073b7869af0c7f.png

不出意外

3694798226bb9eae6a1fbe0ffb0f7ec.png

过了D盾

短数组语法

短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)。

这里选用中括号 `[]类型`的列表来演示。

ca7cd2efc5e24d033135a7f9f814847.png

这样,就把数组的值分别赋给了` $c`,`$d`.`$c='a';$d='b';`

这样,就可以用这个少用的特性,来绕过静态查杀

首先写一个最简单的:

5b8a5c37b32f923b3b950725066d00b.png

然后就过了某d0g。自行测试。

之后就可以配合函数。就像这样:

264ee8ea3a9b45a481f2bfdee889890.png

查杀一下

911ad049e7ef3c19c1835d1be7d1350.png

测试可用性

2e15901c494993c09f63e9cc8fdb02e.png

list()现在支持键名

官方说明:现在list()和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)

这个很绕,看一下例子也许就会明白了。

eg:

5e9db718f63d9960ca8fedb6747d1b9.png

稍微改改就能过某d0g(自行测试):

79e1180d7ce825c46cfd9527089abcf.png

试试D盾

c084c74d8d75922dfe8f7596646d6c7.png

报了一级

再次借助自定义函数。

8c82c53f4450e7e90daef2d91d7830b.png

baafe8f4f65bfe9e227fbc5b37db7c1.png

成功过D,测试可用性。

766d29da2fd322cc7b700f3d8bff859.png

支持为负的字符串偏移量

官方说明

现在所有支持偏移量的字符串操作函数 都支持接受负数作为偏移量,包括通过[]或{}操作字符串下标。在这种情况下,一个负数的偏移量理解为一个从字符串结尾开始的偏移量。

这个在小于7.1版本中,负的偏移量返回空字串。

eg:

df6ba7b98b212e2b2ed2940bc5769b8.png

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

思路:我们可以这个拆分字符串,使规则识别不出来。最后再配合php的可变变量:

b5db44d73a1a06e7aeb61eda176ab67.png

这样就可以过某d0g了。但是对于D盾来说,会识别拼接字符,和可变变量。报一级`可疑文件`,不得不说这点做的确实很好。

结尾

其实还有很多特性,就像`通过define()定义常量数组`,也都可以举一反三去绕过。而且不止自定义函数,还可以配合类,可变变量等,来绕过静态查杀。

还可以利用 `太空船操作符(组合比较符)`,`整数除法函数 intdiv()`等来绕过动态查杀。

更多相关文章,请关注php中文网web服务器安全栏目!

Atas ialah kandungan terperinci 利用php7新特性绕过查杀正则. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memasang sambungan mongo dalam php7.0 Bagaimana untuk memasang sambungan mongo dalam php7.0 Nov 21, 2022 am 10:25 AM

Cara memasang sambungan mongo dalam php7.0: 1. Buat kumpulan pengguna dan pengguna mongodb 2. Muat turun pakej kod sumber mongodb dan letakkan pakej kod sumber dalam direktori "/usr/local/src/" 3. Masukkan direktori "src/" 4. Buka zip pakej kod sumber 5. Buat direktori fail mongodb 6. Salin fail ke direktori "mongodb/" 7. Buat fail konfigurasi mongodb;

Bagaimana untuk menyelesaikan masalah apabila php7 mengesan bahawa port tcp tidak berfungsi Bagaimana untuk menyelesaikan masalah apabila php7 mengesan bahawa port tcp tidak berfungsi Mar 22, 2023 am 09:30 AM

Dalam php5, kita boleh menggunakan fungsi fsockopen() untuk mengesan port TCP. Fungsi ini boleh digunakan untuk membuka sambungan rangkaian dan melakukan beberapa komunikasi rangkaian. Tetapi dalam php7, fungsi fsockopen() mungkin menghadapi beberapa masalah, seperti tidak dapat membuka port, tidak dapat menyambung ke pelayan, dsb. Untuk menyelesaikan masalah ini, kita boleh menggunakan fungsi socket_create() dan fungsi socket_connect() untuk mengesan port TCP.

Apakah yang perlu saya lakukan jika pemalam dipasang dalam php7.0 tetapi ia masih menunjukkan bahawa ia tidak dipasang? Apakah yang perlu saya lakukan jika pemalam dipasang dalam php7.0 tetapi ia masih menunjukkan bahawa ia tidak dipasang? Apr 02, 2024 pm 07:39 PM

Untuk menyelesaikan pemalam yang tidak menunjukkan isu yang dipasang dalam PHP 7.0: Semak konfigurasi pemalam dan dayakan pemalam. Mulakan semula PHP untuk menggunakan perubahan konfigurasi. Semak kebenaran fail pemalam untuk memastikan ia betul. Pasang kebergantungan yang hilang untuk memastikan pemalam berfungsi dengan betul. Jika semua langkah lain gagal, bina semula PHP. Punca lain yang mungkin termasuk versi pemalam yang tidak serasi, memuatkan versi yang salah atau isu konfigurasi PHP.

Cara memasang dan menggunakan php7.0 Cara memasang dan menggunakan php7.0 Nov 30, 2022 am 09:56 AM

Cara memasang dan menggunakan php7.0: 1. Pergi ke laman web rasmi PHP untuk memuat turun versi pemasangan yang sepadan dengan sistem tempatan 2. Ekstrak fail zip yang dimuat turun ke direktori yang ditentukan 3. Buka tetingkap baris arahan dan pergi ke direktori "E:\php7" Hanya jalankan arahan "php -v".

Apr 09, 2024 pm 01:33 PM

Penyelesaian biasa untuk persekitaran pelayan PHP termasuk memastikan versi PHP yang betul dipasang dan fail yang berkaitan telah disalin ke direktori modul. Lumpuhkan SELinux buat sementara waktu atau selama-lamanya. Semak dan konfigurasikan PHP.ini untuk memastikan sambungan yang diperlukan telah ditambah dan disediakan dengan betul. Mulakan atau mulakan semula perkhidmatan PHP-FPM. Semak tetapan DNS untuk isu penyelesaian.

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Mengapa ralat berlaku semasa memasang pelanjutan menggunakan PECL dalam persekitaran Docker? Bagaimana menyelesaikannya? Mengapa ralat berlaku semasa memasang pelanjutan menggunakan PECL dalam persekitaran Docker? Bagaimana menyelesaikannya? Apr 01, 2025 pm 03:06 PM

Punca dan penyelesaian untuk kesilapan Apabila menggunakan PECL untuk memasang sambungan dalam persekitaran Docker Apabila menggunakan persekitaran Docker, kami sering menemui beberapa sakit kepala ...

Mana satu lebih baik, php8 atau php7? Mana satu lebih baik, php8 atau php7? Nov 16, 2023 pm 03:09 PM

Berbanding dengan PHP7, PHP8 mempunyai beberapa kelebihan dan penambahbaikan dari segi prestasi, ciri baharu dan penambahbaikan sintaks, sistem jenis, pengendalian ralat dan sambungan. Walau bagaimanapun, memilih versi yang hendak digunakan bergantung pada keperluan khusus anda dan keadaan projek. Pengenalan terperinci: 1. Peningkatan prestasi, PHP8 memperkenalkan pengkompil Just-in-Time (JIT), yang boleh meningkatkan kelajuan pelaksanaan kod 2. Ciri baharu dan penambahbaikan sintaks, PHP8 menyokong pengisytiharan parameter yang dinamakan dan parameter pilihan, membuat fungsi Panggilan adalah lebih fleksibel kelas tanpa nama, jenis pengisytiharan sifat, dsb.

See all articles