hhxk123 发表于 2024-5-20 21:45

shellcode怎么运行啊

我有一道CTF的题,给了一段shellcode,运行之后这就能得到flag,但是怎么运行啊{:301_972:}

lyl610abc 发表于 2024-5-21 11:26

本帖最后由 lyl610abc 于 2024-5-21 11:31 编辑

只需要 3 步:
1.向 chatgpt 提问:c++ windows 申请可执行内存并执行一段 shellcode

2.将 chatgpt 返回代码里的 shellcode 替换为你文本里的代码
#include <windows.h>
#include <iostream>

// 用于测试的shellcode,通常是一段机器码。这里只是一个示例。
// 实际的shellcode应该是二进制形式,且与你的目标平台架构相匹配。
const char shellcode[] = "\x90\x90\x90"; // NOP NOP NOP (无操作指令)

int main() {
    // shellcode的大小
    SIZE_T shellcodeSize = sizeof(shellcode);

    // 申请可执行内存
    LPVOID execMemory = VirtualAlloc(
      NULL,            // 系统决定分配的地址
      shellcodeSize,   // 要分配的内存大小
      MEM_COMMIT | MEM_RESERVE, // 分配的内存类型
      PAGE_EXECUTE_READWRITE    // 可执行、可读写的保护属性
    );

    if (execMemory == NULL) {
      std::cerr << "Memory allocation failed." << std::endl;
      return 1;
    }

    // 将shellcode复制到申请的内存中
    RtlMoveMemory(execMemory, shellcode, shellcodeSize);

    // 转换指针类型以执行shellcode
    void (*shellcodeFunc)() = (void (*)())execMemory;

    // 执行shellcode
    shellcodeFunc();

    // 释放内存
    VirtualFree(execMemory, 0, MEM_RELEASE);

    return 0;
}

3. 编译执行得到结果



爱飞的猫 发表于 2024-5-21 01:51

随便找个 EXE (关掉可执行文件的 ASLR 避免干扰)把入口替换成这段 ShellCode 然后在调试器或静态分析工具观察吧。

lyl610abc 发表于 2024-5-21 11:39

还有一种更简单的办法,直接将十六进制代码转换为汇编代码
使用在线网站:Online x86 / x64 Assembler and Disassembler
把十六进制代码粘贴进来一键转换:


