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

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 代码主要用于处理两个输入参数 (idjson),并在满足特定条件时输出一个变量 $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"
  • 潜在漏洞:

    1. 文件包含敏感数据: 如果 flag.php 的内容意外暴露,攻击者可能直接获取到 $flag
    2. 未验证的用户输入:
      • 虽然 json_decode() 是一种解析输入的方法,但其行为依赖于用户传入的 JSON 数据,如果攻击者能够构造合法的 JSON,可能绕过其他限制。
    3. 代码逻辑过于简单: 一旦攻击者了解了判断逻辑,直接伪造请求即可拿到 $flag
  • 如何利用:

    1. 构造一个 POST 请求,其中 id="wllmNB"
    2. 构造一个 GET 请求,其中 json={"x":"wllm"}
    3. 请求示例:
       

      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"

  • 建议改进:

    1. 避免在源码中直接输出敏感信息。
    2. 使用更加复杂的验证逻辑,避免简单暴力的字符串匹配。
    3. 针对用户输入的 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 请求。

步骤
  1. 下载并安装 Postman.

  2. 创建一个新请求。

  3. 设置请求方式为 POST

  4. 在 URL 栏中输入目标地址,例如:

     

    arduino

    复制代码

    http://example.com/index.php

  5. 在请求参数部分:

    • Body: 选择 x-www-form-urlencoded
    • 添加键值对:id = wllmNB
  6. 在 Query Params 添加键值对:json = {"x":"wllm"}

  7. 点击 Send,观察返回结果。


3. 使用浏览器控制台

你也可以在浏览器的开发者工具中发送请求。

步骤
  1. 打开浏览器,按 F12 或右键选择 检查,进入开发者工具。
  2. 转到 Console(控制台)。
  3. 输入以下代码:
     

    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. 按回车,观察控制台输出的返回结果。

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)

运行
  1. 确保安装了 requestspip install requests
  2. 运行上述代码。

推荐工具

  • 如果你熟悉命令行,使用 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的命令&#xff0c;那这就是典型的命令执行&#xff0c;当然&#xff0c…...

对象排序得到方式

java实现 list 排序的方式&#xff0c;有三种 ① 对象实现Comparable 接口&#xff0c;然后代码里直接调用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&#xff1a;解答代码1035&#xff1a;学习成果1047&#xff1a;题目描述&#xff08;成功写出&#xff09;1047&#xff1a;解答代码1047&#xff1a;学习成果1085&#xf…...

Linux:进程间通信之进程池和日志

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

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…...

Paddle Inference部署推理(十二)

十二&#xff1a;Paddle Inference推理 &#xff08;python&#xff09;API详解 15. PredictorPool 类 PredictorPool 对 Predictor 进行了简单的封装&#xff0c;通过传入 config 和 thread 的数目来完成初始化&#xff0c;在每个线程中&#xff0c;根据自己的线程 id 直接从…...

外观模式 (Facade Pattern)

外观模式 (Facade Pattern) 外观模式是一种 结构型设计模式&#xff0c;通过为子系统中的一组接口提供一个统一的高层接口&#xff0c;简化了子系统的使用&#xff0c;让复杂系统更易于访问。 原理 核心思想&#xff1a; 提供一个 统一的接口 来访问子系统中的多个接口&#…...

人工智能-深度学习-Torch框架-手动构建回归流程

from sklearn.datasets import make_regression import math import random import torch from sklearn.datasets import make_regression: 导入make_regression函数&#xff0c;用于生成回归数据集。 import math: 导入math模块&#xff0c;用于进行数学计算&#xff0c;例如…...

SpringBoot源码解析(五):准备应用环境

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

MySQL面试-1

InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败&#xff0c;要么成功&#xff0c;不能做一半。聪明的InnoDB&#xff0c;在干活儿之前&#xff0c;先将要做的事情记录到一个叫undo log的日志文件中&#xff0c;如果失败了或者主动rollback&#xff0c;就可以通…...

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含合计行&#xff0c;设置单元格格式&#xff0c;水平居中 垂直居中 public function exportSalary(Request $request){//水平居中 垂直居中$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CE…...

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 queue 取出消息进行…...

【创建型设计模式】单例模式

【创建型设计模式】单例模式 这篇博客接下来几篇都将阐述设计模式相关内容。 接下来的顺序大概是&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 一、什么是单例模式 单例模式是一种创建型设计模式&#xff0c;它保证一个类仅有一个实例&#…...

Charles抓包工具-笔记

摘要 概念&#xff1a; Charles是一款基于 HTTP 协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果来达到分析抓包的目的。 功能&#xff1a; Charles 是一个功能全面的抓包工具&#xff0c;适用于各种网络调试和优化场景。 它…...

Go语言使用 kafka-go 消费 Kafka 消息教程

Go语言使用 kafka-go 消费 Kafka 消息教程 在这篇教程中&#xff0c;我们将介绍如何使用 kafka-go 库来消费 Kafka 消息&#xff0c;并重点讲解 FetchMessage 和 ReadMessage 的区别&#xff0c;以及它们各自适用的场景。通过这篇教程&#xff0c;你将了解如何有效地使用 kafk…...

【论文笔记】Number it: Temporal Grounding Videos like Flipping Manga

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: 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 是一个关键字&#xff0…...

基于企业微信客户端设计一个文件下载与预览系统

在企业内部沟通与协作中&#xff0c;文件分享和管理是不可或缺的一部分。企业微信&#xff08;WeCom&#xff09;作为一款广泛应用于企业的沟通工具&#xff0c;提供了丰富的API接口和功能&#xff0c;帮助企业进行高效的团队协作。然而&#xff0c;随着文件交换和协作的日益增…...

昇思MindSpore第七课---文本解码原理

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

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...