SQL注入之Sqli-labs系列第二十四关(二阶注入)
开始挑战第二十四关(Second Degree Injections)
0x1 前言
SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 。二次注入不是注入两次的意思,请不要混淆
0x2 什么是二阶注入
二阶注入是指客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令信息。虽然参数在过滤后会添加 “\” 进行转义,但是“\”并不会插入到数据库中,这样就可以利用这个构造一个二次注入。
二阶注入也称为存储型的注入,就是将可能导致SQL注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发SQL注入二次排序注入思
0x3一阶注入和二阶注入区别
一阶注入原理
(1)一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的;
(2)攻击者在http请求中提交非法输入;
(3)应用程序处理非法输入,使用非法输入构造SQL语句;
(4)在攻击过程中向攻击者返回结果。
二阶注入原理:
(1)攻击者在http请求中提交恶意输入;
(2)恶意输入保存在数据库中;
(3)攻击者提交第二次http请求;
(4)为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句;
(5)如果攻击成功,在第二次请求响应中返回结果。
0x4源码分析
(1)首先是login.php中(对登录进行处理的文件)很明显进行了过滤

(2)接下来是login_create.php(对新建用户进行处理的文件),同样进行了过滤

(3)再看pass_change.php,这里四个参数,只过滤了三个,在更改密码时,直接从SESSION里面获取而没有进行任何的过滤,一旦我的用户名有注释符,就可以任意修改其他用户密码

0x5开始注入
(1)首先创建一个代用注释符(#或--+)

(2)看下数据库,成功添加了记录(有人会有疑问,不是单引号进行了转义了吗,是的,虽然转义了,但数据存入数据库中还是单引号,转义只不过是暂时的)

(3)从上图中可以看出管理员的密码为admin, 我们现在来进行修改 先解释下源码中的sql语句
原SQL语句:UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'
修改密码sql语句:UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass'
最后真正执行的sql语句:UPDATE users SET PASSWORD='$pass' where username='admin'
(4)好吧,开始吧,我们利用注册的账户admin'#进行登录,再进到修改密码界面,将123456密码改为000000

SQL注入之Sqli-labs系列第二十四关(二阶注入)的更多相关文章
- SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)
开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...
- SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A
开始挑战第二十六关(Trick with comments and space) 0x1看看源代码 (1)过滤了# or and /**/ / \ ,通过判断也过滤了空格 (2)这样一来只能看 ...
- SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)
开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...
- SQL注入之Sqli-labs系列第二十八关(过滤空格、注释符、union select)和第二十八A关
开始挑战第二十八关(Trick with SELECT & UNION) 第二十八A关(Trick with SELECT & UNION) 0x1看看源代码 (1)与27关一样,只是 ...
- SQL注入之Sqli-labs系列第十四关(基于双引号POST报错注入)
开始挑战第十四关(Double Injection- Double quotes- String) 访问地址,输入报错语句 ' '' ') ") - 等使其报错 分析报错信息 很明显是 ...
- 第二十四章 springboot注入servlet
问:有了springMVC,为什么还要用servlet?有了servlet3的注解,为什么还要使用ServletRegistrationBean注入的方式? 使用场景:在有些场景下,比如我们要使用hy ...
- WP8.1学习系列(第二十四章)——Json解析
.net已经集成了json解析,类名叫DataContractJsonSerializer DataContractJsonSerializer 类型公开以下成员. 构造函数 名称 说明 Da ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
随机推荐
- 安卓——Handler延迟跳转
//声明控制对象 Handler handler =new Handler(){ @Override public void handleMessage(Message msg) { super.ha ...
- Oracle DB 使用子查询来解决查询
• 定义子查询 • 描述子查询可以解决的问题类型 • 列出子查询的类型 • 编写单行和多行子查询 • 子查询:类型.语法和准则 • 单行子查询: – 子查询中的组函数 – 带有子查询的HAVING ...
- Notes for GGplot2: Getting started with ggplot2
Alpha-ma 2016/10/7 1 Introduction of GGplot2 ggplot2 is an R package for producing statistical, or d ...
- 绘图之EasyUI+Highcharts+Django
前言: 在web开发过程中经常会出现图表展示数据的业务需求,如何把数据通过图表的形式,展示在页面上呢?本文将结合EasyUI.Highcharts.Django做一个简单的图表展示web应用: 一.E ...
- MySQL安装教程(mysql5.6_bundle)
1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...
- Redis在windows下的安装下载
1买个mac和台式电脑安装个Linux系统 2教程见:https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html powerS ...
- Mybatis之trim标签的理解
最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里的解释,太宽泛,还是不能理解: trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其 ...
- gensim做主题模型
作为Python的一个库,gensim给了文本主题模型足够的方便,像他自己的介绍一样,topic modelling for humans 具体的tutorial可以参看他的官方网页,当然是全英文的, ...
- Web API之路由浅谈
Web API的路由,是指明接口地址的方向,是照亮获取数据路上的灯塔,其重要性不言而喻. 本篇文章以vs2015为例,一步步说明路由的创建及使用,其中包括默认路由.自定义路由和特性路由. 一.默认路由 ...
- idea没有错误出现红色波浪线怎么去掉?
在有波浪线的代码上Alt+Enter,弹出的菜单中第一项的子菜单选择disable inspection