Coldfusion SQL注入?未通过Web应用程序检查

时间:2017-12-13 19:37:04

标签: coldfusion sql-injection

好的,我很难过,我有一个CF11网络应用程序,它没有通过SQL注入的Web应用程序审计报告,这个报告是由Acunetix制作的。

无论如何,报告在我的网站上给了我10页,容易受到sql注入,但是我检查了代码,实际上我在每个实例中都使用了cfqueryparam

处理程序调用的其中一个查询的示例

<cfquery datasource="#application.DSN#" name="qResult" result="r">
        update  #table# s
        set s.loader_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(arguments.status)#">
        <cfif isDefined("bio_loader_status") and bio_loader_status neq ''>
         , s.bio_loader_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(bio_loader_status)#">
         </cfif>
         , s.session_id = NULL
         , s.session_expiration = NULL
         <cfif isDefined("arguments.rowid") and arguments.rowid neq ''>
                where s.rowid = CHARTOROWID(<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.rowid#">)
         </cfif>

    </cfquery>

我读过的所有内容都告诉我,我受到sql攻击的保护(使用cfquery param,使用datasurce和table变量等),但报告另有说法

URL encoded GET input rowid was set to 1'"
Error message found: Error Executing Database Query
GET /index.cfm/status?rowid=1'%22&type=billing HTTP/1.1
谁能说清楚我做错了什么?或者报告的假设是否正确?

1 个答案:

答案 0 :(得分:8)

进一步推断亚历克斯的断言:

  

他们希望您慷慨地处理rowid不是数字的事实,他们不想看到标准错误消息

我以前的雇主对他们的申请进行了定期渗透测试(笔测试)。从CF输出的错误消息只会在屏幕上呈现攻击的字符串。这适用于您需要或希望在屏幕上显示调试信息的非生产,非QA环境。在制作中,您永远不会想到代码绊倒的地方。

错误消息GET /index.cfm/status?rowid=1'%22&type=billing HTTP/1.1告诉攻击者哪个文件及其路径,以及可以进一步攻击的URL参数。如果此文件是您的请求堆栈中的包含,并且该文件可以直接请求,那么您可能会接受进一步的攻击。您需要捕获此错误并输出消息。

如果您必须登录才能访问此网址,那就是一件事。公共URL不应具有特定于该问题的任何信息。不要输出The rowID must be an IntegerrowID is invalid之类的内容。这只会导致更多的攻击。 Invalid request适用于公共网址错误。

现在,对于<cfqueryparam>实际上无法停止注射攻击的情况。我以前公司的一些旧存储过程使用动态SQL。与CF类似,字符串将在proc中连接,SQL execute命令将运行最终的SQL字符串。可以将编码的字符串传递给<cfqueryparam>,然后将其拼接到proc中的SQL字符串中。为此,我们必须更新成堆的旧proc以验证字符串参数,查找要拒绝的某些字符串。

如果可能,您应该在基础架构中添加Web Application FirewallOnline ColdFusion Meetup Group明天将在一个基于软件的WAF上展示CF应用程序。如果你不能参加,我相信它会被记录下来。我昨晚完成了将当前的CF站点移至AWS,我们确保将WAF添加到我们的堆栈以确保安全。这并不意味着我们不需要正确捕获错误并显示相应的消息,但是当它在请求甚至到达应用程序服务器之前拒绝已知的攻击向量时,它确实会减轻负载。 。