题目链接:NSSCTF | 在线CTF平台
涉及工具:hackbar
解题思路:
1.打开靶场,代码审计:
审计代码:
①highlight_file('index.php');
这行代码将会在网页上显示当前 PHP 文件(index.php)的源代码,以便于查看和调试。
②include("flag.php");
这行代码包含了一个名为 flag.php 的文件,里面可能包含着一些敏感信息,比如这个题目中的 flag。
③$id=$_POST['id'];
这行代码从 POST 请求中获取名为 id 的参数的值,并赋给变量 $id。④$json=json_decode($_GET['json'],true);
这行代码将 GET 请求中名为 json 的参数的值解析成 PHP 数组,并赋给变量 $json(JSON复制形式一般为字典)。
⑤if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
这个条件语句检查 $id 变量是否等于字符串 "wllmNB",以及 $json 数组中的键 'x' 是否等于字符串 "wllm"。如果条件满足,则输出变量 $flag 的值,可能是 flag.php 文件中的内容。
2.审计得知,只要用“post”方法请求获取‘id==“wllmNB”’,用“get”方法请求‘json[‘x’]==“wllm”’,即可获得flag:
3.知识总结:
①hackbar功能菜单从左到右,从上到下相应功能解说:
Encryption:集成了几种常用解密方式
Encoding:集成了几种常用解码方式
SQL:sql注入工具集成
XSS:xss跨脚本攻击工具集成
LFI:本地文件包含
XXE:外部实体注入(XXE漏洞)
Other:目前大概率用不到...
Load URL:将网址录入右边文本框进行操作
Split URL:目前大概率用不到...
Execute:提交请求
Post data:post传参
Referer:引用页
User Agent:可理解为浏览器身份证
Cookies:Cookies 通常用于模拟已登录状态,以测试网站的授权和身份验证机制
②http两种请求(传参)方式:post,get
GET 方法:
a.使用 URL 来传递参数,参数会附加在 URL 的末尾,以问号 ? (英文)开始,并使用 & 符号分隔多个参数。
b.参数会被显示在地址栏中,因此不适合传递敏感信息,比如密码等。
c.适用于向服务器请求数据,但不适合用于传输敏感数据或大量数据。
POST 方法:
a.参数会包含在请求的消息体中,而不是直接暴露在 URL 中。
b.可以传输大量数据,并且更安全,因为参数不会暴露在地址栏中。
c.适用于向服务器提交表单数据、上传文件等操作。
注:在 PHP 中,可以使用 $_GET 和 $_POST 超全局数组来获取 GET 和 POST 请求中的参数值,例如 $_GET['json']获取 GET 请求中名为 json 的参数值,$_POST['id'] 获取 POST 请求中名为 id 的参数值。
③json_decode 是一个 PHP 函数:
用于将 JSON 格式的字符串解码为 PHP 变量。它接受一个 JSON 格式的字符串作为参数,并返回对应的 PHP 变量。如果成功解码,json_decode 函数将返回与 JSON 字符串对应的 PHP 变量。这个 PHP 变量可以是一个关联数组、一个数字、一个字符串、一个布尔值、null 或者一个包含这些类型的混合类型的数组。如果解码失败,函数将返回 null。
json_decode 函数还可以接受第二个参数,用于指定返回值的数据类型。默认情况下,它返回一个关联数组。如果将第二个参数设置为 true,它将返回一个关联数组;如果设置为 false 或不指定,则返回一个对象。
示例:
$json_string = '{"name": "John", "age": 30, "city": "New York"}';
$array = json_decode($json_string, true);#解码 JSON 字符串并返回关联数组
print_r($array);
Array
(
[name] => John
[age] => 30
[city] => New York
)
注:需要注意的是,json_decode 函数默认要求传入的 JSON 字符串是 UTF-8 编码的。如果传入的字符串不是 UTF-8 编码,可能会导致解码失败。