sql注入介绍

SQL注入是一种攻击方式,通过在输入数据中嵌入SQL命令欺骗数据库服务器。攻击者可以获取敏感信息或执行未授权操作。文章介绍了注入的类型、步骤、常用函数以及防御方法,如使用PreparedStatement和参数化查询。
摘要由CSDN通过智能技术生成

一、sql注入

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

即把sql命令插入到web的请求表单中,欺骗服务器,以此来获取服务器的数据和权限。

二、sql注入的分类

根据数据的分类:整型

字符型'',"",(''),("")

根据数据的传输方式:GET,POST,COOKIE

根据注入的模式:基于联合查询的注入模式

基于报错的注入模式

基于布尔的盲注

基于时间的盲注

堆查询的注入模式

三、sql注入一般步骤

  1. 求闭合字符

  1. 选择注入模式

  1. 爆数据库

  1. 爆表名

  1. 爆列名

  1. 爆字段

四、sql注入相关

  1. union联合查询:

union操作符用于拼接两个或者多个select查询语句

union中的每个查询必须拥有相同的列数

  1. order by语句

order by 语句用于根据指定的列对结果集进行排序

order by语句默认按照升序对记录进行排序

在sql注入中常用来二分法判断表的列数

  1. sql注入中一些常用的mysql函数/语句

函数/语句

功能

user()

当前用户名

database()

当前所用数据库

current_user()

当前用户名(可用来查看权限)

version()

数据库的版本

@@datadir

数据库的路径

load_file()

读文件操作

into outfile()/into dumpfile

写文件操作

  1. 注释在sql注入中的作用

在原来的sql语句中插入payload,攻击者注入一段包含注释符的sql语句,将原来的语句的一部分注释,注释掉的部分语句不会被执行。

select user from student where id =1 limit 0,1;

select user from student where id =1 and 1=2 union select user() # limit 0,1;

  1. sql注入读写文件的根本条件

数据库允许导入导出(secure_file_priv)

当前用户文件操作权限(File_priv)

secure_file_prive参数的设置

含义

secure_file_prive=null

限制mysqld不允许导入导出

secure_file_priv=/tmp/

限制mysqld的导入导出只能发生在/tmp/目录下

secure_file_priv=''

不对mysqld的导入导出做限制

secure_file_prive直接在my.ini文件里设置即可

五、sql注入经常出没的地方

内部实现/流程的角度

业务点

url传参

新闻/商品等查询处

表单post

用户注册/登录处

Cookie

修改用户资料处

User-Agent

找回密码处

X-Forwarded-For

搜索框

........

......

六、本质

把用户输入的数据当作代码执行。

两个关键条件:

用户能够控制输入;

原本程序要执行的代码,拼接了用户输入的数据。

七、sql注入防御

(1)PreparedStatement

(2)使用正则表达式过滤传入的参数

(3)字符串过滤

(4)Jsp中调用该函数检查是否包函非法字符

(5)JSP页面判断代码:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值