ShellCode编程
1.BypassUAC
1.1 伪造Token
原理:将待提权进程替换为System进程EPROCESS结构
1 |
|
1.2 修改ACL
Win10最新版已不能用
1.3 强制开启权限
Win10最新版已不能用
2.编程技巧
2.1 去除空字节
2.1.1 指令替换
1 |
|
1 |
|
2.1.2 栈转换
1 |
|
2.1.3 编码解码
函数式解码器,参数1为shellcode长度,解压加载器尾部的shellcode并跳转过去执行,代码如下:
1 |
|
编写一个内核提权ShellCode生成器,代码如下:(用于异或的字符不能与ShellCode原始字符重复,否则会出现NULL)
1 |
|
2.2 Shellcode定位
ShellCode中获取指令地址:
1 |
|
栈溢出攻击时利用跳板定位ShellCode起始位置:
抬高栈顶保护shellcode,避免压栈破环自身:
2.3 获取Windows API
可以使用HASH来避免出现函数名
解析流程图:
2.4 ShellCode瘦身
使用短、复合指令
1
2
3
4
5
6
7xchg eax,reg 交换 eax 和其他寄存器中的值
lodsd 把 esi 指向的一个 dword 装入 eax,并且增加 esi
lodsb 把 esi 指向的一个 byte 装入 al,并且增加 esi
stosd
stosb
pushad/popad 从栈中存储/恢复所有寄存器的值
cdq 用 edx 把 eax 扩展成四字。这条指令在 eax<0x80000000 时可用作 mov edx ,NULL栈首初始化大块0区域,避免频繁使用清0指令
使用栈中的垃圾数据
使用ebp
ShellCode代码当作数据来用
hash函数名对比,并根据需求选择合适的hash长度,可以容忍碰撞
2.5 VS开发ShellCode
ShellCode编程
http://helloymf.github.io/2022/10/22/shellcode-bian-cheng/