吾愛破解 - LCG - LSG |安卓破解|病毒分析|001aa.com

 找回密碼
 注冊[Register]

QQ登錄

时时彩平台只需一步,快速開始

搜索
查看: 2128|回復: 11

[漏洞分析] CVE-2017-12824及利用樣本分析

  [復制鏈接]
樓主
ERFZE 發表于 2020-5-13 21:38 回帖獎勵
本帖最后由 ERFZE 于 2020-5-13 21:55 編輯

0x00 前言

筆者于書寫此文之前從未接觸過InPage,該文權當筆者于學習過程中的一篇學習筆記,其中如有不當或錯誤之處,望讀者不吝賜教,筆者感激不盡。

0x01 InPage

該介紹引自維基百科

InPage是一款文字處理程序和頁面布局軟件,最初在1994年開發,適用于Windows和Mac平臺下的烏爾都語,Balochi,波斯語,Pashto和阿拉伯語等語言。屏幕所見即所得。

筆者復現及分析環境基于InPage 2010:

圖片1 Inpage版本

0x02 漏洞分析

0x02.1 漏洞描述

該漏洞本質是越界讀(Out-Of-Bound Read),InPage在處理文檔中的InPage100流時未對需要處理的數據類型(Type)進行有效性檢查,而該字段可以由攻擊者設置一個超出Type范圍的值使得InPage在處理Type字段造成越界讀。

0x02.2 靜態分析

由于筆者并未找到可供調試使用的POC,故直接使用Bitter組織某樣本作為調試對象。

漏洞觸發位置位于sub_453590

圖片2 sub_453590

sub_453700傳遞給sub_453590的參數是讀取到的Type值:

圖片3 傳遞參數

調試之后發現該值為0x7E72,那么右移8位之后即為0x7E。接下來看看dword_656A28[0x7E]的賦值(位于sub_4560A0內):

result = sub_4536A0(0x7Eu, (int)&unk_656E60);

sub_4536A0功能如下:

圖片4 sub_4536A0

進一步查看unk_656E60

圖片5 unk_656E60

可以看到unk_656E60數組大小為0x1B,而4*0x72明顯超過其大小,因而造成越界讀。

0x02.3 動態調試

筆者調試時采用附加到Inpage.exe進程之后打開樣本文件的方法來調試。設置斷點如下:

圖片6 Breakpoint

成功斷下:

圖片7 成功斷下

之后其越界調用0x00455AFA處指令:

圖片8 越界調用

0x00455AFA时时彩平台處指令恰好將控制流交到由攻擊者構造的數據上:

圖片9 轉交控制流

0x03 Bitter組織某利用樣本分析

0x03.1 樣本一

樣本名稱:Court_Notice.inp
时时彩平台 MD5:303F01E8CE9488CA7C1B265A8768CCE0

該樣本的漏洞利用部分已由上節給出,下面直接分析其Shellcode。通過連續兩個0x416E3453时时彩平台(字符串"An4S")標志進行定位其Shellcode起始位置:

圖片10 定位

跳轉到Shellcode之后,先獲取PE文件(一DLL,Backdoor)起始位置:

圖片11 獲取PE文件起始位置

獲取使用到的函數調用地址:

圖片12 獲取系統函數調用地址

創建一名為QPONMLKJIH的互斥對象,并調用GetLastError檢查是否已存在該名稱的互斥對象(0xB7,ERROR_ALREADY_EXISTS):

圖片13 創建互斥對象

為DLL文件申請SizeofImage大小的內存空間:

圖片14 VirtualAlloc

若申請失敗,則修改第一個參數為NULL,重新申請。

其后將DLL文件加載到內存中并手動完成PE裝載器的工作。首先是復制DLL文件頭部:

圖片15 memcpy

復制.text區塊內容到內存:

圖片16 復制.text區塊

之后依次是.rdatarsrc.reloc區塊,不再一一截圖。

接下來對DLL文件進行重定位。檢查基址重定位表大小是否為0:

圖片17 重定位表大小

檢查IMAGE_BASE_RELOCATION結構大小是否為0:

圖片18 重定位結構大小

时时彩平台根據重定位項數組中的重定位數據進行重定位:

圖片19 重定位

修復輸入表:

圖片20 輸入表

依次更改.text.rdatarsrc區塊所在內存區域的保護屬性:

圖片21 VirtualProtect

調用DLL文件中一函數過程:

圖片22 調用DLL文件中函數

其功能為創建一新線程:

圖片23 CreateThread

由此該DLL文件得以執行。

0x03.2 樣本二

樣本名稱:Press_Note.inp

MD5:5DD080B9AD4BC5C58C0CED31829CCADA

时时彩平台該樣本與上一樣本的利用方法相同,不再占用篇幅。

0x04 Donot組織某利用樣本分析

樣本名稱:EOI-Application_Form.inp

时时彩平台MD5:D9279F628C9F19420F14EDF3CFC3123F

調試方法同上一樣本,不再贅述。與上一樣本相似,通過連續兩個0x35363839时时彩平台(字符串"5689")定位Shellcode:

