SQL学习之SQL注入学习总结

时间:2022-02-08 14:08:17

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

测试数据库

我们本文就以如下数据库作为测试数据库,完成我们的注入分析。

SQL学习之SQL注入学习总结

相关函数

在学习盲注之前,首先要了解一下在sql盲注中所涉及到的函数以及使用方法。

mid()---从文本字段中提取字符

SELECT MID(column_name,start[,length]) FROM table_name;  

column_name 必需。要提取字符的字段。

start 必需。规定开始位置(起始值是 1)。

length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

SQL学习之SQL注入学习总结

limit()---返回前几条或者中间某几行数据

select * from table limit m,n;    

其中,记录从index 0开始,m表示第m条记录 ,n指第m+1条开始取n条

SQL学习之SQL注入学习总结

concat、concat_ws、group_concat

MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

SQL学习之SQL注入学习总结

和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL

SQL学习之SQL注入学习总结

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

SQL学习之SQL注入学习总结

Count()---聚集函数,统计元祖的个数

SQL学习之SQL注入学习总结

rand()---用于产生一个0~1的随机数

SQL学习之SQL注入学习总结

floor()---向下取整

SQL学习之SQL注入学习总结

group by---依据我们想要的规则对结果进行分组

SQL学习之SQL注入学习总结

length()---返回字符串的长度

SQL学习之SQL注入学习总结

Substr()---截取字符串 三个参数 (所要截取字符串,截取的位置,截取的长度)

SQL学习之SQL注入学习总结

Ascii()---返回字符串的ascii码

SQL学习之SQL注入学习总结

报错注入

基于floor,UpdateXml(有长度限制,最长32位),ExtractValue(有长度限制,最长32位)进行报错注入。

floor报错

  • 获取数据库

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

  • 获取表名

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

  • 获取字段名

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

  • 获取内容

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

UpdateXml报错注入

  • 获取表名

SQL学习之SQL注入学习总结

  • 获取字段

SQL学习之SQL注入学习总结

  • 获取内容

SQL学习之SQL注入学习总结

extractvalue报错

  • 获取表名

SQL学习之SQL注入学习总结

  • 获取字段

SQL学习之SQL注入学习总结

extractvalue报错注入

SQL学习之SQL注入学习总结

  • 获取字段

SQL学习之SQL注入学习总结

基于布尔盲注

通过构造sql语句,通过判断语句是否执行成功来对数据进行猜解。

  • 查看表名

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

  • 获取表名第一个字符

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

  • 获取表名第一个字符的ASCII

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

获取字段名与字段内容原理一样。

以Sqli-labs Less8为例,无论输入什么就只有正确和错误,于是可以判断基于布尔的盲注。

  • 先判断当前数据库的长度

SQL学习之SQL注入学习总结

发现当值为8的时候,页面就没有显示。那么说明database()的长度是8

  • 获取数据库名

可以使用如下脚本猜解数据库名字:

SQL学习之SQL注入学习总结

  • 获取表长度

SQL学习之SQL注入学习总结

发现当值为6的时候,页面就没有显示。那么说明表的长度是6

  • 获取表名

和上面类似,只需要把payload修改为下面即可:

SQL学习之SQL注入学习总结

  • 获取列名

SQL学习之SQL注入学习总结

  • 获取内容

SQL学习之SQL注入学习总结

基于时间盲注

基于的原理是,当对数据库进行查询操作,如果查询的条件不存在,语句执行的时间便是0.但往往语句执行的速度非常快,线程信息一闪而过,得到的执行时间基本为0。但是如果查询语句的条件不存在,执行的时间便是0,利用该函数这样一个特殊的性质,可以利用时间延迟来判断我们查询的是否存在。这便是SQL基于时间延迟的盲注的工作原理

首先理解一下下面的语句:

SQL学习之SQL注入学习总结

判断数据库名是否为security,正确返回1,错误返回2。基于时间的注入和基于布尔差不多,引入了if语句进行判断。

SQL学习之SQL注入学习总结

SQL学习之SQL注入学习总结

以Sqli-labs Less8为例,无论我们怎么输入,输出结果都是You are in ,所以判断为基于时间的盲注。

  • 数据库长度判断

