一、初始访问

1、水坑攻击

  • 攻击者首先通过猜测(或观察)确定这组目标经常访问的网站,然后入侵其中一个或多个网站,植入恶意软件。在目标访问该网站时,会被重定向到恶意网址或触发恶意软件执行,导致该组目标中部分成员甚至全部成员被感染。
  • 多属于 APT 攻击,目标多为是大型、重要企业的员工或网站;多利用0 day

    2、鱼叉攻击

  • 鱼叉式钓鱼攻击一般通过电子邮件等电子通信方式进行,针对特定个人、组织或企业。通常来说,攻击者会花时间了解攻击目标的姓名、邮箱地址、社交媒体张海等网络信息,进而假冒公司、组织甚至政府机构等权威机构的名义,发送虚假内容、恶意文件或恶意链接,诱使受害者点击或者登陆账号密码等。

  • 定制化、精确化

    3、供应链攻击

  • 供应链攻击是一种面向软件开发人员和供应商的新兴威胁。 目标是通过感染合法应用分发恶意软件来访问源代码、构建过程或更新机制。

  • 由于软件由受信任的供应商构建和发布, 因此这些应用和更新已签名并经过认证。 在软件供应链攻击中, 供应商可能未意识到他们的应用或更新在发布到公众时受到恶意代码的感染。 然后, 恶意代码将以与应用相同的信任和权限运行。

二、执行

1、终端执行

  • windows:cmd
  • linux:terminal

    2、漏洞利用

    3、计划任务

    windows

  • schtasks命令

    1. schtasks /Create /TN "Window Update" /TR "%WINDIR%\system32\bitsadmin.exe /resume \"Windows Update\"" /sc minute /MO 30 /ED(此任务的最后一次运行时间) 2017/03/01 /ET 12:00 /Z /IT /RU %USERNAME%
    2. /TN:指定任务的名称
    3. /TR:指定运行的命令或程序,不加绝对路径默认在system32目录下
    4. /sc:指定计划类型MINUTEHOURLYDAILYWEEKLYMONTHLYONCEONSTARTONLOGONONIDLE
    5. /MO 30:任务每30分钟(minute)运行一次
    6. /ed EndDate:指定任务计划运行的最后日期。
    7. /et:最后一次的运行时间
    8. /z:在任务运行完毕后删除任务
    9. /IT:标志此任务只有在登录情况下才运行
    10. /ru:指定运行的用户账户

    linux

  • crontab

    1. crontab -e

    恶意代码分析ATT&CK - 图1

    4、系统服务

    windows

  • sys

  • 病毒修改注册表创建系统服务
  • 创建系统服务

    • OpenSCManager
    • OpenService
    • StartService
    • ControlService:停止服务
    • CloseServiceHandle

      linux

  • 在/usr/lib/systemd/system 目录下创建对应服务的service文件,即可运行对应的服务

    • vi HelloWorld.service
  • 启动服务:service xx start / service xx stop / service xx restart
  • 设置开机自启动: systemctl enable HelloWorld.service ```python [Unit] Description=HelloWorld ;服务器的名字

[Service] Type=simple ExecStart=/root/shell/HelloWorld ;执行路径 Restart=always ;关闭后重启 RestartSec=5 StartLimitInterval=3 RestartPreventExitStatus=137

[Install] WantedBy=multi-user.target

  1. <a name="CdqTo"></a>
  2. ### 5、用户执行
  3. - 诱导用户点击:更改后缀、更改图标、设置隐层、自动运行、恶意文档
  4. <a name="LlMET"></a>
  5. ### 6、[WMI](https://m0nst3r.me/pentest/%E5%88%A9%E7%94%A8WMI%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%8C%81%E4%B9%85%E5%8C%96%E7%9A%84%E5%BC%82%E6%AD%A5%E7%9A%84%E6%97%A0%E6%96%87%E4%BB%B6%E5%90%8E%E9%97%A8.html)
  6. - 无文件攻击,实现后门存储和本地持久化
  7. <a name="sE3HT"></a>
  8. #### 1)WMI简介
  9. - WMI是从Windows 2000起,在每个Windows系统版本中都会内置的一个**管理框架**。WMI以本地和远程方式提供了许多管理功能,包括查询系统信息、启动和停止进程以及设置条件触发器。
  10. - 可以使用工具(wmic.exe)或者编程语言提供的API访问WMI。
  11. - 在满足特定条件时,可以使用WMI“永久事件订阅”机制触发特定操作,攻击者经常利用这个功能,**在系统启动时执行后门程序,完成本地持久化**
  12. - WMI类是WMI的主要结构。WMI类中可以包含**方法(代码)以及属性(数据**)。具有系统权限的用户可以自定义类或扩展许多默认类的功能。
  13. - WMI的事件订阅包含三个核心WMI类
  14. - Filter(过滤器)类:**定义触发Consumer的具体条件**,包括系统启动、特定程序执行、特定时间间隔以及其他条件
  15. - Consumer(消费者)类:**指定要执行的具体操作**,包括执行命令、运行脚本、添加日志条目或者发送邮件
  16. - FilterToConsumerBinding类:**将Consumer与Filter关联在一起**。创建一个WMI永久事件**订阅**需要系统的管理员权限。
  17. <a name="LCwtY"></a>
  18. #### 2)WMI的利用
  19. - 存储后门代码:创建一个新的WMI类,添加了一个文本属性以存储字符串,并将加密base64编码的PowerShell后门存放在该属性中。
  20. - 执行:创建一个WMI事件订阅来运行该后门,其具体内容是通过PowerShell命令,直接从新的WMI属性中读取、加密和执行后门代码。
  21. <a name="XsR5b"></a>
  22. ### 7、相关API
  23. - CreateProcess
  24. - CreateThead
  25. - 内存加载执行(**模拟PE加载器**,适用于有重定位表的exe)
  26. - 将程序文件读到内存
  27. ```c
  28. //获取exe文件的句柄
  29. CreateFile()
  30. //获取文件大小
  31. GetFileSize()
  32. //将文件读到内存
  33. new
  34. ReadFile()
  • 找到程序加载映像的大小:IMAGE_OPTIONAL_HEADER32->SizeOfImage

    1. //获取sizeofimage
    2. GetSizeOfImage()
  • 根据大小,在自己的程序中申请一块可读、可写、可执行的内存,把这块内存清空,首地址作为exe程序加载的基地址

    1. VirtualAlloc()
    2. RtlZeroMemory()
    3. VirtualProtect()//可每个区块单独设置
  • 获得IMAGE_OPTIONAL_HEADER32->SectionAlignment,把exe文件按照这个对齐大小拷贝到上述申请的内存中

  • 根据PE结构的重定位表,重新对重定位表进行修正

    1. //判断有无重定位表
    2. IsExistRelocationTable()
  • 根据PE结构的导入表,加载所需的dll,获取导入函数地址进行导入表的修正

  • 修改PE的加载基地址:IMAGE_OPTIONAL_HEADER32->ImageBase
  • 获得PE入口点RVA:IMAGE_OPTIONAL_HEADER32->AddressOfEntryPoint,跳转到入口地址执行
    • WinExec
    • ShellExec

三、持久化

1、注册表启动

2、计划任务

3、快速启动目录

4、创建服务启动