[moectf]夺命十三枪(反序列化)

字符逃逸

字符变多 :

就把想要构造的变量值的反序列化内容的字符长度记录下来 然后看字符替换会多多少个字符 比如a会替换成aaaaaa 这样子也就是一个a多了5个字符 所以只要写七个a即可成功逃逸

还有字符变少的 没写

打开里面是个代码文件

包含了一个hanxin.exe.php 接收chant参数 进行了序列化(所以传参时要先反序列化)然后调用move函数

打开hanxin.exe.php

Make_a_move函数 循环遍历传入进来的$move变量 把该里面的第一枪-第十三枪(左边的字符)

替换成右边的字符

所以这题要获取flag就要把Spear_Owner改成MaoLei

但是有个问题就是他只接收chant变量 只能修改chant的值 修改不了Spear_Owner的值

所以这里想到利用反序列化的字符逃逸 提前闭合 因为传入chant的值 如果有包含过滤数组的东西的话(第一枪到第十三枪)他就会替换成更长的字符串 这样子输入的字符就会因此变多

首先计算后面的值

然后发现原本第十枪的字符时16 会被替换成21个的字符 也就是会多5个字符

然后使用第九枪 原本12个字符 替换成32个的字符 也就是多20个字符

所以综上 只要使用一个第九枪和三个第十枪这样子就有多了20+3*5=35

这样子就把s:11:"Spear_Owner";s:6:"MaoLei";} 给逃逸出来了 就可以正常闭合了

传入:

di_jiu_qiangdi_shi_san_qiangdi_shi_san_qiangdi_shi_san_qiang";s:11:"Spear_Owner";s:6:"MaoLei";}

替换后 s:95:"Night_Parade_of_a_Hundred_GhostsUnrepentant_LethalityUnrepentant_LethalityUnrepentant_Lethality";s:11:"Spear_Owner";s:6:"MaoLei";}";s:11:"Spear_Owner";s:6:"Nobody";}

di_jiu_qiangdi_shi_san_qiangdi_shi_san_qiangdi_shi_san_qiang";s:11:"Spear_Owner";s:6:"MaoLei";}

简单来讲就是假设原本字符接收的长度为X X的组成是

前面那部分(di_jiu_qiangdi_shi_san_qiangdi_shi_san_qiangdi_shi_san_qiang)

+

后面需要构造闭合的(";s:11:"Spear_Owner";s:6:"MaoLei";})字符长度为35

然后他的字符替换 前面那部分的长度 就会多出35(后面那部分的字符长度)

这样就把后面那部分给闭合了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值