• 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

  • 相关阅读:
    android学习十四(android的接收短信)
    C/C++知识要点4——printf函数以及cout的计算顺序
    HDU 5355 Cake(2015多校第六场,搜索 + 剪枝)
    微信错误提示code= -4/微信发送被拒绝
    struts2的validate在使用过程中的一个问题
    28.字符串的排列
    Redis入门经典——The Little Redis Book (翻译)
    POJ 3155 Hard Life(最大密度子图)
    BZOJ 1798 AHOI2009 Seq 维护序列 线段树
    RT-Thread开篇
  • 原文地址:https://www.cnblogs.com/AmoBlogs/p/8683134.html
Copyright © 2020-2023  润新知