1. 程式人生 > >IE安全系列之——IE中的ActiveX(II)

IE安全系列之——IE中的ActiveX(II)

0x00 使用Fuzz工具

ActiveX的Fuzzer相當之多,本次我們暫時使用一個老牌但是效能較弱的開源Fuzzer:COMRaider。選擇它的原因是它是一個圖形化的Fuzzer,介面元素簡單。但是說弱則是因為它的測試用例實在太少,而且比較陳舊(但是你可以手動新增)。比它強悍的工具還有很多,例如AxMan Fuzzer,但是AxMan的介面實在是沒法截圖,所以我還是用這個來演示好了……

COMRaider可以在https://github.com/dzzie/COMRaider下載到。安裝開啟後COMRaider的介面如下圖所示。開始按鈕完美地隱藏到了右邊,和背景融為一色。

p1

點選Start之後即可開始Fuzz的第一步——選擇ActiveX。在這裡我們選擇“Choose from controls that should be loadable from IE”。

p2

然後右鍵選擇Scan New。在列表裡面挑選一個你看不順眼的外掛,然後點選“Select”按鈕即可檢視到該外掛的詳細資訊。

p3

新彈出的視窗中可以檢視到該ActiveX的所有方法和屬性。記得點選“Show only fuzzable”,把它前面的勾去掉。在列表左邊顯示的灰色內容是不能fuzz的,黑色內容是可以fuzz的。可以看得出來:凡是無引數傳入的方法,COMRaider均Fuzz不了。

p4

新彈出的視窗中可以檢視到該ActiveX的所有方法和屬性。記得點選“Show only fuzzable”,把它前面的勾去掉。在列表左邊顯示的灰色內容是不能fuzz的,黑色內容是可以fuzz的。可以看得出來:凡是無引數傳入的方法,COMRaider均Fuzz不了。

p5

是的,你編輯的檔案是VBScript檔案,所以一切請遵守VBS的語法。至於為什麼要用VBS,COMRaider釋出第一版的時候(時代的眼淚)VB還是很流行的,以至於COMRaider都是VB寫的。

例如,我們向Long Args加入parent.lngs.add 65535,這樣在Fuzz Long型別的引數的時候65535就會作為一個testcase被使用。

p6

0x01 如何測試邏輯問題

本節我們只介紹使用COMRaider來挖掘邏輯漏洞並編寫PoC。以此控制元件為例。

Loaded File: F:\Windows\SysWOW64\QoePlug.ocx
Name:        QOEPLUGLib
Lib GUID:    {15144D65-D22E-4768-8980-7411EF722FDE}
Version:     1.0
Lib Classes: 1  

Class QOEPLUG
GUID: {B2F9A248-3AB5-493F-A7F8-5B7A9D026ED2}
Number of Interfaces: 1
Default Interface: _DQOEPLUG
RegKey Safe for Script: True
RegKey Safe for Init: True
KillBitSet: False

它包含如下方法和屬性:

Interface _DQOEPLUG : IDispatch
Default Interface: True
Members : 43
    strOsName
    strCpuName
    strNetLoad
    strCpuUsage
    strMemSize
    strMemUsage
    strProxyServer
    strDnsServer
    strNumComputer
    strTraceInfo
    strProcessInfo
    strKillPid
    strDnsName
    strConnectIp
    strUrl
    strMultiDownLoadUrl
    strDnsTime
    strConnectTime
    strUrlTime
    strMultiDownLoadResult
    strVersion
    strDownloadUrl
    strDownloadTime
    GetOsName
    GetCpuName
    GetNetLoad
    GetCpuUsage
    GetMemSize
    GetMemUsage
    GetProxyServer
    GetDnsServer
    GetNumComputer
    GetTraceInfo
    GetProcessInfo
    KillProcId
    GetDnsTime
    GetConnectTime
    GetUrlTime
    GetMultiDownLoad
    StartMultiDownLoad
    StopMultiDownLoad
    GetVersion
    GetDownloadTime

點選其中一項可以看到該項的定義。

p7

COMRaider在展示資訊的時候,顯示的方法名也是VB模式的,如果你用過VB那還好,沒用過的話只需要大致記得這樣的模式即可:

Sub 函式名(引數名 As 型別名, 引數名2 As 型別名2 ……) 
Function 函式名(引數名 As 型別名, 引數名2 As 型別名2 ……)  As 返回值型別

Sub對應一個沒有返回值的方法,大致等同於C++裡面的void 函式名(型別名 引數名,型別名2 引數名2……)

Function對應一個有返回值的函式,大致等同於C++裡面的返回型別 函式名(型別名 引數名,型別名2 引數名2……)

如果一項是可以Fuzz的,我們可以右鍵點選選擇Fuzz member,或者直接Fuzz Library,這將會Fuzz它的所有成員。

p8

COMRaider使用Windows Scripting Host來Fuzz,生成的檔案是wsf型別的(WSF是含有XML程式碼的文字文件)。COMRaider生成的testcase結構類似如下,所以如果看到外面某個漏洞PoC的程式碼出現了熟悉的引數名和程式碼風格,那不用想,肯定是COMRaider的功勞:)。

