数字型注入
许多网页都有如下的网址
ww.xxx.com/xxx?id=1
注入点 id 类型为数字,在大多数的网页中,例如查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。
这一类的 SQL 语句原型大概为 select * from 表名 where id=1
若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1,就能查询到关于这张表的全部信息,也就是猜解数据库
字符型注入
针对的是如下类型的网址
www.xxx.com/xxx?username=admin
可以采用:
-
传入【username=admin' --】或者【username=admin' #】
在实际执行的sql语句中,可能就变成了
SELECT * FROM users WHERE user='admin' -- ' AND password='password'
【--】在数据库中会被解析为注释,实际上执行的是
SELECT * FROM users WHERE user='admin'
又或者,猜解其他内容,如
输入【admin' order by 1#】
实际执行的sql语句可能就会变成
ELECT * FROM users WHERE user='admin' order by 1#`;
在继续输入【admin‘ order by 2#】,以此类推,就可以知道这个users表中有多少列数据
再继续使用联合查询来获取信息,也就是 union select ,再配合一些函数,就会有效果,首先我们需要知道一共有多少列,因为union在查询的时候需要和主查询的列数相同,以两列为例:
我们可以输入【admin' union select database(),user()#】
database() :将会返回当前查询所使用的数据库名字
user() :会返回执行当前查询的用户名
那么实际执行的sql语句可能是:
SELECT first_name, second_name FROM users WHERE user='admin' union select database(),user()#`;
可以再继续输入【admin’ union select version(),@@version_compile_os#】
version() :获取当前数据库版本
@@version_compile_os :获取当前操作系统
同理的函数还有
@@datadir:返回MySQL数据目录的位置
@@basedir:返回MySQL安装目录
@@innodb_version:返回InnoDB存储引擎的版本号(如果已启用)
@@character_set_server和@@collation_server:分别返回服务器的默认字符集和排序规则
搜索型注入
这种注入方式是基于 LIKE 语句进行模糊匹配的查询,例如在一个简单的搜索功能里面,URL可能是:
www.xxx.com/xxx?keyword=【搜索关键字】
那么原始SQL语句可能是
ELECT * FROM xxx WHERE xxx LIKE '%原始搜索关键词%';
首先可以判断是否存在注入,例如修改url,如果页面异常或者报错,则可能存在注入漏洞
ww.xxx.com/xxx?keyword='
再按照上个标题中讲述的方法,进行数据拼接来获得数据
或者是通过表单来提交的,也可以通过这种方式来进行sql注入,上述讲的基本都是GET注入或者POST注入,下文会讲HTTP头部注入
HTTP头部注入
首先,可以了解一下HTTP头部的组成:HTTP详解(请求体,请求体,响应头,响应体) - Teamshare | 天书
Cookie注入
-
Cookie通常用于存储会话ID或其他用户身份识别信息
-
如果服务器端在执行SQL查询时错误地将未经充分过滤的Cookie内容作为查询参数,就可能导致注入
-
例如,如果一个网站仅仅将Cookie中的user_id值作为SQL查询的一部分,如 SELECT * FROM users WHERE id = $_COOKIE['user_id'],攻击者可以修改其Cookie值为类似于 'admin' OR '1'='1' 的形式,从而绕过身份验证或获取未经授权的信息
User-Agent注入
-
User-Agent字段被用来标识客户端浏览器的类型、版本以及其他相关信息
-
User-Agent注入的本质也是如果服务端使用了这个字段,并且没有加以过滤或处理,就可能导致注入
-
例如,如果服务器使用类似 SELECT * FROM users WHERE user_agent = $_SERVER['HTTP_USER_AGENT'] 的查询,攻击者可能会设置一个包含注入内容的User-Agent字符串,如 'Mozilla/5.0 (compatible; SQLInjection; Windows NT 6.1)' UNION SELECT username, password FROM admin_table --,就可以尝试获取敏感数据
总结
-
SQL注入发生在应用将不受信任的用户数据直接嵌入到SQL查询字符串时,没有对这些数据进行充分的验证和转义文章来源:https://www.toymoban.com/news/detail-821592.html
-
攻击者通过构造特殊的输入内容,使得注入的SQL片段与原始查询语句结合后改变其原有意图文章来源地址https://www.toymoban.com/news/detail-821592.html
到了这里,关于SQL注入常见方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!