Sqli-labs之Less-24(二次注入)

2023-10-27

                                                    Less-24

POST型基于存储的二次注入

随意输入

点击:Forgot your password?

翻译:如果你忘记了密码,去黑掉它。

点击:New User click here?

注册用户。

尝试注册一个用户: 用户:test1 密码:test1

翻译:

用户成功
创建
重定向到5中的登录页面......
如果未重定向,请点击右上角的主页(HOME)按钮

尝试注册过后的用户进行登录:

尝试更改用户test1的密码为tese2

 

从上面的情况中我们可以分析出:

  • 登录界面,具有登录功能,同时有忘记密码注册的链接。
  • 注册界面,具有注册功能。
  • 忘记密码界面,返回一张图片
  • 修改密码界面,登陆成功后,1.显示用户名,2.可以重置密码,3.有登出的链接。
  • 登录失败界面,返回一张图片。

综上,可推断出注入点在更改密码上。

分析下源文件:

这三个文件与数据库进行交互,剩下的五个文件分别对应上述几个显示的界面。

代码审计:

这几个文件出现频率最高的代码是:

session_start()

可参考php手册

session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

session_start的作用是开启$_SESION,需要在$_SESION使用之前调用。
PHP $_SESION 变量用于存储关于用户会话(session)的信息

接着分析:

1. login.php

PHP mysql_real_escape_string() 函数

定义和用法

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

语法

mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

说明

本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()

可以看到代码对username和passseord的特殊字符进行了转义,想要在这里进行注入就得采取“绕过”,但这不是我们这道题想要的解法,我们就当这里无法注入好了,也就是说在登录页面login.php处无法进行注入。

登录成功后创建sessioncookiesession存储username,但session是建立在服务器上的对象,所以无法获取;cookie只是个登录标记,几乎没有任何用处。(会话15分钟后过期)

2. login_create.php

创建用户前先查询是否已经存在该账号,若存在则弹出一个对话框,不存在就创建。

这里要注意到:mysql_escape_string()mysql_real_escape_string()是不同的,前者早在PHP 5.3中被弃用。

mysql_escape_string() 并不转义 % 和 _。 本函数和 mysql_real_escape_string() 完全一样,除了mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string()并不接受连接参数,也不管当前字符集设定。。

也就是说:mysql_escape_string()没办法判断当前的编码,mysql_real_escape_string()之所以能够防注入是因为同时指定了服务端的编码和客户端的编码。

综上:username,password,re_password 这三个字段所传递的字符是要被转义的。

pass_change.php

重点来了:

session中直接获得了当前用户名,且被直接用于更新语句并未做检查。
从根本上来说,插入数据时没有过滤,只是做了转义处理。
当前用户名中含有注释,便可以修改当前用户名中包含的另一用户的密码,例如注册用户:Dumb'-- # 那么他就可以修改用户Dunb的密码。

     本关为二次排序注入的示范例。二次排序注入也称为存储型的注入,就是将可能导致
sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发 sql 注入。
二次排序注入思路:
1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交 HTTP 数据报文请求到服务
端进行处理,提交的数据报文请求中可能包含了黑客构造的 SQL 语句或者命令。
2. 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的
数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响
应。
3. 黑客向服务端发送第二个与第一次不相同的请求数据信息。
4. 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库
中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的 SQL 语句或者命令在服
务端环境中执行。
5. 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注
入漏洞利用是否成功。

此例子中我们的步骤是注册一个 Dumb'-- # 的账号,接下来登录该帐号后进行修改密码。此时修改的就是 Dumb 的密码

注入点在修改密码处

UPDATE users SET PASSWORD='$pass' WHERE username='$username' and password='$curr_pass'

要将其变为:

UPDATE users SET PASSWORD='$pass' WHERE username='$username'-- # and password='$curr_pass'

也就是执行了:

UPDATE users SET PASSWORD='新密码' WHERE username='Dumb'

步骤演示:

1.初始数据库:



2.注册 Dumb'-- # 账号,密码我们随便设置,这里设置为 110

3.注意此时的数据库中出现了 Dumb'-- # 的用户,还要注意此时原账户Dumb的密码为Dumb

4.登录账户 Dumb'-- #,并修改密码为220

  

5.查看修改后数据库:

6.使用账户Dumb,密码220 进行登录:

  

成功 HACKED  如果Dumb是管理员账户的话,那么。。。嘿嘿

总结:

