buuctf-pwn pwnable_start(ret2shellcode)题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

此处我将文件命名为pwn

checksec pwn 查看一下保护机制

可以看到这是一个32-bit的文件,什么保护都没开

将文件拖入ida,得到

一段段看,先看

首先调用了write(1,ecx=esp,0x14),也就是从esp指向的地址写出0x14字节的内容,此时的esp指向最后一行的push

push 3A465443h -> 'CTF:'

push 20656874h - >"the "

push 20747261h - >"art "

push 74732073h - >"s st"

push 2774654Ch - > "Let'"

也就是输出"Let's start the CTF:"

调用read(0,ecp=esp,0x3c),从esp指向的地址写入0x3c的内容,此时esp仍指向刚刚的位置

add esp,14h -> esp+0x14

retn -> pop eip , esp+0x4

思路:因为ASLR保护,栈地址每次随机,为了确定我们输入shellcode的地址,得返回到mov ecx,esp的位置再次调用write,打印出栈地址。也就是:溢出覆盖返回地址→跳回 mov ecx,esp→write 打印 esp 泄露栈地址→手动修正偏移算出缓冲区地址→跳转栈执行 shellcode→getshell

返回虚拟机

nano exp.py

保存退出

python3 exp.py

cat flag

此题完

相关推荐
Bruce_Liuxiaowei1 小时前
2026年10月第3周网络安全形势周报
安全·web安全·网络安全
我是伪码农8 小时前
百蝶杯学习
学习
keyipatience8 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
xian_wwq10 小时前
【学习笔记】Milvus 如何完成一次向量相似度检索,Milvus 索引到底应该怎么选?-15
笔记·学习·milvus
Hhuhkt10 小时前
3D 云养宠小游戏
学习
是真的小外套11 小时前
第13章:网络安全漏洞防护原理与应用
安全·web安全·php
Zwawa12 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
Ikalus198812 小时前
检查自己写着「这不会让任务失败」:一条 Critical 风险就这么过了 178 天
安全·架构
派大鑫wink12 小时前
纯前端实现软考中级·软件设计师备考学习网站
前端·学习
smartpi_ai13 小时前
51 单片机写好了,大模型语音怎么接?17T 全驱动的现成方案、双板串口分工的边界与画板前的三项硬件确认
单片机·嵌入式硬件·学习