<?XML version='1.0' standalone='yes' ?>
<package><job id='DoneInVBS' debug='false' error='true'>
<object classid='clsid:B2F9A248-3AB5-493F-A7F8-5B7A9D026ED2' id='target' />
<script language='vbscript'>    

'File Generated by COMRaider v0.0.134 - http://labs.idefense.com    

'Wscript.echo typename(target)  

'for debugging/custom prolog
targetFile = "F:\Windows\SysWOW64\QoePlug.ocx"
prototype  = "Invoke_Unknown strDownloadTime As String"
memberName = "strDownloadTime"
progid     = "QOEPLUGLib.QOEPLUG"
argCount   = 1  

arg1=String(3092, "A")  

target.strDownloadTime = arg1   

</script></job></package>

通過右鍵點選testcase,然後選擇Test Exploit in IE可以在IE中測試對應程式碼。也可以手動處理生成可在ie載入的程式碼。如上述程式碼,掐頭去尾取中間就可以了:

<object classid='clsid:B2F9A248-3AB5-493F-A7F8-5B7A9D026ED2' id='target' />
<script language='vbscript'>
arg1=String(3092, "A")
target.strDownloadTime = arg1
</script>

COMRaider基本不能驗證邏輯漏洞,因此在挖掘的時候需要人工介入。以GetCpuName為例,雖然這是一個無返回值的方法,但是我們同樣看到了這個ActiveX還有一個strCpuName的屬性,讓我們將這兩個串聯起來。

p9

PoC:

<object classid='clsid:B2F9A248-3AB5-493F-A7F8-5B7A9D026ED2' id='target' />
<script language='vbscript'>
target.GetCpuName
alert(target.strCpuName)
</script>

在IE中驗證一下,可以發現CPU挺老的了,該換電腦了。

p10

0x02 Fuzzer怎麼知道ActiveX資訊的?

Fuzzer怎麼列舉屬性和方法?有一個通用的方法,詳細表示如下:

  • 先CoCreateInstance建立一個例項,查詢其IObjectSecurity介面;
  • 如果實現了這個介面,查詢是否設定了Safe for init和Safe for script位,這個是它待會兒要寫到測試的配置裡面去的;
  • 呼叫IDispatch中的GetTypeInfo獲取ITypeInfo介面用來展開相關的內容;

MSDN表示: The ITypeInfo interface provides access to the following: The set of function descriptions associated with the type. For interfaces, this contains the set of member functions in the interface. The set of data member descriptions associated with the type. For structures, this contains the set of members of the type. The general attributes of the type, such as whether it describes a structure, an interface, and so on.

簡單的說就是ITypeInfo介面提供了對這個介面中的成員函式、成員變數、通用屬性(是否定義了一個結構體,一個介面等等)。

  • 對TypeInfo呼叫GetDocumentation獲取函式數量,然後對各個函式呼叫GetFuncDesc獲取函式描述,然後這裡就可以獲得函式名,返回值,引數數量和引數。

由於COMRaider也是開源的,你也可以下載它的程式碼,並檢視它的具體實現方式。

相關推薦

IE安全系列——IEActiveXII

