二次注入——sqli-labs第24关
时间:2022-07-22
本文章向大家介绍二次注入——sqli-labs第24关,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第24关
提示说:please login to continue,请登录以继续。 没有账号怎么登录? 当然是选择注册
盲猜会有个admin的账号,所以注册一个admin '#的账号。密码是12345
(上帝视角)此时数据库里admin的密码是admin
登录刚刚注册的账号
然后为admin '#修改密码为123
修改成功(此时真的是修改admin '#的密码吗)
(又一次上帝视角)进入数据库,发现admin的密码成了123,而admin '#的密码并没有重置
原理
这就是二次注入,它的原理是:
(1)后端(PHP)代码对语句进行了转义
(2)保存进数据库(mysql)时没有转义,是原语句
简而言之就是数据库对自己存储的数据非常放心,而用户恰恰向数据库插入了恶意语句。
解析
比如前面所注册的admin '#
账号,在注册时,后端对其进行了转义( addslashes() 或者mysql_real_escape_string和mysql_escape_string 等),'#
被转义成了其他的东西,所以一次注入无效。
但是在保存进数据库的时候,还是admin '#
。
那么修改密码时的语句如下:
update users set password='123' where username='admin '#'
所以你以为修改的是admin '#
的账号,但是数据库理解成要修改密码的账号是admin
。
防范
至于如何防范二次注入也很简单: 一碗水端平,后端进行了转义,数据库也同样进行转义。
- 如何使用Java代码访问HDFS.docx
- Django CSRF Bypass (CVE-2016-7401) 漏洞分析
- 如何使用Cloudera Manager禁用YARN的HA
- Web Worker 中的 importScripts 和 baseHref 同源策略绕过问题
- 如何使用Java代码访问CDH的Solr服务
- Safari UXSS漏洞分析(CVE-2016-4758)
- Sqoop抽取Hive Parquet表数据到MySQL异常分析
- Hue中使用Oozie创建Ssh工作流时sudo命令执行失败问题分析
- [译]Safari URL重定向漏洞(CVE-2016-4585)利用分析
- Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)
- 百篇(5):FeignClient 在不同场景中的应用
- 如何使用Hue上创建一个完整Oozie工作流
- MySQL远程代码执行/权限提升漏洞的分析与实践(CVE-2016-6662)
- 如何在CDH集群上部署Python3运行环境及运行Python作业
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发实现控件双击事件的监听接口封装类
- Android普通应用升级为系统应用并获取系统权限的操作
- 使用kotlin协程提高app性能(译)
- Android中实现ping功能的多种方法详解
- Android开发获取手机内网IP地址与外网IP地址的详细方法与源码实例
- 在Android源码中编译出指定jar包的操作
- Android Studio 视频播放失败 start called in state1 异常怎么解决
- 解决Android 源码编译错误的问题
- Android 实现列表倒计时功能
- Android 多渠道(友盟)打包教程分享
- Android Broadcast 和 BroadcastReceiver的权限限制方式
- [GO] 变参函数-GO中函数传递变长参数
- 基于Android-Skin-Loader实现换肤效果
- 通过 Nginx 实现最简单的Nas服务器(文件分享)
- 解决Android Studio xml 格式化不自动换行的问题