(二)什么原因导致存在SQL注入

[复制链接]
发表于 2025-11-12 21:08:08 | 显示全部楼层 |阅读模式


成因可以归结为以下两个原因叠加造成的:

1、 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句 ;

2、 未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。


SQL注入漏洞的分类与检测

截图202511121304001054.png



SQL注入测试方法

截图202511121304404137.png



注入点查找


表单提交,主要是POST请求,也包括GET请求。
URL参数提交,主要为GET请求参数。
Cookie参数提交。
HTTP请求头部可修改的值,比如:
Referer、User_Agent、X-forwarded-for等。

截图202511121305502820.png



构造测试语句的基本思路

截图202511121306343557.png



基本的获取数据payload


查询数据库版本:select version()      
查询数据库名称:select database()
查询当前数据库用户名:select user()


查询语句的闭合



sql注入漏洞的一个很大的原因在于网站的开发人员没有对用户的输入内容进行验证,认为所有用户的
输入都是合法的,导致用户可以输入特殊符号来闭合原来的查询语句,对查询语句进行重新构造,从而造成安
全事件的发生。

  1. SELECT * FROM users WHERE id='$id'
复制代码



假设以上是漏洞网站的查询语句,没有对用户的输入进行验证,用户可以在参数id内输入任何值。如
果我们要确认当前页面是否存在注入,直接输入or 1=1验证是无效的,因为当我们输入之后,查询语句变成如下
所示,内容包含在引号内容,当做一个字符串整体:

  1. SELECT * FROM users WHERE id='or 1=1'
复制代码



我们输入的语句放置在单引号内被当作一串普通的字符串执行。为了让我们输入的语句离开单引号,
需要手动将原来的单引号闭合掉,并且忽略掉后面的单引号。于是,我们输入的语句就变成’or 1=1 --+,在这里
--+是注释的意思。由于前端输入--+后端会进行URL解码变为:'-- '。于是原有的查询语句变成:        

  1. SELECT * FROM users WHERE id='' or 1=1 -- '
复制代码



这样一来,我们成功跳出原有单引号的限制,执行输入的语句。


*不只是闭合单引号,有些查询语句需要用
到括号、双引号等,同样需要闭合。

  1. or 1=1--+        'or 1=1--+           "or 1=1--+        )or 1=1--+
  2. ')or 1=1--+         ") or 1=1--+         '))or 1=1--+     "))or 1=1--+
复制代码

截图202511121310301574.png



说明:
1、字符型与数字型注入的主要区别是字符型注入需要通过引号闭合来进行查询,有时还须通过注释屏蔽后续语句
2、无论数字型还是字符型,满足上述条件时可基本判断存在注入漏洞,但不满足上述条件并不能证明漏洞不存在


SQL注入的测试方法-总结



                                不管是啥型

总而言之,就是对SQL中的各种类型的输入进行闭合测试,构造合法SQL,欺骗后台执行!


截图202511121308488742.png
截图202511121309072903.png
截图202511121309544088.png
必火网络安全培训,北京实地培训,月月有开班,零基础入门,四个月打造渗透高手。
详情请加微信:nvhack/153-2000-4362,手机微信同号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|女黑客安全网 |网站地图 | 津ICP备17008032号-3

GMT+8, 2026-2-2 05:17 , Processed in 0.087589 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表