码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • iwebsec靶场 SQL注入漏洞通关笔记13-二次注入


    系列文章目录

    iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注)_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记4- sleep注入(时间型盲注)_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记5- updatexml注入(报错型盲注)_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记6- 宽字节注入_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记7- 空格过滤绕过_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记8- 大小写过滤注入_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记9- 双写关键字绕过_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记10- 双重url编码绕过_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记11-16进制编码绕过_mooyuan的博客-CSDN博客

    iwebsec靶场 SQL注入漏洞通关笔记12-等价函数替换绕过_mooyuan的博客-CSDN博客


    目录

    系列文章目录

    前言

    一、二次注入

    1.漏洞原理

    2.漏洞原因

    3.二次注入思路

    二、源码分析

    1.注册界面index.php

    2.找回密码 reset.php

    3.确定渗透目标

    4.二次注入渗透分析

    三、渗透获取admin账号密码

    1.注册

     2.获取admin密码

    四、渗透获取user1账号密码

    1.注册

    2.找回密码

    总结


    前言

    打开靶场,url为 http://192.168.71.151/sqli/13/index.php 如下所示是一个注册界面,参数为用户名、密码和邮箱,源码猜测是SQL insert语句,将其插入到数据库的某个表中。

     点击通过邮箱找回密码进入如下界面,根据功能应该是通过邮箱找到用户名和密码,并展示出来

    一、二次注入

    1.漏洞原理

    SQL二次注入漏洞指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。相对而言这是一种较难发现的SQL安全漏洞形式。

    2.漏洞原因

    造成二次SQL注入漏洞的原因如下:网站对在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身还是脏数据(恶意构造的SQL语句)。

    3.二次注入思路

        1.黑客通过insert语句功能的web环境构造构造二次注入命令,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
        2.服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
        3.黑客在查询功能的web环境中再次向服务端发送第二个请求数据信息。
        4.服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行,从而形成二次注入攻击。
        5.服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。

    二、源码分析

    1.注册界面index.php

    本关卡的源码如下,index.php包含注册功能,在注册insert的SQL语句调用前,可以看到对用户名、密码和邮件均调用了addslashes函数进行处理,这是二次注入漏洞存在的条件之一。

    关于注册过滤的相关源码如下所示

    1. $username=addslashes($_POST['username']);
    2. $password=addslashes($_POST['password']);
    3. $email=addslashes($_POST['email']);
    4. $sql="INSERT INTO `sqli` (`username` ,`password` ,`email`) VALUES ('$username', '$password', '$email');";
    5. $row = mysql_query($sql);
    6. if($row){
    7. echo "";
    8. }else{
    9. echo "";
    10. }

    基于二次注入的条件,由于参数username、password和email均有addslashes处理,那么在逻辑上我们 三处都可以使用万能注入语句' or 1=1 # 进行尝试。不过到底选择使用哪个,我们还要分析找回邮箱部分的源码,以确定到底使用哪个注册参数作为二次注入的点。

    2.找回密码 reset.php

    找回密码的reset.php的源码如下所示,功能为先通过邮箱查询到用户名,再根据用户名把密码输出出来,于是与注册源码结合,就可以判断出来username为二次注入点。

    相关基于SQL处理流程部分源码如下所示

    1. if($_POST['sub']){
    2. $email=addslashes($_POST['email']);
    3. $sql="select * from sqli where email='{$email}'";
    4. $row=mysql_query($sql);
    5. if($row){
    6. $rows = mysql_fetch_array($row);
    7. $username=$rows['username'];
    8. $sql2="select * from sqli where username='$username'";
    9. $row=mysql_query($sql2) or die(mysql_error());
    10. $rows = mysql_fetch_array($row);
    11. if($rows){
    12. echo "

      您的用户名是 ".$rows['username']."


      ";
    13. echo "

      您的密码是 ".$rows['password']."


      ";
    14. }else{
    15. echo "";
    16. }
    17. }

    3.确定渗透目标

    根据源码我们可以判断使用的是sqli表的内容,那么进入到iwebsec的docker容器环境中,执行如下命令来获取到iwebsec数据库中sqli表的内容

    1. mysql -u iwebsec -p # 输入密码iwebsec
    2. use iwebsec
    3. select * from iwebsec

    如下图所示,红框中admin账号的密码就是我们想通过SQL注入爆出来的内容,也是我们打算渗透的内容

    4.二次注入渗透分析

    先来考虑一下到底我们想爆出admin账户的密码,就是需要利用找回密码界面的SQL语句,将username作为二次注入点

    select * from sqli where username='$username'

    如上所示,此SQL语句的闭合方式为单引号,我们的目标是admin账号,那么构造SQL注入语句,此时username可以为如下内容(其中#和--空格为注释)

    1. admin'#
    2. admin'-- -

    这时候我们再回到注册界面的SQL语句,由于username参数在SQL调用前执行了addslashes函数处理,那么我们如果在注册时username就构造为万能注入语句(admin'# 或者admin' -- -),就可以保存到数据库的sqli表中,从而形成二次注入

    1. $username=addslashes($_POST['username']);
    2. $password=addslashes($_POST['password']);
    3. $email=addslashes($_POST['email']);
    4. $sql="INSERT INTO `sqli` (`username` ,`password` ,`email`) VALUES ('$username', '$password', '$email');";

    三、渗透获取admin账号密码

    1.注册

    在注册界面usernmae处填精心构造的

    1. amdin'#

     密码则随意填写,邮箱填ljn,接下来进行注册

    点击注册后,提示注册成功

    这时候我们在MySQL数据库里查询,可知注册成功

     2.获取admin密码

    进入找回邮箱界面,输入刚刚注册admin'#账号时填写的邮箱ljn,点击OK后爆出了admin账号的用户名和密码,如下所示渗透成功

    四、渗透获取user1账号密码

    1.注册

    为了与获取admin做区分,这次使用--空格的方式构造注入语句,用户名填user1-- - 密码随意,邮箱填llllll

    点击注册后提示如下

    注册成功后数据库信息如下所示

    2.找回密码

    进入密码找回界面输入llllll


    输出user1账号的用户名和密码pass1

    总结

    SQL二次注入主要分析几个内容

    (1)注入点是什么?iwebsec的第13关关卡的注入点为username

    (2)注入点闭合方式与注入?这部分是普通的字符型注入,闭合方式为单引号

    (3)是否满足二次注入?很明显通过源码分析符合二次注入条件

    了解了如上信息就可以针对性进行SQL二次注入渗透,构造二次注入的语句,从而成功的爆破到想要的账号的密码。

  • 相关阅读:
    java知识3-----核心2-面向对象高级 续3
    Flutter 应用程序性能优化建议
    线程的概念及使用
    RocketMq简介及安装、docker安装rocketmq、安装rocketmq可视化管理端
    turf.js API功能讲解
    曝 iPhone 设计主管明年 2 月离职,将联手 OpenAI 开发一款新 AI 硬件?
    Spring Boot单元测试
    解决Nacos服务器连接问题:一次完整的排查经验分享
    element-ui+vue上传图片和评论现成完整html页面
    Windows bat关于Java程序的常用命令
  • 原文地址:https://blog.csdn.net/mooyuan/article/details/128048300
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号