得到反汇编代码:
0:55                      push   ebp
1:8b ec                   mov    ebp,esp
3:81 ec b0 00 00 00       sub    esp,0xb0
9:c7 45 fc 00 00 00 00    mov    DWORD PTR ,0x0
10: 50                      push   eax
11: 64 a1 30 00 00 00       mov    eax,fs:0x30
17: 8b 40 0c                mov    eax,DWORD PTR
1a: 8b 40 1c                mov    eax,DWORD PTR
1d: 8b 00                   mov    eax,DWORD PTR
1f: 8b 40 08                mov    eax,DWORD PTR
22: 89 45 fc                mov    DWORD PTR ,eax
25: 58                      pop    eax
26: 8b 45 fc                mov    eax,DWORD PTR
29: 89 85 70 ff ff ff       mov    DWORD PTR ,eax
2f: 8b 8d 70 ff ff ff       mov    ecx,DWORD PTR
35: 8b 55 fc                mov    edx,DWORD PTR
38: 03 51 3c                add    edx,DWORD PTR
3b: 89 95 6c ff ff ff       mov    DWORD PTR ,edx
41: 8b 85 6c ff ff ff       mov    eax,DWORD PTR
47: 83 c0 78                add    eax,0x78
4a: 89 85 68 ff ff ff       mov    DWORD PTR ,eax
50: 8b 8d 68 ff ff ff       mov    ecx,DWORD PTR
56: 8b 55 fc                mov    edx,DWORD PTR
59: 03 11                   add    edx,DWORD PTR
5b: 89 55 f0                mov    DWORD PTR ,edx
5e: 8b 45 f0                mov    eax,DWORD PTR
61: 8b 48 1c                mov    ecx,DWORD PTR
64: 03 4d fc                add    ecx,DWORD PTR
67: 89 8d 5c ff ff ff       mov    DWORD PTR ,ecx
6d: 8b 55 f0                mov    edx,DWORD PTR
70: 8b 42 20                mov    eax,DWORD PTR
73: 03 45 fc                add    eax,DWORD PTR
76: 89 85 64 ff ff ff       mov    DWORD PTR ,eax
7c: 8b 4d f0                mov    ecx,DWORD PTR
7f: 8b 51 24                mov    edx,DWORD PTR
82: 03 55 fc                add    edx,DWORD PTR
85: 89 95 60 ff ff ff       mov    DWORD PTR ,edx
8b: c7 85 74 ff ff ff 00    mov    DWORD PTR ,0x0
92: 00 00 00
95: c7 45 f4 00 00 00 00    mov    DWORD PTR ,0x0
9c: eb 09                   jmp    0xa7
9e: 8b 45 f4                mov    eax,DWORD PTR
a1: 83 c0 01                add    eax,0x1
a4: 89 45 f4                mov    DWORD PTR ,eax
a7: 8b 4d f0                mov    ecx,DWORD PTR
aa: 8b 55 f4                mov    edx,DWORD PTR
ad: 3b 51 18                cmp    edx,DWORD PTR
b0: 73 7a                   jae    0x12c
b2: 8b 45 f4                mov    eax,DWORD PTR
b5: 8b 8d 64 ff ff ff       mov    ecx,DWORD PTR
bb: 8b 14 81                mov    edx,DWORD PTR
be: 03 55 fc                add    edx,DWORD PTR
c1: 89 55 ec                mov    DWORD PTR ,edx
c4: c7 45 f8 00 00 00 00    mov    DWORD PTR ,0x0
cb: 8b 45 ec                mov    eax,DWORD PTR
ce: 0f be 08                movsxecx,BYTE PTR
d1: 85 c9                   test   ecx,ecx
d3: 74 28                   je   0xfd
d5: 8b 55 f8                mov    edx,DWORD PTR
d8: c1 e2 19                shl    edx,0x19
db: 8b 45 f8                mov    eax,DWORD PTR
de: c1 e8 07                shr    eax,0x7
e1: 0b d0                   or   edx,eax
e3: 89 55 f8                mov    DWORD PTR ,edx
e6: 8b 4d ec                mov    ecx,DWORD PTR
e9: 0f be 11                movsxedx,BYTE PTR
ec: 03 55 f8                add    edx,DWORD PTR
ef: 89 55 f8                mov    DWORD PTR ,edx
f2: 8b 45 ec                mov    eax,DWORD PTR
f5: 83 c0 01                add    eax,0x1
f8: 89 45 ec                mov    DWORD PTR ,eax
fb: eb ce                   jmp    0xcb
fd: 81 7d f8 85 df af bb    cmp    DWORD PTR ,0xbbafdf85
104:    75 21                   jne    0x127
106:    8b 4d f4                mov    ecx,DWORD PTR
109:    8b 95 60 ff ff ff       mov    edx,DWORD PTR
10f:    0f b7 04 4a             movzxeax,WORD PTR
113:    8b 8d 5c ff ff ff       mov    ecx,DWORD PTR
119:    8b 14 81                mov    edx,DWORD PTR
11c:    03 55 fc                add    edx,DWORD PTR
11f:    89 95 74 ff ff ff       mov    DWORD PTR ,edx
125:    eb 05                   jmp    0x12c
127:    e9 72 ff ff ff          jmp    0x9e
12c:    8b 85 74 ff ff ff       mov    eax,DWORD PTR
132:    89 85 78 ff ff ff       mov    DWORD PTR ,eax
138:    c6 45 b0 4c             mov    BYTE PTR ,0x4c
13c:    c6 45 b1 6f             mov    BYTE PTR ,0x6f
140:    c6 45 b2 61             mov    BYTE PTR ,0x61
144:    c6 45 b3 64             mov    BYTE PTR ,0x64
148:    c6 45 b4 4c             mov    BYTE PTR ,0x4c
14c:    c6 45 b5 69             mov    BYTE PTR ,0x69
150:    c6 45 b6 62             mov    BYTE PTR ,0x62
154:    c6 45 b7 72             mov    BYTE PTR ,0x72
158:    c6 45 b8 61             mov    BYTE PTR ,0x61
15c:    c6 45 b9 72             mov    BYTE PTR ,0x72
160:    c6 45 ba 79             mov    BYTE PTR ,0x79
164:    c6 45 bb 45             mov    BYTE PTR ,0x45
168:    c6 45 bc 78             mov    BYTE PTR ,0x78
16c:    c6 45 bd 41             mov    BYTE PTR ,0x41
170:    c6 45 be 00             mov    BYTE PTR ,0x0
174:    c6 45 d8 75             mov    BYTE PTR ,0x75
178:    c6 45 d9 73             mov    BYTE PTR ,0x73
17c:    c6 45 da 65             mov    BYTE PTR ,0x65
180:    c6 45 db 72             mov    BYTE PTR ,0x72
184:    c6 45 dc 33             mov    BYTE PTR ,0x33
188:    c6 45 dd 32             mov    BYTE PTR ,0x32
18c:    c6 45 de 2e             mov    BYTE PTR ,0x2e
190:    c6 45 df 64             mov    BYTE PTR ,0x64
194:    c6 45 e0 6c             mov    BYTE PTR ,0x6c
198:    c6 45 e1 6c             mov    BYTE PTR ,0x6c
19c:    c6 45 e2 00             mov    BYTE PTR ,0x0
1a0:    c6 45 c0 4d             mov    BYTE PTR ,0x4d
1a4:    c6 45 c1 65             mov    BYTE PTR ,0x65
1a8:    c6 45 c2 73             mov    BYTE PTR ,0x73
1ac:    c6 45 c3 73             mov    BYTE PTR ,0x73
1b0:    c6 45 c4 61             mov    BYTE PTR ,0x61
1b4:    c6 45 c5 67             mov    BYTE PTR ,0x67
1b8:    c6 45 c6 65             mov    BYTE PTR ,0x65
1bc:    c6 45 c7 42             mov    BYTE PTR ,0x42
1c0:    c6 45 c8 6f             mov    BYTE PTR ,0x6f
1c4:    c6 45 c9 78             mov    BYTE PTR ,0x78
1c8:    c6 45 ca 41             mov    BYTE PTR ,0x41
1cc:    c6 45 cb 00             mov    BYTE PTR ,0x0
1d0:    c6 45 cc 45             mov    BYTE PTR ,0x45
1d4:    c6 45 cd 78             mov    BYTE PTR ,0x78
1d8:    c6 45 ce 69             mov    BYTE PTR ,0x69
1dc:    c6 45 cf 74             mov    BYTE PTR ,0x74
1e0:    c6 45 d0 50             mov    BYTE PTR ,0x50
1e4:    c6 45 d1 72             mov    BYTE PTR ,0x72
1e8:    c6 45 d2 6f             mov    BYTE PTR ,0x6f
1ec:    c6 45 d3 63             mov    BYTE PTR ,0x63
1f0:    c6 45 d4 65             mov    BYTE PTR ,0x65
1f4:    c6 45 d5 73             mov    BYTE PTR ,0x73
1f8:    c6 45 d6 73             mov    BYTE PTR ,0x73
1fc:    c6 45 d7 00             mov    BYTE PTR ,0x0
200:    8d 4d b0                lea    ecx,
203:    51                      push   ecx
204:    8b 55 fc                mov    edx,DWORD PTR
207:    52                      push   edx
208:    ff 95 78 ff ff ff       call   DWORD PTR
20e:    89 85 58 ff ff ff       mov    DWORD PTR ,eax
214:    8d 45 cc                lea    eax,
217:    50                      push   eax
218:    8b 4d fc                mov    ecx,DWORD PTR
21b:    51                      push   ecx
21c:    ff 95 78 ff ff ff       call   DWORD PTR
222:    89 85 50 ff ff ff       mov    DWORD PTR ,eax
228:    8d 55 c0                lea    edx,
22b:    52                      push   edx
22c:    6a 00                   push   0x0
22e:    6a 00                   push   0x0
230:    8d 45 d8                lea    eax,
233:    50                      push   eax
234:    ff 95 58 ff ff ff       call   DWORD PTR
23a:    50                      push   eax
23b:    ff 95 78 ff ff ff       call   DWORD PTR
241:    89 85 54 ff ff ff       mov    DWORD PTR ,eax
247:    c6 85 7c ff ff ff 66    mov    BYTE PTR ,0x66
24e:    c6 85 7d ff ff ff 6c    mov    BYTE PTR ,0x6c
255:    c6 85 7e ff ff ff 61    mov    BYTE PTR ,0x61
25c:    c6 85 7f ff ff ff 67    mov    BYTE PTR ,0x67
263:    c6 45 80 7b             mov    BYTE PTR ,0x7b
267:    c6 45 81 68             mov    BYTE PTR ,0x68
26b:    c6 45 82 61             mov    BYTE PTR ,0x61
26f:    c6 45 83 69             mov    BYTE PTR ,0x69
273:    c6 45 84 2d             mov    BYTE PTR ,0x2d
277:    c6 45 85 73             mov    BYTE PTR ,0x73
27b:    c6 45 86 68             mov    BYTE PTR ,0x68
27f:    c6 45 87 61             mov    BYTE PTR ,0x61
283:    c6 45 88 6e             mov    BYTE PTR ,0x6e
287:    c6 45 89 67             mov    BYTE PTR ,0x67
28b:    c6 45 8a 2d             mov    BYTE PTR ,0x2d
28f:    c6 45 8b 73             mov    BYTE PTR ,0x73
293:    c6 45 8c 68             mov    BYTE PTR ,0x68
297:    c6 45 8d 65             mov    BYTE PTR ,0x65
29b:    c6 45 8e 6e             mov    BYTE PTR ,0x6e
29f:    c6 45 8f 67             mov    BYTE PTR ,0x67
2a3:    c6 45 90 2d             mov    BYTE PTR ,0x2d
2a7:    c6 45 91 6d             mov    BYTE PTR ,0x6d
2ab:    c6 45 92 69             mov    BYTE PTR ,0x69
2af:    c6 45 93 6e             mov    BYTE PTR ,0x6e
2b3:    c6 45 94 67             mov    BYTE PTR ,0x67
2b7:    c6 45 95 2d             mov    BYTE PTR ,0x2d
2bb:    c6 45 96 79             mov    BYTE PTR ,0x79
2bf:    c6 45 97 75             mov    BYTE PTR ,0x75
2c3:    c6 45 98 65             mov    BYTE PTR ,0x65
2c7:    c6 45 99 2d             mov    BYTE PTR ,0x2d
2cb:    c6 45 9a 2d             mov    BYTE PTR ,0x2d
2cf:    c6 45 9b 74             mov    BYTE PTR ,0x74
2d3:    c6 45 9c 69             mov    BYTE PTR ,0x69
2d7:    c6 45 9d 61             mov    BYTE PTR ,0x61
2db:    c6 45 9e 6e             mov    BYTE PTR ,0x6e
2df:    c6 45 9f 2d             mov    BYTE PTR ,0x2d
2e3:    c6 45 a0 79             mov    BYTE PTR ,0x79
2e7:    c6 45 a1 61             mov    BYTE PTR ,0x61
2eb:    c6 45 a2 2d             mov    BYTE PTR ,0x2d
2ef:    c6 45 a3 67             mov    BYTE PTR ,0x67
2f3:    c6 45 a4 6f             mov    BYTE PTR ,0x6f
2f7:    c6 45 a5 6e             mov    BYTE PTR ,0x6e
2fb:    c6 45 a6 67             mov    BYTE PTR ,0x67
2ff:    c6 45 a7 2d             mov    BYTE PTR ,0x2d
303:    c6 45 a8 63             mov    BYTE PTR ,0x63
307:    c6 45 a9 69             mov    BYTE PTR ,0x69
30b:    c6 45 aa 2d             mov    BYTE PTR ,0x2d
30f:    c6 45 ab 73             mov    BYTE PTR ,0x73
313:    c6 45 ac 68             mov    BYTE PTR ,0x68
317:    c6 45 ad 69             mov    BYTE PTR ,0x69
31b:    c6 45 ae 7d             mov    BYTE PTR ,0x7d
31f:    c6 45 af 00             mov    BYTE PTR ,0x0
323:    c6 45 e4 66             mov    BYTE PTR ,0x66
327:    c6 45 e5 6c             mov    BYTE PTR ,0x6c
32b:    c6 45 e6 61             mov    BYTE PTR ,0x61
32f:    c6 45 e7 67             mov    BYTE PTR ,0x67
333:    c6 45 e8 00             mov    BYTE PTR ,0x0
337:    6a 00                   push   0x0
339:    8d 4d e4                lea    ecx,
33c:    51                      push   ecx
33d:    8d 95 7c ff ff ff       lea    edx,
343:    52                      push   edx
344:    6a 00                   push   0x0
346:    ff 95 54 ff ff ff       call   DWORD PTR
34c:    6a 00                   push   0x0
34e:    ff 95 50 ff ff ff       call   DWORD PTR
354:    8b e5                   mov    esp,ebp
356:    5d                      pop    ebp
357:    c3                      ret

