首页
社区
课程
招聘
[原创] 进程参数注入
发表于: 5天前 952

[原创] 进程参数注入

5天前
952

这是我在看雪发布的第一篇文章,从 CSDN 到看雪也算是一个新的开始吧。


原理其实很简单,当我们用 CreateProcessW 去创建进程的时候,可以指定 lpCommandLine 、lpEnvironment 等参数的内容,并且 Windows 会将这些参数的内容复制到PEB中去。假如我们写入的 lpCommandLine 内容并非是正常的命令行,而是一段shellcode,并且再修改线程上下文去执行这段shellcode,那么不就可以达到一个进程注入的目的。


首先我们创建一个进程,命令行随便写点东西进去,看看是否能成功,

可以看到我们指定的内容已经写入到命令行了。

那么现在我们如何找到 lpCommandLine 参数在内存中的地址呢,前面说过 Windows会把这些内容写入到进程的PEB中,所以现在要先找到PEB的地址。实现也很简单,通过 NtQueryInformationProcess 这个API 即可找到。

找到的 PEB 地址为  000000B858309000。

我们用 windbg 去notepad.exe内存验证一下,确实没有错。


接下来就是通过PEB 一步一步找到 lpCommandLine 的地址了,看了一下官方定义的 PEB 结构体,里面有个成员是 ProcessParameters 。


继续跟进 ProcessParameters ,发现 CommandLine 存贮在 ProcessParameters 里面。


所以现在我们先找到 ProcessParameters 的地址,直接读即可。

再用windbg验证一下,地址正确。


顺着 ProcessParameters 地址再找到 CommandLine  地址,也是直接读取。


依旧验证。


现在我们已经找到了命令行所在的内存地址,接下来要想完整实现进程参数注入,还需解决一个问题,lpCommandLine 是一个 Windows 宽字符字符串,也就是 UTF-16 风格的 wchar_t* 字符串,若遇到连续的 0x00 那么就会被自动截断,所以shellcode不能出现 00 00。解决方法是对 shellcode 进行异或处理,把带有 00 的 shellcode 变为无 00 型,然后再编写一段 stub 拼接到 shellcode 的后面,进行循环解密,最后再 jmp 到shellcode去执行。


冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 35
打赏
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  漫雾.   +1.00 2026/07/28 原创内容~
最新回复 (27)
雪    币: 5845
活跃值: (13039)
能力值: (RANK:385 )
在线值:
发帖
回帖
粉丝
4
欢迎  
5天前
1
雪    币: 93
活跃值: (282)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
y2k
5
感谢分享
5天前
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
感谢分享
5天前
0
雪    币: 528
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
学习
5天前
0
雪    币: 255
活跃值: (947)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享
5天前
0
雪    币: 243
活跃值: (409)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
感谢分享
4天前
0
雪    币: 49
活跃值: (1211)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享
4天前
0
雪    币: 16
活跃值: (2770)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享
4天前
0
雪    币: 1073
活跃值: (1365)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
666
4天前
0
雪    币: 1249
活跃值: (1630)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
666 
4天前
0
雪    币: 1073
活跃值: (1365)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
想问下通过这种方式注入执行的shellcode.杀毒软件能防住吗?
4天前
0
雪    币: 3112
活跃值: (2806)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
YoungBai 想问下通过这种方式注入执行的shellcode.杀毒软件能防住吗?
我使用的最小demo中调用SetThreadContext时返回的NTSTATUS是拒绝访问(某火+win10的结果),没有成功注入,参考ReactOS可以发现,在SetThreadContext获得执行权中,内核其实是通过向目标线程插入一个内核apc(调用KeInsertQueueApc)来修改上下文,但杀软为什么拦截了这种内核apc,或者是其他机制拦截了这种行为还尚不清楚
2天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
感谢分享
2天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
666
2天前
0
雪    币: 570
活跃值: (4525)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2天前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
感谢分享
2天前
0
雪    币: 198
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
感谢分享
2天前
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
看看怎么个事
2天前
0
雪    币: 206
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
六百六十六
2天前
0
雪    币: 1141
活跃值: (1150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢分享
2天前
0
雪    币: 162
活跃值: (854)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
感谢分享
1天前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
666
1天前
0
游客
登录 | 注册 方可回帖
返回