Week小结

这周就主要学了node.js的几个漏洞

1.原型链污染

[GYCTF2020]Ez_Express[GKCTF 2021]easynode

感觉之前博客写的原型链污染 写的不太完整

这里再补充一下

// foo是一个简单的JavaScript对象
let foo = {bar: 1}

// foo.bar 此时为1
console.log(foo.bar)

// 修改foo的原型(即Object)
foo.__proto__.bar = 2

// 由于查找顺序的原因,foo.bar仍然是1
console.log(foo.bar)

// 此时再用Object创建一个空的zoo对象
let zoo = {}

// 查看zoo.bar
console.log(zoo.bar)

image-20220412215155370 

最后,虽然zoo是一个空对象{},但zoo.bar的结果居然是2:

作用就是篡改值 这就是原型链污染

用ezpress里的merge函数

function merge(target, source) {
    for (let key in source) {
        if (key in source && key in target) {
            merge(target[key], source[key])
        } else {
            target[key] = source[key]
        }
    }
}
let o1 = {}
let o2 = {a: 1, "__proto__": {b: 2}}
merge(o1, o2)
console.log(o1.a, o1.b)

o3 = {}
console.log(o3.b)

image-20220412215913820 

但是没有污染到

这是因为,我们用JavaScript创建o2的过程(let o2 = {a: 1, “__proto__”: {b: 2}})中,__proto__已经代表o2的原型了,此时遍历o2的所有键名,你拿到的是[a, b],__proto__并不是一个key,自然也不会修改Object的原型。

总而言之就是__proto__没有被当作键名而是被解析了

就让__proto__被当作键名就好了

let o1 = {}
let o2 = JSON.parse('{"a": 1, "__proto__": {"b": 2}}')
merge(o1, o2)
console.log(o1.a, o1.b)

o3 = {}
console.log(o3.b)

 image-20220412220705749

这是因为,JSON解析的情况下,__proto__会被认为是一个真正的“键名”,而不代表“原型”,所以在遍历o2的时候会存在这个键。

merge操作是最常见可能控制键名的操作,也最能被原型链攻击,很多常见的库都存在这个问题。

所以适用的环境是 可以对对象赋值,且值可控,支持__proto__解析

具体而言就是 例如merge函数 ,或者框架漏洞(大部分框架都有赋值操作,只要有人挖出来链子就可以污染

2.node.js 8.12.0HTTP拆分攻击

[GYCTF2020]Node Game

然后就是一些小的操作 EZ_express里node.js特有的toupperCase函数

特殊字符绕过
toUpperCase()

其中混入了两个奇特的字符"ı"、"ſ"。

 这两个字符的“大写”是I和S。也就是说"ı".toUpperCase() == 'I',
"ſ".toUpperCase() == 'S'。通过这个小特性可以绕过一些限制。

toLowerCase()
这个"K"的“小写”字符是k,也就是"K".toLowerCase() == 'k'.

eazynode里的WAF弱比较绕过配合语句拼接 还有反弹shell

node game里的那个版本的HTTP拆分攻击和SSRF

这样看好像学得不多

但是操作起来还是挺难受的

像比赛知道怎么做但写不出ep一样

慢慢来吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值