很容易就找到赋值的反汇编代码:
247:    c6 85 7c ff ff ff 66    mov    BYTE PTR ,0x66
24e:    c6 85 7d ff ff ff 6c    mov    BYTE PTR ,0x6c
255:    c6 85 7e ff ff ff 61    mov    BYTE PTR ,0x61
25c:    c6 85 7f ff ff ff 67    mov    BYTE PTR ,0x67
263:    c6 45 80 7b             mov    BYTE PTR ,0x7b
267:    c6 45 81 68             mov    BYTE PTR ,0x68
26b:    c6 45 82 61             mov    BYTE PTR ,0x61
26f:    c6 45 83 69             mov    BYTE PTR ,0x69
273:    c6 45 84 2d             mov    BYTE PTR ,0x2d
277:    c6 45 85 73             mov    BYTE PTR ,0x73
27b:    c6 45 86 68             mov    BYTE PTR ,0x68
27f:    c6 45 87 61             mov    BYTE PTR ,0x61
283:    c6 45 88 6e             mov    BYTE PTR ,0x6e
287:    c6 45 89 67             mov    BYTE PTR ,0x67
28b:    c6 45 8a 2d             mov    BYTE PTR ,0x2d
28f:    c6 45 8b 73             mov    BYTE PTR ,0x73
293:    c6 45 8c 68             mov    BYTE PTR ,0x68
297:    c6 45 8d 65             mov    BYTE PTR ,0x65
29b:    c6 45 8e 6e             mov    BYTE PTR ,0x6e
29f:    c6 45 8f 67             mov    BYTE PTR ,0x67
2a3:    c6 45 90 2d             mov    BYTE PTR ,0x2d
2a7:    c6 45 91 6d             mov    BYTE PTR ,0x6d
2ab:    c6 45 92 69             mov    BYTE PTR ,0x69
2af:    c6 45 93 6e             mov    BYTE PTR ,0x6e
2b3:    c6 45 94 67             mov    BYTE PTR ,0x67
2b7:    c6 45 95 2d             mov    BYTE PTR ,0x2d
2bb:    c6 45 96 79             mov    BYTE PTR ,0x79
2bf:    c6 45 97 75             mov    BYTE PTR ,0x75
2c3:    c6 45 98 65             mov    BYTE PTR ,0x65
2c7:    c6 45 99 2d             mov    BYTE PTR ,0x2d
2cb:    c6 45 9a 2d             mov    BYTE PTR ,0x2d
2cf:    c6 45 9b 74             mov    BYTE PTR ,0x74
2d3:    c6 45 9c 69             mov    BYTE PTR ,0x69
2d7:    c6 45 9d 61             mov    BYTE PTR ,0x61
2db:    c6 45 9e 6e             mov    BYTE PTR ,0x6e
2df:    c6 45 9f 2d             mov    BYTE PTR ,0x2d
2e3:    c6 45 a0 79             mov    BYTE PTR ,0x79
2e7:    c6 45 a1 61             mov    BYTE PTR ,0x61
2eb:    c6 45 a2 2d             mov    BYTE PTR ,0x2d
2ef:    c6 45 a3 67             mov    BYTE PTR ,0x67
2f3:    c6 45 a4 6f             mov    BYTE PTR ,0x6f
2f7:    c6 45 a5 6e             mov    BYTE PTR ,0x6e
2fb:    c6 45 a6 67             mov    BYTE PTR ,0x67
2ff:    c6 45 a7 2d             mov    BYTE PTR ,0x2d
303:    c6 45 a8 63             mov    BYTE PTR ,0x63
307:    c6 45 a9 69             mov    BYTE PTR ,0x69
30b:    c6 45 aa 2d             mov    BYTE PTR ,0x2d
30f:    c6 45 ab 73             mov    BYTE PTR ,0x73
313:    c6 45 ac 68             mov    BYTE PTR ,0x68
317:    c6 45 ad 69             mov    BYTE PTR ,0x69
31b:    c6 45 ae 7d             mov    BYTE PTR ,0x7d
31f:    c6 45 af 00             mov    BYTE PTR ,0x0
323:    c6 45 e4 66             mov    BYTE PTR ,0x66
327:    c6 45 e5 6c             mov    BYTE PTR ,0x6c
32b:    c6 45 e6 61             mov    BYTE PTR ,0x61
32f:    c6 45 e7 67             mov    BYTE PTR ,0x67
333:    c6 45 e8 00             mov    BYTE PTR ,0x0

