测试站点是否容易受到Sql Injection攻击

Dev*_*oid 17 sql

我正在阅读关于sql注入的内容,如果有一个用户可以输入用户名和登录的表单,我理解它是如何工作的.我没有得到的是没有登录页面的网站如何容易受到sql注入攻击.

http://thecybersaviours.com/how-to-find-out-if-a-website-is-vulnerable-to-sql-injection

它说只需附加'或'='来测试它.我不明白这有助于确定是否存在错误.根本构建的查询在哪里.

Pen*_*der 19

SQL注入是尝试通过网站界面向数据库发出SQL命令,以获取其他信息.即,该信息是存储的数据库信息,例如用户名和密码.

保护附加到数据库实例的任何脚本或页面的第一条规则是不要信任用户输入.

您的示例是尝试在SQL语句中结束错误引用的字符串.要理解这一点,首先需要了解SQL语句.在您添加'到参数的示例中,您的"注入"希望使用以下类型的语句:

SELECT用户名,密码FROM users WHERE username ='$ username'

通过'在该语句中附加一个,然后您可以添加其他SQL参数或查询:' OR username --

SELECT用户名,密码FROM users WHERE username =''OR username - '$ username

是一个注入(一种类型;查询重塑).用户输入成为预先编写的SQL语句中的注入语句.

通常有三种类型的SQL注入方法:

  • 查询重塑或重定向(上图)
  • 基于错误消息(没有这样的用户/密码)
  • 盲注射

阅读SQL注入,如何测试漏洞,理解和克服SQL注入,以及StackOverflow上关于避免注入的这个问题(及相关问题).

编辑:

至于测试你的网站以进行SQL注入,要理解它比仅仅"追加符号"更复杂.如果您的网站很重要,并且您(或您的公司)可以负担得起,请雇用专业的笔测试仪.如果做不到这一点,这个伟大的exaxmple/proof可以向您展示一些可能用于执行注入测试的常用技术.还有SQLMap可以自动执行SQL注入和数据库接管方案的一些测试.


Jas*_*per 5

可以对用户可以影响的任何输入进行SQL注入,这些输入在查询中使用之前未正确转义。

一个示例将是这样的get变量:

http//www.example.com/user.php?userid=5
Run Code Online (Sandbox Code Playgroud)

现在,如果随附的PHP代码如下所示:

$query = "SELECT username, password FROM users WHERE userid=" . $_GET['userid'];
// ...
Run Code Online (Sandbox Code Playgroud)

您也可以在这里轻松使用SQL注入:

http//www.example.com/user.php?userid=5 AND 1=2 UNION SELECT password,username FROM users WHERE usertype='admin'
Run Code Online (Sandbox Code Playgroud)

(当然,必须将空格替换为%20,但这更易于阅读。此外,这只是一个进行更多假设的示例,但思路应明确。)