[CATCTF]wife_wife
拿到题目直接是login.html界面,还有个注册的链接,查看源码分析一下可以知道需要admin的身份才能获得flag。
注册抓包,需要让“isAdmin”属性为true,但是好像并没有改变我注册的这个账号的身份,依旧不是admin,看了一下别的师傅的wp才知道这个题目是关于js原型链污染。接下来就是知识的学习了。
JavaScript原型链污染
JavaScript原型链污染利用JavaScript中的原型链继承来污染一个对象的原型链,从而影响到整个应用程序的执行逻辑。JavaScript常被描述为一种基于原型的语言,即每个对象都拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。
其中前面两个属性是我们之前定义的,还一个就是Prototype。当我们访问person的一个属性时,浏览器首先查找person是否有这个属性.如果没有,然后浏览器就会在person的proto中查找这个属性(也就是Person.prototype)。如果Person.prototype有这个属性,那么这个属性就会被使用。否则,如果Person.prototype没有这个属性,浏览器就会去查找Person.prototype的proto,看它是否有这个属性,依次类推。默认情况下,所有类的原型属性的proto都是Object.prototype。
这个题目我们就可以使用这个原理来构造payload。
payload:
{"username":"1237","password":"123","__proto__" : { "isAdmin":true }}