这里赋值的是字符串对应的 ASCII 码,将 ASCII 码转换回字符串
网上随便搜了个在线网站: code-convert-ascii
把对应的 ASCII 码丢进来解析即可得到 flag

lyl610abc 发表于 2024-5-21 11:52

爱飞的猫 发表于 2024-5-21 01:51
随便找个 EXE (关掉可执行文件的 ASLR 避免干扰)把入口替换成这段 ShellCode 然后在调试器或静态分析工具 ...

这个思路有点太侵入式了,shellcode 本质只是一段可执行的代码,而不是非要侵入才能执行
对于 flag 题中的一段shellcode ,需要的无非是:
shellcode 执行的结果
shellcode 执行过程中的隐藏信息(需要分析执行过程对应的汇编代码)

对于 shellcode ,随便写一个 demo,分配一段可执行的内存区域执行这段 shellcode 即可
或者是直接将 shellcode 转换为汇编代码进行分析

hhxk123 发表于 2024-5-21 15:32

lyl610abc 发表于 2024-5-21 11:26
只需要 3 步:
1.向 chatgpt 提问:c++ windows 申请可执行内存并执行一段 shellcode



厉害了,谢谢大佬

爱飞的猫 发表于 2024-5-23 01:49

lyl610abc 发表于 2024-5-21 11:52
这个思路有点太侵入式了,shellcode 本质只是一段可执行的代码,而不是非要侵入才能执行
对于 flag 题中 ...

植入到可执行文件主要还是为了更方便看 IDA 的伪码,如果给的 ShellCode 本身比较简单,那确实没啥必要。
页: [1]
查看完整版本: shellcode怎么运行啊