pwn-2.rip1

        拿到这道提后根据第一篇的思路 我们先checksec 一下,根据下面发下这个文件没有开任何保护,也不能进行nc这不坏了不能直接看别人手机了,但是多了Stack、RWX 这里我们先对此做一个介绍

Stack:"Stack"(栈)是一种后进先出(LIFO, Last In First Out)的数据结构,而“Executable”(可执行文件)是指可以被计算机直接执行的文件

RWX:在Liunx中指文件的读(Read)、写(Write)和执行(eXecute)权限,当提及“Has RWX segments”时这通常意味着某个二进制文件或程序的内存段(segment)同时拥有这三种权限。

了解之后,可以推断这道题的关键点应该就是:Stack、RWX。 

然后我们再到IDA里面去查看一番,可以清楚的看到 " /bin/sh " 机会来了,双击一下

然后双击 /bin/sh 按shift+F12 就出现了下面的图,

现在看着感觉没有任何用处,不着急,接下来我们看main函数它会告诉我们什么,可能跟上一道题一样,话不多少先看。记着还需要按一下F5 ,看一下编译后的反代码

出现了这张图,我们留意一下这个gets 它是一个危险函数,熟悉c代码的可能很熟悉,不熟悉也不要紧,现在看是就拿起自己的笔记本慢慢积累。接下来看题,注意这个字符串char s[15]; // [rsp+1h] [rbp-Fh] BYREF   它告诉了我们s这个字符可以存储15个字节,接着看带有光标的这一行中的代码 意思为 将[rbp+s] 复制给rax  这里的rbp 占8 个字节 因此 gets 函数覆盖量为 15 + 8 =23个字节

我们找到了断点,于是将目光扫回 /bin/sh,需要寻找到与/bin/sh有关的系统调用的函数,经过一番点点点,我们将目的定位到fun功能的函数,进去看看呗,按F5

出现我们要用的了拿出来一看这不跟上一道题一样,第一时间想到nc ,但是这道题我们从checksec发现根本行不通,没开nc 这不有完蛋了,不过没事我们的主要步骤这不少了一步构建playlaod 呀

先给大家简单说一下playlaod脚本格式的格式 (不同题的格式不太相同一点点我们慢慢介绍,)

from pwn import *         //导入pwntools库中的所有内用,使用这个库中的所有内容
sh=remote('URl',端口)   //远端连接URL、端口
#sh = process('./文件名')             //如果这个文件在你本地可以给你的文件 ./文件名  本地连接
buf2_addr = 地址                //用于跳过大量废话代码到这个地址
sh.sendline(b'A'*n + p64(buf2_addr+1))  //制造出栈溢出,到buf2_addr的地址,向远端服务器发送这条代码,     //用A*n个字节来占位  
sh.interactive()                     //用于连接远端服务器

这里的小插曲介绍完了 开始琢磨如何构建这个playload ,首先我们要找到我们要去往的地址是哪里 是system(/bin/sh) 这个位置 我们将IDA的光标放置于 这一行,然后按TAD键,再按空格,来到了下面这个页面,也要注意用红色标注出来的这一行,有这个箭头意味着这就是这个函数的开始地址,这个地址也就是我们需要的

这里还有一种方法使用nm,需要的工具是kali 展示结果如下

两种方法的找到的地址都是0x401186。接下来我们就开始构建palylaod。

from pwn import * 
sh = remote ('node5.buuoj.cn',26635)
buf_addr = 0x401186
sh.sendline(b'A'*23 + P64(buf_addr+1))
sh.interactive()

然后我们在kali中构建playlaod 提取flag 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值