zoukankan      html  css  js  c++  java
  • 二次注入原理及防御

     

    原理:

    二次注入需要具备的两个条件:

    (1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)

    (2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户

    举例:

    (1)在sqli_libs的第24关,其页面如下所示:

    (2)当我们点击Forgot your password?时,出现提示:

     (3)因此可以尝试在注册页面进行二次注入,首先,我们注册一个账号,名为:admin'#   ,密码为:123456

    (4)注册成功,尝试登录admin‘#  ,然后可以查看一下phpmyadmin内存储情况

     

    (5)而这时的admin原密码是admin,并且两个账号都存储在数据库内的。当我们重新修改admin'#的密码的时候,这里修改为:12345678;可以发现二次注入的威力所在。admin的密码被修改为了:12345678;而admin'#用户的密码并没有发生变化。

    (6)代码审计,尝试分析源码,出现问题的页面很显然是注册页面,与密码修改重置的页面。

    注册用户时:

              仅对特殊字符进行了转义,判断输入两次密码是否一致,然后将用户键入,将数据插入至数据库。

              $sql = "insert into users ( username, password) values("$username", "$pass")"

    这里直接插入了数据

    修改密码时:

    $username= $_SESSION["username"];//直接取出了数据库的数据

    $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";//对该用户的密码进行更新

    $sql = "UPDATE users SET PASSWORD='12345678' where username='admin‘#

     执行成功!

     

    防御:

    (1)对外部提交数据谨慎

    (2)从数据库取数据时,不能轻易相信查询出的数据,要做到同样的转义或是甄别

  • 相关阅读:
    网络时钟同步SOCKET代码
    NTP时间同步之同步时钟要领
    3分钟 Markdown 快速入门(超详细)(Day_33)
    如何在idea中将项目生成API文档(超详细)(Day_32)
    多条件分页 (Day_31)
    常见判断错误 (Day_30)
    HTML 标签隐藏占用空间与不占用空间(Day_29)
    EasyUI_使用datagrid分页 (Day_28)
    (xxx) is not defined at HTMLInputElement.onblur(Day_27)
    EasyUI系列—点击按钮加载tabs_day26
  • 原文地址:https://www.cnblogs.com/cute-puli/p/11145758.html
Copyright © 2011-2022 走看看