0x00 使用Fuzz工具 ActiveX的Fuzzer相當之多,本次我們暫時使用一個老牌但是效能較弱的開源Fuzzer:COMRaider。選擇它的原因是它是一個圖形化的Fuzzer,介面元素簡單。但是說弱則是因為它的測試用例實在太少,而且比較陳舊(但是你可以手動新增

IE安全系列——昨日黃花:IEActiveXI

IX.1 ActiveX的歷史和簡單的介紹 說到ActiveX,則不得不提到COM(元件物件模型)。COM出現時要解決的問題是,“能否把軟體做到和硬體一樣”,硬體的理想情況是比如有人規定了USB的規範,(Server)提供一個USB介面之後,(Client)只要正確實現

IE安全系列IE的自我介紹 I

前言 系列將簡單介紹一下IE的相關內容,篇幅和自己的認知有限,其中必然有不足之處,如果有寫得不對的地方歡迎大家指出。 文章佈局:每篇文章最多含有3個部分,這3個部分介紹的是相關內容,但並不一定是同一系列的東西,望見諒。 第一部分通常是背景介紹 第二部分是總結性的描

java設計模式系列設計模式概要1

而不是 行為型模式 一句話 創建 rom 多次 ati 代理模式 之間 一、什麽是設計模式   設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

Appium python自動化測試系列appium環境搭建

ftp 自動化 手動 文件 搭建環境 做到 安裝python reg 成員 ?2.1 基礎環境搭建 當我們學習新的一項技術開始基本都是從環境搭建開始,本書除了第一章節也是的,如果你連最基礎的環境都沒有那麽我們也沒必要去說太多,大概介紹一下: 1、因為appium是支持and

談談-Android-PickerView系列源碼解析

需求 動態 () comm tag 多個 來源 ntc 寬高 前言   WheelView想必大家或多或少都有一定了解, 它是一款3D滾輪控件,效果類似IOS 上面的UIpickerview 。按照國際慣例,先放一張效果圖:   以上是Android-PickerView

Openstack 安裝部署指南翻譯系列 Horizon服務安裝Dashboad

openstack 翻譯 horizon安裝1.1.1.1. Horizon服務安裝(Dashboad)本節介紹如何在控制器節點上安裝和配置儀表板。儀表板所需的唯一核心服務是身份服務。您可以使用儀表板與其他服務(如鏡像服務,計算和網絡)結合使用。您還可以在具有獨立服務(如對象存儲)的環境中使用儀表板。註意:本

Openstack 安裝部署指南翻譯系列 Keystone服務安裝Identity

openstack 翻譯 keystone安裝OpenStack系統由分開安裝的幾個關鍵服務組成。這些服務可根據其他雲需求一起工作,包括計算(Compute),身份(Identity),網絡(Networking),鏡像(Image),塊存儲(Block Storage),對象存儲(Object Storag

C#系列聖誕樹代碼

== log 技術分享 tel key 分享圖片 img int src 馬上就到聖誕節啦,這裏我寫啦一個最簡單的聖誕樹代碼 Console.WriteLine("請輸入您需要的聖誕樹的大小<數字>"); int n = int.Parse

Centos7 minimal 系列Redis共享sessionid

image strings 系列 sha edi esp get blog 用戶 這一章節的內容就當看看,只是個人理解,我想應該是有誤的。 一、SessionId   sessionid是一個會話的key,瀏覽器第一次訪問服務器會在服務器端生成一個session,有一個se

從零開始系列vue全家桶3安裝使用vuex

info 獲取 clas from 顯示 共享 安裝 default 重要 什麽是vuex? vuex:Vue提供的狀態管理工具,用於同一管理我們項目中各種數據的交互和重用,存儲我們需要用到數據對象。 即data中屬性同時有一個或幾個組件同時使用,就是data中共用的屬性。

從零開始系列vue全家桶4帶新手小白一起搭建第一個個人網站項目

轉載 個人網站 rfi red nbsp oot ott osx 全部 未經允許,嚴禁轉載,全文由blackchaos提供。 在安裝好了前面大部分需要的插件,我們開始進行第一個個人項目。結合vue+vuex+vue-cli+vue-router+webpack使用。

Shiro安全框架權限認證授權

實例 reat trace () onf 而不是 ocs log logout 第一講、權限認證核心要素 權限認證,也就是訪問控制,即在應用中控制誰能訪問哪些資源。 在權限認證中,最核心的三個要素是:權限,角色和用戶; Authorization has three co

WPF編遊戲系列 七 動畫效果2

sed 其中 所有 wpf olt targe 針對 font bar 原文:WPF編遊戲系列 之七 動畫效果(2)       上一篇已經對關閉窗口圖標進行了動畫效果處理,本篇將對窗口界面的顯示和關閉效果進行處理

Docker系列CentOS7安裝Docker

add 程序 發布 更新 介紹 entos star alt ice 0、前言 整體架構目錄:ASP.NET Core分布式項目實戰-目錄 一、瞎扯淡(只講有用的) 感興趣的同學可以上網搜索一下docker具體的介紹。我這邊主要介紹偏實戰的內容,不喜勿噴,有問題也請

【Android 進階】仿抖音系列列表播放視訊

在上一篇【Android 進階】仿抖音系列之列表播放視訊(二)中,我們實現列表播放視訊,這一篇我們來對其做些優化。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二) 【Android 進階】仿抖音

【Android 進階】仿抖音系列列表播放視訊

上一篇中,我們實現了仿抖音上下翻頁切換視訊的效果,詳見【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一),這一篇,我們來實現抖音列表播放視訊。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二)

sip phone系列Java sip phonepeers原始碼淺析

    從整理幾款sip phone,到簡單修改播放聲音檔案,發現少了最基本的環境搭建及原始碼的認識,現在重新記錄下。     1.sip簡要介紹     這裡提及一些sip相關的必要知識,方便對該協議有個整體的瞭解,同時也可以為後續相關的應用開發提供準備。更詳細的內容可以

大資料系列實時計算Spark十三機器學習

1.機器學習簡介 機器學習可能是當下最火的話題了。之前我們所做的一些工作,比如說java開發,安卓等等,其實無非就是在來回的寫方法,呼叫方法,而機器學習說的通俗一點可能就是找函式。要知道,我們現在面對的是巨大的資料量,對於這麼多的資料量,我們不太可能找到一個描述資料的方法或

大資料系列Hadoop知識整理MapReduce的核心Shuffle詳解

1.MapReduce的核心之shuffle詳解 上一篇中我們介紹了MapReduce是什麼,以及MapReduce的執行過程,其中在執行過程中主要分為Map端與Reducer端,MapReduce計算模型主要完成了對映與化簡,在這其中,有一個最重要的過程那就是其核心——s