WorstFit学习

admin 2025年1月13日09:56:31评论5 views字数 1220阅读4分4秒阅读模式

前言

翻推特时看到Orange的一篇文章:“WorstFit: Unveiling Hidden Transformers in Windows ANSI!”,被标题吸引点进去看看,仔细研读后发现,文章展现了一个新的攻击面,漏洞很精彩。

由于时间有限这里只做一个简单的学习笔记。文中甚至揭露了ElFinder在Windows下的一个后台RCE 0day(ElFinder是一款开源的基于PHP的Web文件管理系统)

原文链接:https://blog.orange.tw/posts/2025-01-worstfit-unveiling-hidden-transformers-in-windows-ansi/

漏洞背景

知识点1

Windows最初用的字符集是ANSI,后来扩展到Unicode字符集,但Windows承诺永远向后兼容,所以现在仍然兼容ANSI字符集。兼容ANSI字符集的方式是,内部有一个API RtlUnicodeStringToAnsiString(或者WideCharToMultiByte)将Unicode字符转换为ANSI字符。我们都知道,Windows下的GetCurrentDirectoryA()使用ANSI字符集,GetCurrentDirectoryW()使用Unicode字符集,也就是说,当传入Unicode字符,并且调用ANSI API时,会在内部调用RtlUnicodeStringToAnsiString(或者WideCharToMultiByte)

知识点2

我们常用的C语言写法

#include<stdio.h>int main(int argc, char* argv[], char* envp[]) {    for (int i = 0; i < argc; ++i)        printf("argv[%d] = %sn", i, argv[i]);}

在编译时会秘密生成函数mainCRTStartup,而mainCRTStartup内部会调用GetCommandLineA,也就是说,当输入是Unicode字符集时,凡是这样写的程序,都有上述漏洞,现今的输入基本都是Unicode字符,这样的话,影响面就很大了,其中包括著名的curl、openssl等

漏洞原理

目前为止都没有问题,可是当代一些新奇的字符如 emojis ✅, áccènted letters, 𝒻𝒶𝓃𝒸𝓎 𝕤𝕪𝕞𝕓𝕠𝕝𝕤 and CJK 匚卄八尺八匚ㄒヨ尺丂 等在转换为ANSI时会产生意想不到的结果,具体而言是,看起来像双引号的U+ff02会被转换为双引号0x0022,也就是说php中的escapeshellarg并不是完全可靠,有了WorstFit,在Windows下是可以绕过的,也就造成了上面说的ElFinder在Windows下的一个后台RCE 0day。这个漏洞看完就感觉很奇妙,具体细节可以去看原文,确实产生了一个新的攻击面。

原文始发于微信公众号(卡卡罗特取西经):“WorstFit”学习

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月13日09:56:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WorstFit学习https://cn-sec.com/archives/3623445.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息