sql注入

1. 产生条件

  • 有参数传递
  • 参数值代入数据可查询并且执行

2. 测试流程

2.1. 注入点探测

  1. 自动方式
  2. 手动方式

2.2. 信息获取

  1. 环境信息
  2. 数据库信息

2.3. 获取权限

  1. 数字型        user_id=$id
  2. 字符型        user_id= ‘$id’
  3. 搜索型        text LIKE '%{$_GET['search']}%'"

报错注入

  1.  常用报错函数updatexml()、extractvalue()、floor()、
  2. 基于函数报错的信息获取(select/insert/update/delete)

后台没有屏蔽报错信息,在前端限制

insert/update注入 

 

 

 

 

  • 类型分类一
      1. 基于布尔的盲注

不返回数据库数据,仅返回TRUE和FALSE。

        1. 基于时间的盲注

利用sleep()或benchmark()等函数让mysql执行时间变长。

// if(length(database()>1,sleep(5),1))

        1. 基于报错注入
          1. 多单引号

ID=1’

          1. extractvalue()
  1. 对XML文档进行查询的函数
  2. 语法:extractvalue(目标xml文档,xml路径)
  3. 示例

concat()拼接:

select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘~’,(select database()))))

error:~security

          1. floor()
          2. updatexml()
  • updatexml()函数与extractvalue()类似,是更新xml文档的函数。
  • 语法updatexml(目标xml文档,xml路径,更新的内容)
  • 样例

正常

select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

报错

select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))

error:~security

          1.  geometrycollection()
          2.   multipoint()
          3.   polygon()
          4.   multipolygon()
          5.   linestring()
          6.   multilinestring()
          7.   exp()

原理当传递一个大于709的值时,函数exp()就会引起一个溢出错误

样例

报错

select exp(710);

ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'

0按位取反就会返回“18446744073709551615”

~(select version()) 

18446744073709551610 

报错

select exp(~(select*from(select user())x));  

ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

        1. 堆查询注入
  • 分号隔开

引号闭合

  • %23----#

 

        1. 联合查询注入
  • union注入

id=-1 union select 1,2,3

 

        1. 其它
  • 宽字节注入
    1. 数据库编码为GBK,绕过单引号被转义
    2. 实现

id=1%df'

id=1%df%5c

繁体“運”

/----%5c

  • 二次注入
    1. 向数据库插入查询语句,不被执行
    2. 数据库调用,报错,返回错误信息
  • cookie注入
  • base64注入

 

      1. 类型分类二

数字型一般不需要单引号闭合,而字符串一般需要通过单引号来闭合

数字型

输入的参数为整形

字符型

输入的参数为字符串

      1. 防御
  1. 使用预编译语句

构造的sql语句时使用参数化形式

参数化处理sql 是将参数进行了字符串化处理,把参数中的单引号,井号#,等都做了转义处理,进而在执行sql语句时不会被当做sql中的定界符和指定符来执行。

不使用拼接方式

2、过滤危险字符

关键字

不正常的符号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值