当前位置: 首页 > news >正文

SQL二次注入

目录

1.什么是二次注入?

2.二次注入过程

2.1寻找注入点 

2.2注册admin'#用户

2.3修改密码


1.什么是二次注入?

当用户提交的恶意数据被存入数据库后,因为被过滤函数过滤掉了,所以无法生效,但应用程序在从数据库中拿出该用户名时没有对'和#进行转义,导致将密码的检测注释了,虽然看似后端代码将我们输入的'进行了转义,但是当将输入的数据存储到数据库中时,会将'加上存储的(数据库存储数据的特征),这样就实现了二次注入,也叫做存储型SQL注入。

2.二次注入过程

登录页面

注册页面 

 修改密码页面

2.1寻找注入点 

进行一些简单的测试,发现都无法成功 

查看后端代码发现,后端代码对我们输入的登录用户名和密码进行了过滤,因此无法注入

function sqllogin(){$username = mysql_real_escape_string($_POST["login_user"]);  //过滤了单双引号$password = mysql_real_escape_string($_POST["login_password"]);//过滤了单双引号$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
//$sql = "SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'";$res = mysql_query($sql) or die('You tried to be real smart, Try harder!!!! :( ');$row = mysql_fetch_row($res);//print_r($row) ;if ($row[1]) {return $row[1];} else {return 0;}}

但是发现pass_change.php文件中,修改密码时,当从数据库中找出所修改的用户的密码时,没有对username进行过滤,导致出现二次注入点。

if (isset($_POST['submit']))
{# Validating the user input........$username= $_SESSION["username"];$curr_pass= mysql_real_escape_string($_POST['current_password']);$pass= mysql_real_escape_string($_POST['password']);$re_pass= mysql_real_escape_string($_POST['re_password']);if($pass==$re_pass){	$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');$row = mysql_affected_rows();echo '<font size="3" color="#FFFF00">';echo '<center>';

我们是否可以先注册一个类似admin'#的用户,然后当对admin‘#用户进行修改密码时来进行注入呢?话不多说,直接开干

2.2注册admin'#用户

发现可以注册,与我们设想的一样

然后进行登录

顺利登录,此时页面显示YOU ARE LOGGED IN AS admin'#

2.3修改密码

根据pass_change.php文件的代码分析,current password可以随便填写,只要New Password等于Retype Password,程序就会进入if语句中,sql语句就会生效

if (isset($_POST['submit']))
{# Validating the user input........$username= $_SESSION["username"];$curr_pass= mysql_real_escape_string($_POST['current_password']);$pass= mysql_real_escape_string($_POST['password']);$re_pass= mysql_real_escape_string($_POST['re_password']);if($pass==$re_pass){	$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');$row = mysql_affected_rows();echo '<font size="3" color="#FFFF00">';echo '<center>';

此时我们将修改的密码进行提交后,admin'#进入sql语句中,上述sql语句就会变为 

$sql = "UPDATE users SET PASSWORD='$pass' where username='$admin'#' and password='$curr_pass' ";

标红的地方就会被注释掉,就会成功修改admin的密码

此时我们使用admin用户进行登录,测试admin的密码是否被修改

可以见到,我们确实用admin用户成功登录,在这之前我们是不知道admin用户的密码的

这就是sql二次注入,可以利用它来修改任意用户的密码,所以危害是比较大的

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • xtrabackup搭建MySQL 8.0 主从复制
  • Git 如何提交代码
  • 大话C语言:第37篇 联合体
  • 声明式UI语法
  • 使用nginxproxymanager管理nginx
  • 安卓基本布局(上)
  • CCleaner安卓专业版:全方位手机清理工具,极速提升设备性能
  • 环境搭建:如何在 Windows 上安装和配置 Apache Maven 3.9.8
  • python:基于YOLO框架和遥感图像的目标检测
  • 【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证
  • uniapp App地图点击label
  • 在Stable Diffusion中驱动Tesla P40
  • <数据集>柑橘缺陷识别数据集<目标检测>
  • SQL注入实例(sqli-labs/less-8)
  • freeRTOS入门学习-基于STM32F103C8T6最小系统板-使用cubeMX创建一个新的工程
  • es6要点
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • input的行数自动增减
  • k8s如何管理Pod
  • STAR法则
  • ucore操作系统实验笔记 - 重新理解中断
  • 编写高质量JavaScript代码之并发
  • 关于使用markdown的方法(引自CSDN教程)
  • 诡异!React stopPropagation失灵
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何设计一个微型分布式架构?
  • 使用权重正则化较少模型过拟合
  • 数组大概知多少
  • 一文看透浏览器架构
  • 用jQuery怎么做到前后端分离
  • 智能合约开发环境搭建及Hello World合约
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #Ubuntu(修改root信息)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (Java数据结构)ArrayList
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (安卓)跳转应用市场APP详情页的方式
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Linux下编译安装log4cxx
  • (转)Sublime Text3配置Lua运行环境
  • (转)原始图像数据和PDF中的图像数据
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net 6.0--通用帮助类--FileHelper
  • .NET 8.0 中有哪些新的变化?
  • .NetCore 如何动态路由
  • .net反编译工具
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /etc/sudoers (root权限管理)
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)