开始挑战第二十四关(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系列第二十四关(二阶注入)的更多相关文章

  1. SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)

    开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...

  2. SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A

    开始挑战第二十六关(Trick with comments and space) 0x1看看源代码 (1)过滤了#  or and  /**/  /  \ ,通过判断也过滤了空格 (2)这样一来只能看 ...

  3. SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)

    开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...

  4. SQL注入之Sqli-labs系列第二十八关(过滤空格、注释符、union select)和第二十八A关

    开始挑战第二十八关(Trick with SELECT & UNION) 第二十八A关(Trick with SELECT & UNION) 0x1看看源代码 (1)与27关一样,只是 ...

  5. SQL注入之Sqli-labs系列第十四关(基于双引号POST报错注入)

    开始挑战第十四关(Double Injection- Double quotes- String) 访问地址,输入报错语句 '  ''  ')  ") - 等使其报错 分析报错信息 很明显是 ...

  6. 第二十四章 springboot注入servlet

    问:有了springMVC,为什么还要用servlet?有了servlet3的注解,为什么还要使用ServletRegistrationBean注入的方式? 使用场景:在有些场景下,比如我们要使用hy ...

  7. WP8.1学习系列(第二十四章)——Json解析

    .net已经集成了json解析,类名叫DataContractJsonSerializer DataContractJsonSerializer 类型公开以下成员. 构造函数     名称 说明 Da ...

  8. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  9. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

随机推荐

  1. 安卓——Handler延迟跳转

    //声明控制对象 Handler handler =new Handler(){ @Override public void handleMessage(Message msg) { super.ha ...

  2. Oracle DB 使用子查询来解决查询

    • 定义子查询 • 描述子查询可以解决的问题类型 • 列出子查询的类型 • 编写单行和多行子查询   • 子查询:类型.语法和准则 • 单行子查询: – 子查询中的组函数 – 带有子查询的HAVING ...

  3. 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 ...

  4. 绘图之EasyUI+Highcharts+Django

    前言: 在web开发过程中经常会出现图表展示数据的业务需求,如何把数据通过图表的形式,展示在页面上呢?本文将结合EasyUI.Highcharts.Django做一个简单的图表展示web应用: 一.E ...

  5. MySQL安装教程(mysql5.6_bundle)

    1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...

  6. Redis在windows下的安装下载

    1买个mac和台式电脑安装个Linux系统 2教程见:https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html    powerS ...

  7. Mybatis之trim标签的理解

    最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里的解释,太宽泛,还是不能理解: trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其 ...

  8. gensim做主题模型

    作为Python的一个库,gensim给了文本主题模型足够的方便,像他自己的介绍一样,topic modelling for humans 具体的tutorial可以参看他的官方网页,当然是全英文的, ...

  9. Web API之路由浅谈

    Web API的路由,是指明接口地址的方向,是照亮获取数据路上的灯塔,其重要性不言而喻. 本篇文章以vs2015为例,一步步说明路由的创建及使用,其中包括默认路由.自定义路由和特性路由. 一.默认路由 ...

  10. idea没有错误出现红色波浪线怎么去掉?

    在有波浪线的代码上Alt+Enter,弹出的菜单中第一项的子菜单选择disable inspection