梨子带你刷burp练兵场(burp Academy) - 服务端篇 - Sql注入配套漏洞讲解笔记
Sql注入
什么是Sql注入呢?
Sql注入允许攻击者扰乱对数据库的查询,从而让攻击者查看到正常情况下看不到的数据,甚至删除或修改这些数据
Sql注入有哪些例子?
检索隐藏数据
系统会将用户输入直接拼接到Sql查询语句中,此时可通过注释符(--)取消掉后面限制条件的作用,为了让注释后的sql语句还能正常闭合需要在payload中加入配对的符号,如单引号(')
打破应用逻辑
burp以用户登录举例,正常情况下用户登录需要验证账号和密码,但是如果利用注释符发动Sql注入的话,在拼接到sql语句中时就会取消掉密码字段的作用,这样就会导致只需要用户名正确即可登入该用户
利用Union进行跨库查询
利用Union查询可以在前面语句闭合的情况下插入一条新的查询语句,这样就可以查询同一个数据库服务器下其他库的数据了,但是要想成功利用Union攻击,前后两个sql语句需要满足两个条件:
- 两者的返回结果需要有相同列数
- 两者查询结果的每一列中的数据类型也要兼容
那么我们为了满足这两个条件需要获取哪些数据呢:
- 获取前者查询结果的列数
- 判断前者查询结果中哪些列的数据类型可以存储注入攻击后的查询结果
如何确定利用Union的注入攻击所需的列数呢?
burp给出了两种获取攻击所需列数的方法
第一种,利用ORDER BY查询子句,不断递增列索引直到出现报错信息即可判断列数,究其原理,ORDER BY的用途就是将查询结果按照第几列排序,如果超出列数即会产生报错从而侧面判断出查询结果有多少列
第二种,利用在Union查询时不断添加空值(NULL)查询字段,如:
' union select [[null,]...]--
如果null的数量与前者查询结果的列数不匹配即会产生报错,反之则不会,此时即可判断前者查询结果有多少列
如何确定Union的查询结果中哪些列的数据类型是适合用来存放注入结果的呢?
在确定列数以后,将不同数据类型的测试字符串填充到不同的位置观察响应,如果某位置的数据类型与该位置的填充字符串数据类型不符即会报错,反之则不会,从而可判断当前位置适不适合存放注入的查询结果
如何利用Union注入查询敏感数据?
当知道目标表和各列的名字后即可在可存放注入结果的位置填充这些列从而得到某些敏感数据
如何在单列中检索多个值呢?
在Union注入语句中,利用不同种类数据库中的不同字段连接符将多列的查询结果连接成一个字符串,然后再添加一个可标识的符号区分不同字段
如何通过Sql注入获取数据库详细信息呢?
获取数据库的类型和版本
不同的数据库,查询数据库版本的语句不太一样,这时候可以fuzz一下对比一下结果就可以很直观地判断数据库的类型,当类型匹配时就顺便也能看到数据库版本了
枚举数据库的内容
大多数数据库会提供一个预览模式会提供关于数据库的一些信息,如当前数据库服务器有哪些库、表、列,非Oracle数据库利用的是information_schema,Oracle数据库利用的是all_tables、all_tab_columns
利用盲注
所谓盲注就是无法直接看到注入的结果,这时候Union注入就不管用了,只能靠各种方法去猜结果的每一位是什么字符,根据利用条件可以再分为三种:
- 布尔盲注
- 时间盲注
- 带外盲注
布尔盲注原理是什么?
布尔盲注就是响应的结果只有两种,此时只能通过一个字符一个字符地猜,不断缩小字符的范围从而确定是什么字符,布尔盲注的流程如下:
- 猜查询结果长度
length(列)[<,>,=][长度]
- 猜每一位字符
substring(列,[第几位],1)[<,>,=][字符]
报错盲注原理是什么?
报错盲注就是在布尔盲注无法生效的情况下的盲注手段,通过制造报错来重新输出可表示语句执行成功与否的响应,报错盲注的流程如下:
- 猜查询结果长度
报错模板语句(length(列)[<,>,=][长度])
- 猜每一位字符
报错模板语句(substring(列,[第几位],1)[<,>,=][字符])
时间盲注原理是什么?
时间盲注就是利用延时延时函数让sql语句成功执行时延时一定的时间再接收到响应,但是时间盲注生效有个前提条件就是支持堆叠查询,延时盲注的流程如下:
- 猜查询结果长度
延时模板语句(length(列)[<,>,=][长度])
- 猜每一位字符
延时模板语句(substring(列,[第几位],1)[<,>,=][字符])
带外盲注原理是什么?
带外盲注是在以上三种盲注手段都无法得到有判断价值的响应时使用的盲注手段,这是因为有的系统对处理HTTP请求和Sql查询是采用异步的方式执行的,但是通过在payload中加入带外地址的方法就可以在执行sql查询的时候将查询结果发送到指定的带外地址,常用的带外地址协议为DNS,这里可以利用burp自带的xss平台作为接收端,带外盲注的流程如下:
- 猜查询结果长度
带外模板语句(length(列)[<,>,=][长度])
- 猜每一位字符
带外模板语句(substring(列,[第几位],1)[<,>,=][字符])
如何检测Sql注入漏洞呢?
- 提交单引号('),并观察响应
- 提交一些sql语句,并观察响应
- 提交一些布尔条件语句,并观察响应
- 提交一些延时语句,并观察响应
- 提交一些附有带外地址的语句,并观察响应
不同情况下的Sql注入
- 存在更新值或where子句的update语句
- 存在插入值的insert语句
- 存在表或列名的select语句
- 存在oder by子句的select语句
二次Sql注入是什么?
二次注入就是将注入语句利用对输入过滤不严格存储到数据库中,当系统将该条数据取出并拼接到查询语句时执行了恶意的sql操作,如更改数据库记录等
如何防止Sql注入呢?
用参数化查询(或预编译)的方式代替简单地拼接
哈喽,这里还是梨子哦,本系列是梨子从burp官方在线靶场漏洞讲解中整理出来的配套学习笔记,难免有遗漏,若有任何疑问可以添加梨子的联系方式(base64解码)QVBDRVY1KOW+ruS/oSk=,请转载蹭流量的人自觉替换联系方式再粘贴,最后再显摆一下梨子的排名,嘻嘻嘻
梨子带你刷burp练兵场(burp Academy) - 服务端篇 - Sql注入配套漏洞讲解笔记的更多相关文章
- 梨子带你刷burp练兵场(burp Academy) - 服务器篇 - Sql注入 - SQL injection UNION attack, determining the number of columns returned by the query
目录 SQL injection UNION attack, determining the number of columns returned by the query SQL injection ...
- 使用Eclipse自带的Axis1插件生成Web Service服务端客户端
JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...
- 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)
V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...
- 一篇文章带你了解SQL注入
什么是SQL注入? 原理: Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令 危害: 注入可能导致数据丢失泄露或数据破坏.缺乏可审计性,有时甚至能导致完全接管 ...
- miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。
使用 miniui datagrid 修改表格后,保存到服务端,然后使用 .NET 自带 JSON 转换,会抛出DateTime 内容“2015-12-27T11:02:28”未按 JSON 的要求以 ...
- PHP - 传入WebService服务端带中文字符的序列化字串不能反序列化的解决方法
因工作需要,用了web服务,通过远程调用的方式来检索雅虎拍卖数据.前几天遇到一个问题,现在记录一下 客户端: $res = $this->client->call('Get_YahooDa ...
- 51ak带你看MYSQL5.7源码4:实现SQL黑名单功能
博客迁移至: https://www.dboop.com/ 从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 申明:个人Python编程很溜,但是C++还停 ...
- 利用DNS实现SQL注入带外查询(OOB)
根据用于数据检索的传输信道,SQLi可分为三个独立的类别:inference(经典SQL注入),inband(盲注.推理注入.带内注入)和out-of-band 一.什么是OOB out-of-ban ...
- SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入
1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...
随机推荐
- kubernets之Ingress资源
一 Ingress集中式的kubernets服务转发控制器 1.1 认识Ingress的工作原理 注意:图片来源于kubernets in action一书,如若觉得侵权,请第一时间联系博主进行删 ...
- XSS - Labs 靶场笔记(下)
Less - 11: 1.观察界面和源代码可知,依旧是隐藏表单 2.突破点是 $str11=$_SERVER['HTTP_REFERER']; (本题为HTTP头REFERER注入) 3.因此构造pa ...
- linux多路径(multipath)
https://www.itread01.com/articles/1475909423.html
- ABAP中SQL语句,指定索引(oracle)
①常用的两种方法: 1.指定使用全表扫描:%_HINTS ORACLE 'FULL(table_name)' 表示扫描整个表 2.指定索引:%_HINTS ORACLE 'INDEX("ta ...
- HTTP协议相关知识整理:
http协议简介 超文本传输协议:是一种用于分布式.协作式和超媒体信息系统的应用层协议. 一次请求一次响应之后断开连接(无状态,短连接) 分析http请求信息格式 http工作原理 以下是 HTTP ...
- Databricks 第10篇:Job
Job是立即运行或按计划运行notebook或JAR的一种方法,运行notebook的另一种方法是在Notebook UI中以交互方式运行. 一,使用UI来创建Job 点击"Jobs&quo ...
- libuv工作队列
目录 1.说明 2.API 2.1.uv_queue_work 2.2.uv_cancel 3.代码示例 1.说明 libuv 提供了一个线程池,可用于运行用户代码,libuv 中的工作队列中的任务会 ...
- 大型 web 前端架构设计-面向抽象编程入门
https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ 大型 web 前端架构设计-面向抽象编程入门 曾探 腾讯技术工程 2021-01-04 依赖反转 ...
- Spring框架入门浅析
一.Spring Bean的配置 在需要被Spring框架创建对象的实体类的类声明前面加注解:```@component```.这样在Spring扫描的时候,看到该注解就会在容器中创建该实体类的对象. ...
- Python程序中首行#!/usr/bin/env python的作用
1.通常我们在pycharm中写程序的时候会在首行写上#!/usr/bin/env python 如: #!/usr/bin/env python3#-*-coding: UTF-8 -*-#Auth ...
