如何自动测试网站的sql注入漏洞

时间:2011-03-20 00:44:55

标签: security pseudocode

这是一个基本计划。我很高兴能产生类似成功的东西,这是一个Uni项目。伪代码很棒。

  1. 蜘蛛网站。
  2. 在每页上搜索表单。
  3. 提交每份表格而不填写详细信息以确保失败。
  4. 使用' - 。
  5. 填写表单上的第一个字段
  6. 提交表单并将响应与失败进行比较(由3引出)。
  7. 如果响应(由5引出)不同(比失败)则假定为漏洞。
  8. 如果相同(响应=失败),则返回4.但移至下一个字段。
  9. 如果没有剩余字段,请转到另一页。
  10. ...

    但是,6.显然都是应用程序的关键部分而且是错误的。例如,页面可能会像这样响应

    Error: '-- is not a valid user name.
    

    在第4阶段,答案是

    Error:  is not a valid user name.
    

    或者

    Error: username must be a minimum of 6 characters.
    

2 个答案:

答案 0 :(得分:0)

好像在(4),您想先尝试发送一些良性值,这样您就可以看到在正常情况下返回的页面类型。

例如,生成一个随机的三个字母的“用户名”并提交它。您可能会收到类似“错误:bfw不是有效用户名”的响应。或“错误:用户名太短”。

完成后,您可以发送字符串尝试SQL注入,并查看结果是否在质量上有所不同。因此,如果您发送'--并获得与发送随机良性“用户名”时相同的结果,则可能不会受到攻击。另一方面,如果你得到的回复是不同的,并且包含“警告,你在第1行的SQL中有错误......”之类的文本,那么它可能很容易受到攻击。 (尽管如此,它并不需要向您发出警告,因为如果它与您从良性数据中获得的响应大不相同,即使是通用错误页面也可能表示漏洞。)

答案 1 :(得分:0)

Justin Clarke的“SQL注入攻击和防御”。

提供了许多测试来发现和确认SQL注入漏洞,这是我对第65页的总结。

触发错误

“发送''--并希望收到错误。”

错误消息或500服务器错误表示存在漏洞。包含''--(如在用户''--中的密码不具备该密码的响应...)除非是堆栈跟踪,否则可能不容易受到攻击

始终为真实条件

“发送1' or '1'='11') or ('1'='1并希望收到数据库中的所有条目。”

当响应代码为200且响应中未收到攻击字符串时,可以假定站点容易受到攻击。包含单词'error'或攻击字符串的页面表示阻力,500也是如此。

无条件

“发送value' or '1'='2value') or ('1'='2并期望易受攻击的应用响应,就像它只收到value一样。”

始终为假状态

1' and '1'='21') and ('1'='2。如果成功,则不会从表格中返回任何行。”

Microsoft SQL Server串联

1' or 'ab'='a'+'b1') or ('ab'='a'+'b。如果成功,则返回相同的内容 信息作为一个永远真实的条件“

MySQL连接

1' or 'ab'='a' 'b1') or ('ab'='a' 'b。如果成功,则返回相同的内容 信息作为一个永远真实的条件“

Oracle连接

1' or 'ab'='a'||'b1') or ('ab'='a'||'b。如果成功,则返回相同的内容 信息作为一个永远真实的条件“

本书中还包括其他示例。