当前位置:   article > 正文

SQL注入心得_sql注入的自我评价

sql注入的自我评价

一、SQL注入介绍

  • web应用程序没有对用户的输入没有进行严格的过滤,直接将用户参数放入数据库中进行查询,导致攻击者可以通过构造不同的SQL语句来实现对数据库的操作
漏洞利用条件
  • 用户可以控制参数
  • 参数带入数据库查询

二、Mysql数据库介绍

information_schema
  • mysql 5.0以上版本,存在"information_schema"的数据库,有三个表名发错重要,SCHEMATA、TABLES和COLUMNS
  • SCHEMATA表保存所有的数据库名(SCHEMATA_NAME)
    在这里插入图片描述
  • TABLES表保存所有数据库名和该数据库对应的表名(TABLE_SCHEMA和TABLE_NAME)
    在这里插入图片描述
  • COLUMNS表保存所有的数据库以及表和列的名称(TABLE_SCHEMA和TABLE_NAME和COLUMN_NAME)
    在这里插入图片描述
  • 在报错注入中我们会用到这个"information_schema"数据库,以及里面的三张表
重要函数
  • database():当前使用的数据库
  • version():mysql的版本
  • user():当前的用户
查询语句
  • 没有任何条件
    **select 字段名 from 库名.表名 **
  • 一条限制条件
    select 字段名 from 库名.表名 where 限制条件
  • 多条限制条件
    select 字段名 from 库名.表名 where 限制条件 and 另一条限制条件
limit用法

limit m,n

  • m指开始的位置
  • n指取多少条记录
注释符
  • mysql:#、–+、/**/
内联注释
  • 用于绕过waf

三、SQL注入漏洞利用方式

  • 这里的利用方式,主要是通过mysql的sql编辑器完成,只有深刻的理解了利用原理,以及在sql语句如何进行的拼接。才能够有绕过waf等等更高要求的操作
(1)union注入攻击
  • select正常的查询
    select * from users;
    在这里插入图片描述
  • order by列出该表中的字段数(有几列),有上图可以看出有三列,如果order by的值超过3后,mysql就会出错,无法正常显示内容
    select * from users order by 3;
    在这里插入图片描述
  • union联合查询,将union跟到查询语句最后,可以再查询数据
    在这里插入图片描述
  • 由此可知,我们可以通过union再查询到更多的数据
(2)报错注入
  • 在mysql中如果使用updatexml()时,mysql就会报错,回显的报错内容有用的,所以可以通过这个函数进行注入
    select * from users where username=‘Bun’ and updatexml(1,concat(0x7e,(select database()),0x7e),1);
    在这里插入图片描述
  • 报错的内容只能显示一个数据数据元素,所以利用该函数只能精确到某一表的某一列某一行元素
    select * from users where username=‘Bun’ and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1);
    在这里插入图片描述
(3)盲注
  • 盲注是sql注入中比较难的部分,因为服务器不会显示报错信息而得名盲注
  • 盲注分为布尔型(Boolean)和时间型(time)
  • 时间型盲注的sql语句和布尔盲注的sql语句差不多,时间型sql语句只是在布尔型外边套几个函数而已
(3.1)Boolean型
  • 类似与and 1=1的判断,如果满足条件,正常回显,如果不满足条件,不回显
    select * from users where username=‘Dumb’ and length(database()) = 8;
    在这里插入图片描述
  • 判断出长度,接着就可以爆出数据库名,使用substr()函数
    select * from users where username=‘Dumb’ and substr(database(),1,1) = ‘s’;
    在这里插入图片描述
(3.2)Time型
  • 基本上是布尔型的sql语句外面套了一个if语句,只不过,如果正确执行会睡眠一段时间,由此判断是否存在注入
    select * from users where username=‘Dumb’ and if(length(database()) = 9,sleep(5),1);
(4)二次注入
  • 举个列子
    当一个用户注册时,将用户名注册成了一段sql语句。当一些网页需要显示他的用户名时,就会执行这条sql语句,这样就会数据库数据泄露出来,这中注入方式就是二次注入
(5)其它位子
  • 在cookie、XFF还有其它位子都有可能存在注入

sql注入的绕过手段

  • 大小写绕过 uNIoN SeLecT 1,2,3,4
  • 替换关键字 selselsectect 1,2,3,4
  • 编码绕过 %55nion%53elect 1,2,3,4
  • 等价函数与命令 @@datadir ==> datadir()
  • 内联注释绕过 union /select/ 1,2,3,4
  • 特殊符号绕过 select+id+from users
    or -> ||
    and -> &&
    = -> like
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/596214
推荐阅读
相关标签
  

闽ICP备14008679号