您当前的位置: 首页 >  web安全

Z3eyOnd

暂无认证

  • 5浏览

    0关注

    117博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

web安全学习之路6--SQL注入

Z3eyOnd 发布时间:2021-05-22 22:52:19 ,浏览量:5

文章目录
    • 一.判断sql注入点
    • 二.其他
    • 三.整型报错注入#:
    • 四.union注入绕过
    • 五.时间盲注
    • 六.布尔盲注
    • 其他注入
    • SQL语句绕过
    • 图片笔记
    • 看完从0到1的笔记

一.判断sql注入点
  1. 整型数字型报错注入点:使用URL后id=1 and 1=1页面正常显示,id=1 and 1=2,页面报错,则存在整型数字型注入。或者如果id=1跟id=3-2返回的结果是一样的,则说明是数字型注入
  2. 字符型报错注入:id=30’,页面报错,则可能是字符型注入点,但也可能存在括号,双引号注入等。用id=30’ #,返回结果跟id=30,一样,则说明是字符型注入
  3. id =30 order by 3正常,by 4报错,则说明是3列。
  4. 补充:information_schema是mysql系统自带的一个数据库,有三个表,schemata是存储着许多数据库名的表,tables表,存储着表名,指出了这些表分别属于的数据库名,columns表,指出列名分别属于的数据库名和表名
二.其他
  1. 内联注释:mysql一些特殊的sql语句,用/**/来注释掉,使不兼容的数据库类型不能读取,但是mysql本身可以读取该语句 #三.报错注入: 利用数据库语句报错显示该有的信息,通常使用mysql_error来查看上次查询语句出现的错误信息。
三.整型报错注入#:
  1. 判断条件:输入 sql语句后,返回的错误信息可以得到我们想得到的一些值。
  2. 什么是整型报错注入:URL中的参数是整数,一般可以比用 单引号来闭合。
  3. 报错函数: (1)使用updatexml函数。 URL?id=1’出现报错,因为单引号未闭合; 查询user名:’ and updatexml(1,concat(ox7e,(select user()),ox7e),1) 查询数据库名:’ and updatxml(1,concat(ox7e,(select schema_name from information_schema.schema limit0,1)ox7e),1) 注:concat函数可以用来连接字符串,遇到特殊字符就会报错,只能爆出32字符,所以需要substr来依次进行报错信息字符串 limit m,n:m表示起始的位置,n表示几个 查询表名:’ and updatexml(1,(ox7e,concat(select table_name from information_schema.tables where table_schema=‘test’ limit 0,1)ox7e),1) (2)Extractvalue(与updatexml类似的) (3)exp函数溢出和按位溢出: select ~(select user())返回用户名 select ~(select version())返回数据库版本 exp()函数表示e的多少次方,当大于709时,就会报错 实例:union select 1,2,exr(~(select* from (select version())x)) (4)floor函数: Rand():取随机数 rand(0)2: Floor():向下取整数 Concat():连接字符串 Count():计算总数 与group by相结合 select id,count from user group by id. 实例注入: select count(),concat(version(),database(),floor(rand(0)*2))x form user group by x. 报错注入绕过 使用polygon方法进行爆出信息 #union注入: union函数:连接多个select语句,必须保证查询列数相同 concat:连接字符串,group_concat使用逗号做分隔符,cancat_ws(sep,str1,str2)使用第一个参数做分隔符

步骤:

  1. 判断注入点:id =1’无异常,id=1’ and 1=1无异常,id=1’ and 1=2异常,说明存在整型注入点,还用可能是,单引号,双引号,括号注入点,或者,单引号括号共同,或者双引号括号一起的
  2. 求闭合字符
  3. 求列数:order by函数,通过select * from 表名,可以判断。
  4. 求显示位
  5. 求数据库名
  6. 求表名
  7. 求列名
  8. 求字段名。 实例分析:
  9. id=1与id=1’结果不相同,id=1 and 1=1与id=1 and 1=2结果不一样->存在sql漏洞
  10. id=1 order by查询列数为3
  11. union select1,2,3,爆出2:3
  12. union select1,database(),3,爆出数据库名
  13. elect table_name from information_schema.tables where table_schema=数据库名 limit0,1 -->得到表名
  14. select column_name from information_schema.colunms where table_schema=数据库名 and table_name=表名 limit 0,1 需要爆出多个字段名,只需要改变 limit1,1
四.union注入绕过
  1. 过滤了select x from y类似的正则,就需要,将from与y不留空格符号,若3与from不留空格,就会报错,()与from不留空格,不会报错,
  2. 过滤了union等关键字,如果用的srt_ireplace(),可以双写绕过,
  3. or and关键字过滤,使用&&,||来绕过
  4. 空格被过滤,使用+来进行绕过。
五.时间盲注
  1. 使用sleep()函数,通过时间等待的长短来判断,sql语句是否执行
  2. 当数据库所没有要查询的内容,则sleep函数也没有用
  3. substr(string String,起始的位置,所用的长度(lenth)),起始的位置从1数起,不是0
  4. count()函数: count(*),返回记录数 count(列名),返回该列的记录数 count(distinct 列名),返回不同的记录总数
  5. 基于时间的盲注: if(条件,sleep(3),1)条件成立,停三秒 if(条件,1,sleep(3))条件成立,直接执行。
六.布尔盲注
  1. 判断条件:一般注入的时候,当输入语句时,不会返回任何值,只返回yes或者no。
  2. 在布尔盲注会用到length来得到数据库的长度
  3. substr(字符串,开始的位置,几个字符串),与limit不同的是,开始的位置是1,不是0.
  4. 其他的基本跟union注入差不多,只是要对每个字符进行遍历猜测
其他注入
  1. 二次注入:两张表,一张表上进行注册某个内容,进行sql语句,另一张表上查询,就可以看到sql注入的效果
  2. cookie注入:在http请求包的头部字段名,可以看到cookie处由id=1这种注入点
  3. 宽字节注入:注入语句的单引号被转义了,中间加了一个反斜杠,所以党数据库的编码为GBK时,就可以加上%df来绕过
  4. base64注入:对sql语句进行URL编码等,来绕过
  5. XFF注入:X-Forwarded-for时用来传输客户端IP地址的,可以加上一些SQL语句
SQL语句绕过
  1. 大小写绕过
  2. 双写绕过
  3. 编码绕过
  4. 内联注释绕过
图片笔记

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

看完从0到1的笔记
  1. 基本的URL编码:%20是空格,%27是单引号,%23是#
关注
打赏
1651657201
查看更多评论
立即登录/注册

微信扫码登录

0.0364s