对于这道题的更像是 PHP代码审计,如果是人工直接注入的话,难度还是蛮大的,因为你不知道他的代码是怎样设计的,只是靠猜的话,所耗费的时间将是漫长的,所以要多积累经验。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sqli-labs之Less-24(二次注入) 的相关文章

  • 基于MFC-MSComm控件的PC与单片机串口通信编程

    作者 uedsr542 来源 51hei 使用工具Visual C 6 0 9针RS232串口线一条 P0口带上拉的LED的51最小系统版 打开软件 新建 gt MFC AppWizard exe 再填写工程名和路径 gt 基于对话框 不需
  • Java项目数据迁移怎么做的

    Java项目数据迁移怎么做的 1 A表到B表找字段映射 即两个不同库表先做好数据字段的对应和补齐 2 代码程序 java 做功能 从一个数据库表中读出数据 然后写到另一个数据库表中 技术历练点 多线程 使用线程池 确定核心线程池的数量 使用
  • Android沉浸式和状态栏颜色的修改

    一 前言 关于沉浸式实现的方法网上已经有很多了 但是也有点良莠不齐 在遇到实际项目中的问题之后还是需要查阅大量的博客来对问题进行查证 本博客主要是在解决沉浸式的几个问题之后 对沉浸式的一点总结方便后面再次遇到同样问题时 能够很快的查阅而不至
  • 深度优先找出图中顶点U到顶点V的所有简单路径【C/C++】

    目录 前言 步骤如下 1 对于邻接矩阵 1 1 创建邻接矩阵 1 2 初始化path数组和找到顶点U和顶点V的下标 1 3 FindPath 函数 1 4 测试结果 1 5 改进代码 感谢 果冻的光滑 的指导和帮助 2 对于邻接表 2 1
  • java消息的确认模式

    1 AUTO ACKNOWLEDGE 从消息生产者角度 发送消息后就开始阻塞 直到从消息服务器收到回复 期间如发生异常则认为消息未被传送 从消息服务器角度 非持久消息在接受到消息后通知生产者 并将消息存入内存 持久性消息在接受道消息后先存入
  • mac系统安装搭载Windows系统虚拟机方法教程

    我们都知道macOS系统虽然相对windows系统而言更稳定 但macOS系统中可使用的软件数量较windows系统而言要少很多 对于macOS系统应用少的问题 我们可以使用虚拟机来解决 那么 苹果虚拟机好用吗 整体而言是可以的 苹果虚拟机
  • excel 导出:

    导出 1 模板导出 1 所需jar
  • 【Pytorch with fastai】第 4 章 :底层训练数字分类器

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • !important的使用

    前端css样式 使用的是vue 框架 本身的 css样式中与自定义的名称重复 导致样式被覆盖 原自定义样式 修改后自定义样式 其中 import 具有优先权 提升指定样式规则的应用优先权 参考文章 https www xuebuyuan c
  • 利用ESP8266_01做一个远程控制的智能插座

    手头有一块ESP8266 01WIFI模块 是前段时间在网上买arduino套件时送的 套件中还有一个单路继电器 反正这些东西折腾完了以后也没什么用 就将网上的资料汇总了一下 做了一个远程控制的智能排插 功能非常简单 就是通过手机远程控制排
  • 在Windows上搭建Go开发环境

    Go语言是由谷歌开发的一个高性能 跨平台的编程语言 安装Go 首先先来安装一下Go语言的SDK 目前Go语言的最新版本为Go 1 8 3 Go下载页面列出了各种操作系统的安装包 如果选择Windows MSI安装包的话 会将Go安装到C G
  • 开源库源码分析:Okhttp源码分析(一)

    开源库源码分析 OkHttp源码分析 导言 接下来就要开始分析一些常用开源库的源码了 作为最常用的网络请求库 OkHttp以其强大的功能深受Android开发者的喜爱 比如说我 还有对该库进行二次封装而成的热门库 比如说Retrofit 本

