欢迎光临
我们一直在努力

渗透测试学习第一课:sql注入

SQL注入判断的基础知识点

在 SQL 注入与 SQL 查询语句中,数据类型的不同会影响参数的书写方式:

1. 如果查询的是数字类型的数据(如 id),传入参数时可以直接写数字,无需引号,例如:
select * from users where id = 1

2. 如果查询的是字符串类型(如用户名、邮箱等),必须用单引号或双引号将输入内容括起来,例如:
select * from users where username = '小明'

这样做是为了告诉数据库:引号包裹的内容是一个完整的字符串,否则 SQL 会解析报错。
例如: 如果你写成 select * from users where username = 小明 数据库会提示类似 语法错误 (You have an error in your SQL syntax) ,因为没有用引号包裹字符串,SQL 解析失败。

小总结: 只有数字可直接写,字符类(如姓名、邮箱、地址等)都要被引号包裹。

SQL注入判断的方法论

SQL注入的判断过程称之为FUZZ。 你可能不知道什么是FUZZ,简单来说,就是不停地“猜”,直到猜对为止。

在SQL语句中,注释是一种“让数据库忽略”某些内容的技巧。

常见的注释写法有:

  • — 空格:从这之后,直到行末,内容都被当成注释
    (注意,–后面需要加一个空格)
  • #:从这里直到行末也被注释(MySQL支持)

举个例子:

select * from users where username = '小明' —

这样写,–后面的内容就不会被数据库执行。
假设你输入的是 小明' — ,那拼接 SQL 时就变成:

select * from users where username = '小明' — '

这时候你输入了 小明' — ,查询语句变成了上面的样子。
第一个单引号 把 username 字符串正确闭合,– 把后面的 多余内容全注释掉,SQL 不会报错。

判断是否存在SQL注入的核心要素

观察“页面数据”返回内容的差异,判断自己构造的SQL语句是否真正被执行!
这里虽然以“页面”为例,但实际上也可以通过 数据包、时间 等其他异常来判断

我们之前学习了在SQL注入测试中,像 and 1=1 和 and 1=2 这样的语句片段——

  • 如果加上 and 1=1 查询结果不变。
  • 如果加上 and 1=2 查询结果为空,说明我们成功影响了SQL查询。

这就是“注入判断”的基础: 通过人为拼接SQL条件,观测结果上的差异,从而确认是否可以注入!

原始SQL语句:
select * from users where username = 'username(用户输入的内容)'

现在系统里执行的语句是
select * from users where username = '小明' –'

and 1=1 与 and 1=2 的利用:
比如在 username 后输入 ' and 1=1 — 或 ' and 1=2 — ,拼接后的SQL分别如下:

select * from users where username = '小明' and 1=1 —

select * from users where username = '小明' and 1=2 —

现象: and 1=1 显示正常结果,and 1=2 没有结果或为空,说明我们拼接进去的SQL子句真的被执行了。这正是判断是否存在SQL注入的核心方法之一!

赞(0)
未经允许不得转载:171主机测评 » 渗透测试学习第一课:sql注入
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址