SQL注入

SQL注入的危害:

  • 盗取数据库中的信息
  • 绕过登录认证(万能密码)

二、SQL注入的流程

2.1、寻找注入点

寻找和数据库有交互的地方(例:注册、登录、搜索)
例:

https://www.xxxx.com/search.php?wk=xxx

?wk=xxx中xxx就是web服务器带入数据库中查询的字符串,这种情况就是和数据库交互的地方。

通过这种特征可以在谷歌搜索目标:

谷歌搜索语法:inurl:php?id=

2.2、判断闭合方式:

  • 先判断是数字型还是字符串型

查看提交的参数例如?wk=11在11当中加入字符?wk=11x看有没有报错,如果报错说明是字符型。

  • 再判断闭合方式:

在提交的参数后面加上一个引号(单/双引号都有可能)例如:?wk=11' ,看是否有报错,如果都没有报错,说明大概率不存在SQL注入

三、 SQL注入的分类

3.1 、盲注

盲注就是在SQL注入过程中,找到注入点,执行SQL语句后,查询到的数据或者错误信息不能回显到前端页面,此时,我们需要利用一些方法进行判断或者猜测,这个过程称为盲注。

3.1.1、布尔盲注

“基于布尔判断的盲注”指的是利用SQL语句逻辑与(and)操作,判断and两边的条件是否成立,SQL语句带入数据库查询后判断返回内容(通常返回值仅有空和非空两种状态),类似布尔型的true和false的两种状态;类似于无法开口说话的人,只能通过点头和摇头来告诉你答案正确与否。

布尔盲注的特性:
构造条件判断式 SQL 语句,利用页面不同响应(条件为真时页面正常,为假时页面异常)来获取数据库信息。

布尔注入的流程:

四、其它知识点

注释符

1、注释符的作用:

  • 终止当前 SQL 语句,执行额外代码或绕过验证。
  • 隐藏恶意语句,避免语法错误。

2. 常见数据库注释符:

数据库 单行注释符 多行注释符
MySQL #-- /* ... */
Oracle -- /* ... */
SQL Server -- /* ... */
PostgreSQL -- /* ... */
注意
  • -- 后需加空格(MySQL/SQL Server),# 后无需空格。
  • 在url中的时候不能用#,需要用--+,#号会被当做特殊字符处理,–代表注释,+代表空格。

3. 典型注入场景

(1)登录绕过

SELECT * FROM users WHERE username = 'admin' -- ' AND password = '任意值';
  • 注入点:用户名输入 admin' --,密码任意。
  • 效果:注释掉密码验证部分,直接返回用户 admin 的记录。

(2)联合查询注入

SELECT id, name FROM products WHERE id = 1 UNION SELECT version(), null -- 
  • 作用:隐藏原查询的后续条件,返回数据库版本号。

4. 特殊技巧

  • 绕过WAF:使用 --%0A(换行符)或 # 绕过部分过滤规则。
  • 闭合引号:在字符型注入中,先闭合原引号再添加注释符:
    ' UNION SELECT 1,2,3#
    

万能密码

“万能密码” 是攻击者利用 SQL 语句拼接漏洞,绕过正常的身份验证机制进入系统的方式。

形式1:' or 1=1#
形式2:' or '1'='1'#
形式3:admin' or 1=1#

举例登录验证场景:
假设登录验证的 SQL 语句如下:

SELECT * FROM users WHERE username = '$username' AND password = '$password';

用万能密码' or 1=1#组后:

SELECT * FROM users WHERE username = '' or 1=1#' AND password = '随意密码';

经过组合后用户名为空,但是经过or 1=1后sql语句永远为真,#后面的全部被注释,服务端返回真,攻击者就能绕过登录验证


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tanglx@aliyun.com

×

喜欢就点赞,疼爱就打赏