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

Mysql绕过小技巧

上源码。

<?php
$mysqli = new mysqli("localhost", "root", "root", "security");/* check connection */
if ($mysqli->connect_errno) {printf("Connect failed: %s\n", $mysqli->connect_error);exit();
}$mysqli->query("set names utf8");$username = addslashes($_GET['username']);if ($username === 'admin') {die('permission denied');
}/* Select queries return a resultset */
$sql = "SELECT * FROM `users` WHERE username='{$username}'";if($result = $mysqli->query($sql)) {printf("Select returned %d rows.\n", $result->num_rows);while($row = $result->fetch_array(MYSQLI_ASSOC)){var_dump($row);}$result->close();
}else{var_dump($mysqli->error);
}$mysqli->close();

 这是一个基于utf-8的一道练习题。

$username = addslashes($_GET['username']);

首先这句是对username的值进行过滤,过滤掉你的单引号。

if ($username === 'admin') {

    die('permission denied');

}

这句如果你的username等于admin,就进入permission denied,意味着失败。

所以我们现在想的就是如何去绕过这些过滤,就需要在admin后面加一些字符,让程序觉得你不是admin让数据库觉得你又是admin就行。

为什么加了一个c2就可以实现绕过了呢。

造成这种的原因其实是字符集不同导致的。

当我门设置了set names utf8的时候,mysql的字符集从utf-8-->utf-8-->latin1。

这就导致出现了字符集的差异。

比如佬这个字,在utf-8中的编码是\%e4\%bd\%ac。

将这三个一个一个的挨个写进url中运转。

127.0.0.1/web4.php?username=admin%e4

127.0.0.1/web4.php?username=admin%e4%bd

127.0.0.1/web4.php?username=admin佬

当%ac加进去的时候就变成了佬字,前两个url都能成功的绕过,最后一个不行,是因为latin1不识别汉字,导致无法绕过,而utf-8里,一个汉字是三个字节,而当这个汉字的字节不全时,比如上面两个url,就会把admin后面的字符给无视掉,所以实现了绕过。

这是另外的绕过方式,c2这个是因为:

UTF-8编码是变长编码,可能有1~4个字节表示:

  1. 一字节时范围是[00-7F]

  2. 两字节时范围是C0-DF

  3. 三字节时范围是E0-EF[80-BF]

  4. 四字节时范围是F0-F780-BF

c2属于两个字节的范围,所以依然不完全,也让mysql无视掉了。

http://www.lryc.cn/news/420953.html

相关文章:

  • 气象大数据案例项目(求各气象站的平均气温)
  • 博客摘录「 一个ModBus RTU程序(支持01、02、03、05、06、15、16功能码)」2024年4月19日
  • Vue3学习笔记第一天
  • C++之类与对象(完结撒花篇)
  • 代码质量的守护者:Python静态代码分析工具的集成之道
  • JVM -- 类加载器
  • OLAP引擎之StarRocks
  • 基于微信小程序的小区业主服务系统(源码+论文+部署讲解等)
  • C++ | Leetcode C++题解之第327题区间和的个数
  • C# Winform 多窗体切换方式一
  • 笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU
  • GitLab-CI/CD指南
  • io目录操作学习
  • Ant-Design-Vue
  • 2024互联网暑期实习面经和流程记录分享
  • 风云崛起之拉氏变换和拉式逆变换
  • 1、.Net UI框架:WinUI - .Net宣传系列文章
  • 计算机的错误计算(五十九)
  • 【数学分析笔记】第1章第1节:集合(1)
  • 计算机毕业设计 校园失物招领网站 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • GIT指令大全详解
  • ECCV2024,清华百度提出ReSyncer:可实现音频同步嘴唇动作视频生成。
  • 论文笔记:YOLOv8-QSD 自动驾驶场景小目标检测算法
  • Vue.js状态管理:Vuex与Pinia的比较
  • OJ题目【栈和队列】
  • [shell][git]git将当前分支的HEAD指针重置到最后一次提交的状态
  • 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(六)卡尔曼滤波器二:图解卡尔曼滤波器;卡尔曼滤波器公式理解;面试答法;
  • 高性能日志系统 日志输出模块逻辑
  • haproxy基础
  • C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)