梨子带你刷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. ...
随机推荐
- 使用NIM Server网络半自动安装AIX系统
一.NIM配置 1.安装NIMServer前准备 1.1.配置IP地址 # ifconfig –a #检查当前IP地址# # smitty mktcpip #设置IP地址# 选择第一块网卡(插网线的网 ...
- Java程序入门
编写Java源程序 在d:\day01 目录下新建文本文件,完整的文件名修改为HelloWorld.java ,其中文件名为HelloWorld ,后缀名必须为.java . 用记事本打开 在文件中键 ...
- Q-Q图原理详解及Python实现
[导读]在之前的<数据挖掘概念与技术 第2章>的文章中我们介绍了Q-Q图的概念,并且通过调用现成的python函数, 画出了Q-Q图, 验证了Q-Q图的两个主要作用,1. 检验一列数据是否 ...
- es6语法详解
什么是ECMAScript? ECMAScript是浏览器脚本语言的规范,而我们熟知的js语言,如JavaScript则是规范的具体实现.es6就好比Java的jdk. 一.es6语法详解:let声明 ...
- SQLSERVER 修改数据实例的排序规则
SQL Server服务器修改排序规则的方法 操作及验证步骤: 1 登录数据库后,查看当前安装数据库默认排序规则的两种方式 方式一.使用SQL Server 2014 Management Studi ...
- Python+Selenium+Unittest实现PO模式web自动化框架(7)
1.TestDatas目录的功能 TestDatas目录下存放的是测试数据,比如:登录功能的测试用例数据. # --^_^-- coding:utf-8 --^_^-- # @Remark:登录测试数 ...
- ensure that both new and old access_token values are available within five minutes, so that third-party services are smoothly transitioned.
WeChat public doc https://developers.weixin.qq.com/doc/offiaccount/en/Basic_Information/Get_access_t ...
- 熟悉而陌生API:Promise
前言 ES6 发布到现在差不多有5年时间了.在这5年时间里ES6摧枯拉朽般的将现代前端"改朝换代",Promise是其中"大将"般的存在,影响着无数的前端库和A ...
- Language Guide (proto3) | proto3 语言指南(十三)JSON映射
JSON Mapping - JSON映射 Proto3支持JSON中的规范编码,使得在系统之间共享数据更加容易.下表按类型对编码进行了描述. 如果JSON编码的数据中缺少一个值或者它的值为null, ...
- Spring 启动脚本
if [ $# != 3 ];then echo 'option-1: start,stop or restart.' echo 'option-2: 请传入jar路径' echo 'option-3 ...