随机推荐

  • Unity 如何实现音频播放后的回调

    using System using System Collections using System Collections Generic using UnityEngine public class soundManager MonoB
  • IDEA创建Maven项目报错- Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model】

    1 报错 今天下了最新版本的maven 在idea中配置好maven好 拉取依赖报错了 2 查看报错日志 报错如下 1 Error injecting constructor java lang NoSuchMethodError org
  • python代码编译反编译

    一 编译 自带模块py compile 可以把 py代码编译成pyc文件 py文件中导入使用 import py compile py compile compile r code01 py 在终端中运行 python m py compi
  • 常见问题记录

    执行数据迁移时报如下错误 sqlalchemy exc IntegrityError pymysql err IntegrityError 1215 Cannot add foreign key constraint 解决方案 创建外键的字
  • JavaMail 发送的邮件附件名乱码

    情景还原 同事收到系统发出的一封邮件 邮件里的附件名称本该是 模板 周汇报 2 docx却显示成了 UTF 8Q E3 80 90 UTF 8Q 2 docx 问题探究 第一反应是附件编码的问题 于是把 MimeMessageHelper
  • 静态链表

    代码来源 晴神 算法笔记 静态链表问题通用解题模板 定义静态链表 struct Node typename data int next XXX node size 使用静态链表时 结构体类型名和结构体变量名不要相同 初始化 XXX初始化为正
  • [Python人工智能] 三十二.Bert模型 (1)Keras-bert基本用法及预训练模型

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章结合文本挖掘介绍微博情感分类知识 包括数据预处理 机器学习和深度学习的情感分类 这篇文章将开启新的内容 Bert 首先介绍Keras bert库安装及基础
  • 新的RBAC:基于资源的权限管理(Resource-Based Access Control)

    新的RBAC 基于资源的权限管理 Resource Based Access Control 本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的 同时将讨论一种更好的权限管理方式 What is a Role
  • python 模块和包

    一 模块 1 什么是模块 常见的场景 一个模块就是一个包含了python定义和声明的文件 文件名就是模块名字加上 py的后缀 但其实import加载的模块分为四个通用类别 1 使用python编写的代码 py文件 2 已被编译为共享库或DL
  • RocketMQ安装

    目录 1 安装配置jdk8 1 1将文件jdk 8u212 linux x64 tar gz上传到 root目录 1 2 解压缩jdk压缩文件 1 3 配置jdk环境变量 1 4验证jdk是否安装成功 2 安装RocketMQ 2 1下载r
  • nginx   client_body_buffer_size

    这里分享一个关于 nginx client body buffer size 参数的解决案例 描述 前端同事反馈 在发POST 请求带参数的时候 过Nginx 会报错 但是单台测试tomcat POST 很正常 看了下请求参数 好大一堆 的
  • [高级数据结构C++] 树状数组(求前缀和,区间和)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • vue项目实现鼠标移入显示表格,移出隐藏表格

    1 生成ul li列表 ul class ul list style margin bottom 10px li item planNm li ul 2 需要显示的表格 div style display none font size 14
  • mmdeploy快速上手

    mmdeploy快速上手 若要将使用 openmmlab 的框架 如mmdet mmcls 等训练的模型进行快速部署 同样来自 openmmlab 的 mmdeploy 无疑是最合适的选择 本文将简单地完成一个 Faster RCNN 模型
  • idea如何导入jar包

    通过添加Libraries的方式引入 1 首先在根目录下创建一个 libs 的目录 2 打开 File gt Project Structure 3 单击 Libraries gt gt Java gt 选择我们导入的项目主目录 点击OK
  • xxl-job远程命令执行漏洞复现

    目录 1 漏洞描述 2 靶场搭建 3 漏洞复现 反弹shell 1 漏洞描述 XXL JOB是一个分布式任务调度平台 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 现已开放源代码并接入多家公司线上产品线 开箱即用 XXL JOB分为a
  • linux查看文件位置

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 查找文件 在linux中 我经常碰到一个问题 就是如何找到某个文件 有时可能是找
  • OkHttp GET 和 POST 的使用

    1 OkHttp 介绍 Android 系统主要提供两种方式来进行 HTTP 通信 HttpURLConnection 和 HttpClient 但是由于 HttpClient 的 API 数量过多 从 Android 2 3 及以后版本中
  • QT MSVC中文编译出错error: C2001: 常量中有换行符

    QT上用MSVC去编译部分含有中文的字符串时会出现编译错误error C2001 常量中有换行符 但用MinGW就不会 需在后面加个正常的字符才能正常编译 但出现乱码了 其编码如下图 明显的看着编码不对 如果想都编译成功 那就需要在设置里把
  • Sqli-labs之Less-24(二次注入)

    Less 24 POST型基于存储的二次注入 随意输入 点击 Forgot your password 翻译 如果你忘记了密码 去黑掉它 点击 New User click here 注册用户 尝试注册一个用户 用户 test1 密码 te