SQL学习之SQL注入学习总结

  • 使用二分法获得数据库名

SQL学习之SQL注入学习总结

剩余步骤和基于布尔的差不多,只是加了一个if判断语句进行判断

  • 获取表名:

SQL学习之SQL注入学习总结

  • 获取列名:

SQL学习之SQL注入学习总结

  • 获取内容:

SQL学习之SQL注入学习总结

总结

本文总结了关于sql注入中的报错注入和盲注的一些原理以及测试方法。感谢Hello_C的总结分享。

参考

SQL学习之SQL注入学习总结的更多相关文章

  1. 2019-10-31:渗透测试,基础学习,mongodb注入学习

    mongodb命令删除文档,db.集合名.remove({键:值})更新文档,db.集合名.update({被更新的对象},{$set:{要更新的内容}}),默认只更新检测到的第一条文档更新全部匹配到 ...

  2. MySQL手工注入学习-1

    MySQL手工注入学习 SQLi-labs 手工注入学习 以下是通过SLQi-labs平台的部分简单例题的手工注入过程 Less-1:union联合查询注入 页面提示:Please input the ...

  3. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  4. python之MySQL学习——防止SQL注入

    python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...

  5. DVWA学习之SQL注入

    DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...

  6. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  7. Web安全学习笔记——SQL注入

    一.MySQL注入 1. 常用信息查询 常用信息: 当前数据库名称:database() 当前用户:user() current_user() system_user() 当前数据库版本号:@@ver ...

  8. 2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践

    第1节 研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 1.1 原理 在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统 ...

  9. SQL注入学习(一)

    SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击. SQL注入基础 漏洞原理 针对SQL注入的攻击行为可描述 ...

  10. 网络安全系列 之 SQL注入学习总结

    目录 1. sql注入概述 2. sql注入测试工具 3. sql注入防御方法 3.1 问题来源 3.2 防御方法 4. SQL注入防御举例 4.1 使用JDBC时,SQL语句进行了拼接 4.2 使用 ...

随机推荐

  1. tomcat server.xml配置文件 解析

      把服务拆分出来了.      前几天我也进行了拆分.可是当时服务起不来所以我想会不会有什么设置,使得这个服务在主机中只能启一个.然后我又找了一台服务器,也把代码放了进去.结果仿佛是我料想到的样子, ...

  2. Javascript从入门到精通(一)

    第一篇   基础知识 一.JavaScript的主要特点:1.解释性:不同于一些编译性的程序语言(如C.C++等),它是一种解释性的程序语言,它的源代码不需要经过编译,而是直接在浏览器中运行时被解释. ...

  3. Java 集合 散列表hash table

    Java 集合 散列表hash table @author ixenos 摘要:hash table用链表数组实现.解决散列表的冲突:开放地址法 和 链地址法(冲突链表方式) hash table 是 ...

  4. Java虚拟机--垃圾收集

    Java虚拟机 1. JVM运行时数据区域 参考书籍:<深入理解Java虚拟机:JVM高级特性与最佳实践,第二版> 资料参考:http://blog.csdn.net/nms312/art ...

  5. poj-1012-约瑟夫问题

    Description The Joseph's problem is notoriously known. For those who are not familiar with the origi ...

  6. PAT1113&colon; Integer Set Partition

    1113. Integer Set Partition (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. Day5----------------------文件合并与文件归档

    一.文件合并 1.命令: >:覆盖式 >>:追加式 例如:cat /etc/passwd > a.txt      把/etc/passwd下的内容合并到a.txt内,若没有文 ...

  8. SQL性能优化前期准备-清除缓存、开启IO统计

    文章来至:https://www.cnblogs.com/Ren_Lei/p/5669662.html 如果需要进行SQl Server下的SQL性能优化,需要准备以下内容: 一.SQL查询分析器设置 ...

  9. python 爬虫时间数据-时间格式转换

    1 import time,datetime 2 3 time_original = '17/Sep/2012:11:40:00' 4 time_format = datetime.datetime. ...

  10. hive数据倾斜原因以及解决办法

    何谓数据倾斜?数据倾斜指的是,并行处理的数据集 中,某一部分(如Spark的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈. 表现为整体任务基本完成, ...