Skip to content

Commit 7e48e12

Browse files
authored
Merge pull request rapid7#20716 from bcoles/linux-riscv-prepends
Add Linux RISC-V 32-bit/64-bit prepends
2 parents d66e93a + a5e3a5e commit 7e48e12

File tree

4 files changed

+156
-0
lines changed

4 files changed

+156
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#
2+
# Linux RISC-V 32-bit prepends
3+
#
4+
module Msf::Payload::Linux::Riscv32le::Prepends
5+
include Msf::Payload::Linux::Prepends
6+
7+
def prepends_order
8+
%w[PrependSetresuid PrependSetreuid PrependSetuid PrependSetresgid PrependSetregid PrependSetgid]
9+
end
10+
11+
def appends_order
12+
%w[AppendExit]
13+
end
14+
15+
def prepends_map
16+
{
17+
# setuid(0)
18+
'PrependSetuid' => [
19+
0x00000513, # li a0,0 # uid = 0
20+
0x09200893, # li a7,146 # __NR_setuid
21+
0x00000073 # ecall
22+
].pack('V*'),
23+
24+
# setreuid(0, 0)
25+
'PrependSetreuid' => [
26+
0x00000513, # li a0,0 # ruid = 0
27+
0x00000593, # li a1,0 # euid = 0
28+
0x09100893, # li a7,145 # __NR_setreuid
29+
0x00000073 # ecall
30+
].pack('V*'),
31+
32+
# setresuid(0, 0, 0)
33+
'PrependSetresuid' => [
34+
0x00000513, # li a0,0 # ruid = 0
35+
0x00000593, # li a1,0 # euid = 0
36+
0x00000613, # li a2,0 # suid = 0
37+
0x09300893, # li a7,147 # __NR_setresuid
38+
0x00000073 # ecall
39+
].pack('V*'),
40+
41+
# setresgid(0, 0, 0)
42+
'PrependSetresgid' => [
43+
0x00000513, # li a0,0 # rgid = 0
44+
0x00000593, # li a1,0 # egid = 0
45+
0x00000613, # li a2,0 # sgid = 0
46+
0x0aa00893, # li a7,170 # __NR_setresgid
47+
0x00000073 # ecall
48+
].pack('V*'),
49+
50+
# setregid(0, 0)
51+
'PrependSetregid' => [
52+
0x00000513, # li a0,0 # rgid = 0
53+
0x00000593, # li a1,0 # egid = 0
54+
0x04700893, # li a7,71 # __NR_setregid
55+
0x00000073 # ecall
56+
].pack('V*'),
57+
58+
# setgid(0)
59+
'PrependSetgid' => [
60+
0x00000513, # li a0,0 # gid = 0
61+
0x02e00893, # li a7,46 # __NR_setgid
62+
0x00000073 # ecall
63+
].pack('V*')
64+
}
65+
end
66+
67+
def appends_map
68+
{
69+
# exit(0)
70+
'AppendExit' => [
71+
0x00000513, # li a0,0 # exit code = 0
72+
0x05d00893, # li a7,93 # __NR_exit
73+
0x00000073 # ecall
74+
].pack('V*')
75+
}
76+
end
77+
end
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#
2+
# Linux RISC-V 64-bit prepends
3+
#
4+
module Msf::Payload::Linux::Riscv64le::Prepends
5+
include Msf::Payload::Linux::Prepends
6+
7+
def prepends_order
8+
%w[PrependSetresuid PrependSetreuid PrependSetuid PrependSetresgid PrependSetregid PrependSetgid]
9+
end
10+
11+
def appends_order
12+
%w[AppendExit]
13+
end
14+
15+
def prepends_map
16+
{
17+
# setuid(0)
18+
'PrependSetuid' => [
19+
0x00000513, # li a0,0 # uid = 0
20+
0x09200893, # li a7,146 # __NR_setuid
21+
0x00000073 # ecall
22+
].pack('V*'),
23+
24+
# setreuid(0, 0)
25+
'PrependSetreuid' => [
26+
0x00000513, # li a0,0 # ruid = 0
27+
0x00000593, # li a1,0 # euid = 0
28+
0x09100893, # li a7,145 # __NR_setreuid
29+
0x00000073 # ecall
30+
].pack('V*'),
31+
32+
# setresuid(0, 0, 0)
33+
'PrependSetresuid' => [
34+
0x00000513, # li a0,0 # ruid = 0
35+
0x00000593, # li a1,0 # euid = 0
36+
0x00000613, # li a2,0 # suid = 0
37+
0x09300893, # li a7,147 # __NR_setresuid
38+
0x00000073 # ecall
39+
].pack('V*'),
40+
41+
# setresgid(0, 0, 0)
42+
'PrependSetresgid' => [
43+
0x00000513, # li a0,0 # rgid = 0
44+
0x00000593, # li a1,0 # egid = 0
45+
0x00000613, # li a2,0 # sgid = 0
46+
0x0aa00893, # li a7,170 # __NR_setresgid
47+
0x00000073 # ecall
48+
].pack('V*'),
49+
50+
# setregid(0, 0)
51+
'PrependSetregid' => [
52+
0x00000513, # li a0,0 # rgid = 0
53+
0x00000593, # li a1,0 # egid = 0
54+
0x04700893, # li a7,71 # __NR_setregid
55+
0x00000073 # ecall
56+
].pack('V*'),
57+
58+
# setgid(0)
59+
'PrependSetgid' => [
60+
0x00000513, # li a0,0 # gid = 0
61+
0x02e00893, # li a7,46 # __NR_setgid
62+
0x00000073 # ecall
63+
].pack('V*')
64+
}
65+
end
66+
67+
def appends_map
68+
{
69+
# exit(0)
70+
'AppendExit' => [
71+
0x00000513, # li a0,0 # exit code = 0
72+
0x05d00893, # li a7,93 # __NR_exit
73+
0x00000073 # ecall
74+
].pack('V*')
75+
}
76+
end
77+
end

modules/payloads/singles/linux/riscv32le/reboot.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
module MetasploitModule
77
CachedSize = 32
88

9+
include Msf::Payload::Linux::Riscv32le::Prepends
910
include Msf::Payload::Single
1011

1112
def initialize(info = {})

modules/payloads/singles/linux/riscv64le/reboot.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
module MetasploitModule
77
CachedSize = 40
88

9+
include Msf::Payload::Linux::Riscv64le::Prepends
910
include Msf::Payload::Single
1011

1112
def initialize(info = {})

0 commit comments

Comments
 (0)