SQL注入文件写入(需要用户验证)
解决方案说明
这个问题根据使用的数据库而有两种处理方案:
数据库不为sqlserver
此问题是针对sql server数据库做文件写入的攻击而产生的,如果使用的数据库不是sql server则可不必理会,可在appscan的扫描配置–>测试策略–>SQL注入–>SQL注入文件写入(需要用户验证)两个选项前面去掉打勾,这样appscan便不会做这样的扫描攻击,如下图所示:
数据库为sql server
处理方案:
对链接的参数进行过滤操作,去除特殊字符 ’/’ /” //”四种字符,如果检测到这四种字符,则直接返回错误页面,不予执行。
验证方案:
此问题的验证方案分为两步:
1、选择任意一链接,将其中的一个参数换成sql文件注入攻击语句“’ exec master..xp_cmdshell ‘echo some text >> C:File.txt’ –”,如
http://ip:port/portal/site/console?Param=“’ exec master..xp_cmdshell ‘echo some text >> C:File.txt’ –”
然后执行该链接,看该链接是否被程序检测拦截并跳转到错误页面。
2、查看SQL Server文件系统,看c盘中是否有File.txt文件,如果有此文件,则说明该攻击已成功注入文件,存在漏洞。若无此文件,则说明本次攻击失败,程序已经成功防御此类攻击,不存在SQL文件注入漏洞。
特别说明:
经过验证方案验证后,再次使用appScan进行扫描,发现此问题依旧存在,属于正常现象,因为只要开启了sql注入文件写入的扫描策略,此问题就会一直存在,因为此问题依赖于用户手动验证sql server文件系统中的磁盘是否存在攻击生成的问题件,而appscan不知道用户是否已验证,因此便一直挂在那里,只要用户通过以上的验证方案验证通过后,便可以去除appscan关于SQL文件注入的扫描策略,这样appscan报告中便不会出现此漏洞。
官方说明如下:
SQL 注入文件写入(需要用户验证)
可能会在 Web 服务器上运行远程命令。这通常意味着完全破坏服务器及其内容
可能原因
未对用户输入正确执行危险字符清理
技术描述
存在两个名为“SQL 注入文件写入”的测试。
为了使测试正常运行,务必同时启用这两个测试。
只启用其中一个测试可能会导致错误结果。
这个“SQL 注入”变体试图将易受到攻击的脚本和参数名称所组成的文本写入本地文件系统的文件中。
不过,AppScan 不可能访问 SQL Server 文件系统,因此必须由用户来验证测试是否成功。
AppScan 测试完成之后,请实际访问 SQL Server 机器,或通过远程连接来访问。
在 C 驱动器的根目录下,请检查是否有名称为“AppScanSQLTest.txt”的文件(也就是 C:\AppScanSQLTest.txt)。
如果有,它会包含一份列表,列出所有易受攻击的脚本和参数。
这个变体的技术描述:
MS SQL 有一个能够运行 Shell 命令的内建函数。从查询环境安装一个 Shell 命令参数,便可以调用这个函数。
这个函数的利用方式如下:
假设基于 Web 的应用程序使用下列查询:
SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=’$category’ ORDER BY PRICE
其中 $category 是用户提供的类别描述(可能使用选择框)。
提供 ’ exec master..xp_cmdshell ‘echo some text >> C:File.txt’ – 字符串(作为 $category)之后,形成的查询如下:
SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=” exec master..xp_cmdshell ‘echo some text >> C:File.txt’ –’ ORDER BY PRICE
现在,这个查询可以分为三个部分:
[1] 第一个 SQL 查询:SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=”
[2] 第二个 SQL 查询,执行 Shell 命令:exec master..xp_cmdshell ‘echo some text >> C:File.txt’
[3] MS SQL 注释:–’ ORDER BY PRICE
如您所能见到,恶意的输入将查询的语意改成:查询、执行 Shell 命令,以及注释。
受影响产品
基于 MS SQL 的 Web 应用程序。
引用和相关链接
• SQL 注入常见问题(FAQ)(www.sqlsecurity.com)
• 清理 CGI 脚本中的用户提供数据
严重性 类型 WASC CVE CWE X-Force
严重性 : 高 应用程序级别测试 SQL 注入 不适用 89 8783