圖片24 定位

解密將要執行指令:

圖片25 解密

第二次解密:

圖片26 第二次解密

獲取GetModuleHandleA調用地址:

圖片27 GetProcAddress

第三次解密:

圖片28 第三次解密

通過硬編碼的方式來給GetProcAddress()傳遞參數:

圖片29 硬編碼

之后分別獲取ole32.CoInitializemsvcrt.fclosekernel32.ExitProcesskernel32.GetEnvironmentVariableWmsvcrt.strlenmsvcrt.fwritemsvcrt.memsetole32.CoCreateInstancemsvcrt.fopenmsvcrt.strcatkernel32.GetEnvironmentVariableAmsvcrt.malloc函數的調用地址。

时时彩平台清空內存內容,用于后續存儲字符串:

圖片30 memset

拼接字符串:

圖片31a 拼接

圖片31b 拼接

圖片31c 拼接

C:\Windows\Tasks\tss.js這一JS文件中寫入內容:

圖片32 JS腳本

該腳本功能為執行同目錄下的staEnd.dll

之后通過于啟動目錄創建快捷方式實現持久化:

圖片33a CoCreateInstance

該快捷方式指向JS文件:

圖片33b SetPath

保存到文件:

圖片33c Save

staEnd.dll文件中寫入內容:

圖片34a fwrite

file.inp文件中寫入內容:

圖片34b fwrite

寫入完成之后關閉文件,并調用ExitProcess()退出。

0x05 Confucius(孔夫子)組織某利用樣本分析

樣本名稱:Visit of Azerbaijan delegation to pakistan (2).inp

时时彩平台MD5:633640453DE64EB79891B7433242A0A1

圖片35 Confucius

該樣本與0x03.1中樣本利用方法相同,不再贅述。

0x06 參考

免費評分

參與人數 10威望 +2 吾愛幣 +110 熱心值 +10 收起 理由
QGZZ + 1 + 1 謝謝@Thanks!
BrainFlower + 1 + 1 熱心回復!
poisonbcat + 1 + 1 謝謝@Thanks!
x51zqq + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
女蘿巖 + 1 + 1 我很贊同!
gaosld + 1 + 1 用心討論,共獲提升!
溫柔的一哥 + 1 + 1 我很贊同!
hjm666 + 2 + 1 用心討論,共獲提升!
luzaifff + 1 + 1 用心討論,共獲提升!
willJ + 2 + 100 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| ERFZE 發表于 2020-5-14 21:20 |樓主
willJ 發表于 2020-5-14 15:19
后面樣本的分析很精彩,有幾個疑問,請教下樓主。
1.越界讀的漏洞,在后面如何就變成了call ecx(控制了EIP ...

第一個問題的話,我前邊的分析里已經提到,師傅可以私我一個聯系方式,我發你Inpage;
第二個問題,該軟件并未開啟ASLR與DEP。

點評

唔,了解了,越界讀的地址就是call過去的地址,那個地址又存放了shellcode,也沒有DEP ASLR。好文章哦。  詳情 回復 發表于 2020-5-15 11:23
推薦
willJ 發表于 2020-5-15 11:23
ERFZE 發表于 2020-5-14 21:20
第一個問題的話,我前邊的分析里已經提到,師傅可以私我一個聯系方式,我發你Inpage;
第二個問題,該軟 ...

唔,了解了,越界讀的地址就是call過去的地址,那個地址又存放了shellcode,也沒有DEP ASLR。好文章哦。
4#
hangye168 發表于 2020-5-13 22:07
5#
斬風 發表于 2020-5-14 09:33
膜拜大神
6#
Sezangle 發表于 2020-5-14 10:30
謝謝樓主分享,我一直很好奇這種shellcode是怎么移植進去的,請問樓主這個exe是已經被攻擊者植入shellcode了是吧,然后執行觸發shellcode執行dll?dll是偽裝成應用自身的dll文件嗎,要不然很容易被殺啊
7#
willJ 發表于 2020-5-14 15:19
后面樣本的分析很精彩,有幾個疑問,請教下樓主。
1.越界讀的漏洞,在后面如何就變成了call ecx(控制了EIP)呢?
2.該軟件有地址隨機化與DEP么?漏洞利用是如何精確布局shellcode然后call ecx到shellcode呢?
8#
溫柔的一哥 發表于 2020-5-15 16:42
感謝分享,樓主很厲害啊!辛苦了~吾愛有你更精彩!
9#
czxj2003 發表于 2020-5-16 10:51
厲害厲害厲害
10#
無穢之鴉 發表于 2020-5-19 12:36
感謝樓主,文章這波操作有點強
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-5-31 17:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
时时彩平台官网-欢迎您 时时彩平台注册-爱问知识人 时时彩平台app-互动百科 时时彩平台投注-百科词条 超级快三-搜霸天下 时时彩平台邀请码-即可搜索 时时彩平台开户-新浪爱彩 彩神大发快三-一定牛 彩神大发快三官网-360云盘 彩神大发快三注册-百度耨米