六.jwt
这题我又不会写
先来了解下jwt
**JWT(JSON Web Token)**是一种基于JSON的开放标准(RFC 7519),主要用于在网络应用环境间传递声明信息。JWT通常用于身份验证和信息交换,确保在各方之间安全地传输信息。一个JWT实际上是一个被编码的JSON字符串,包含了一系列声明。它由三部分组成:Header(头部)、Payload(载荷)[&和Signature(签名)&]。
JWT结构详解
Header(头部)
Header部分用于描述JWT的元数据,包括令牌的类型(JWT)和所使用的签名算法(如HMAC SHA256或RSA)。例如:
{
"typ": "JWT",
"alg": "HS256"
}
这个JSON对象会被Base64编码成字符串,形成JWT的第一部分。
Payload(载荷)
Payload部分存储要传输的信息,如用户的身份信息和一些声明。这里可以包含三种类型的声明:注册声明、公共声明和私有声明。例如:
{
"userId": "b07f85be-45da",
"iss": "https://provider.domain.com/",
"sub": "auth/some-hash-here",
"exp": 153452683
}
这部分信息也会被Base64编码,形成JWT的第二部分。需要注意的是,Payload中的信息是可以被任何人解码阅读的,因此不应该存放敏感信息。
Signature(签名)
Signature部分是对前两部分的签名,防止数据篡改。生成签名的方法是将编码后的Header和Payload以及一个密钥使用Header中指定的算法进行签名。例如,如果使用HMAC SHA256算法,签名会是这样的:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
这个签名确保了JWT在传输过程中未被篡改。
一、JWT 的核心作用
1. 身份认证(Authentication)
2. 信息交换与授权(Authorization)
3. 安全传输数据
我的理解就是 JWT在这里起身份认证的作用,然后整个过程相当于垂直越权
先随便注册一个账号
然后登录,点击个人中心
F12,点击网络,搜索JWT
可以使用jwtcrack工具中的crackjwt.py脚本用字典爆破出密钥
使用方法:
python crackjwt.py JWT 字典
得到密钥为 SYSA
再把JWT放到在线解析网站(下面3个随便选一个即可)
把username改为admin,把密钥改为SYSA ,然后进行编码
用编码后的JWT替换原来的JWT
得到flag
flag{ec39c705cfb5295f9dddcedc819a1659}
七.login
F12可以看到给了学号密码
学号密码提交20200101,显示提交成功,但没啥反应
提交20200102试试,发现显示了f
然后每次加1,把每次显示的 合在一起就是flag
flag{dlcg}
八. iphone
进来后是这样的
翻译一下
【抱歉,管理菜单必须从 iPhone 或iPad 查看;】这句话是重点
这里又有个知识点了
User-Agent
User-Agent 是 HTTP 请求头中的一个字段,用于标识客户端的设备、操作系统、浏览器等信息。服务器通过解析 User-Agent,可以判断访问者的来源,从而决定是否允许访问或提供特定的内容。
在网页爬虫中,默认的 User-Agent 通常会暴露爬虫的身份,导致被服务器拒绝访问(如返回 HTTP 403 错误)。通过修改 User-Agent,可以伪装成普通用户的浏览器,从而绕过限制。
如何获取网页的 User-Agent
在浏览器中,可以通过以下步骤获取 User-Agent:
打开目标网页,按下 F12 或点击浏览器右上角的“更多工具”选择“开发者工具”。
刷新网页后,选择“Network”选项卡,再点击“Doc”。
在右侧的“Headers”中,向下滚动找到 User-Agent 字段,复制其内容。
User-Agent 的组成结构
User-Agent 通常由以下部分组成:
Mozilla/5.0:历史遗留部分,几乎所有 User-Agent 都包含此字段。
操作系统信息:如 Windows NT 10.0 表示 Windows 10 系统,X11; Linux x86_64 表示 Linux 系统。
引擎版本:如 AppleWebKit/537.36,表示浏览器的渲染引擎。
浏览器版本:如 Chrome/81.0.4044.113,表示浏览器的具体版本。
通过理解 User-Agent 的结构,可以根据需要自定义字段内容,以适应不同的爬虫场景。
所有只需要通过修改 User-Agent,可以伪装成iphone用户的浏览器,从而绕过限制。
Mozilla/5.0 (iPhone; CPU iPhone OS 16_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Mobile/15E148 Safari/604.1
轻松拿下
flag{ba4c2f175f0dba2f2974e676c6dfbbab}
九.浮生日记
随便尝试的输入一些东西,还尝试了一些注入,但是没啥用
F12后有些新发现
其实上面也有
弹个窗 ,让我想到了xss的一些知识
输入<script>alert(1)</script>试试,发现script没了,应该是被注释掉了
根据源代码先闭合value,然后再独立出一个script执行恶意代码
"><sscriptcript>alert(1)</sscriptcript>
这时候就会弹出来一个弹窗,点确认
flag{747b11f075d2f6f0d599058206190e27}
十.$$
又是php
解析一下
<?php
/*
PolarD&N CTF
*/
highlight_file(__file__); // 显示当前PHP源代码,方便审计
error_reporting(0); // 关闭错误报告,防止信息泄露
include "flag.php"; // 包含存储flag的文件
$a=$_GET['c']; // 获取URL参数c的值
if(isset($_GET['c'])){ // 检查参数c是否存在
if(preg_match('/flag|\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $a)){
// 使用正则表达式过滤危险字符:
// 包括flag字符串、空白字符、各种符号以及数字和HTML标签
die("oh on!!!"); // 匹配到过滤字符时终止执行
}
else{
eval("var_dump($$a);"); // 执行动态生成的PHP代码,使用变量变量语法
}
}
GLOBALS
GLOBALS
是 PHP 中的一个超全局变量(Superglobal Variable),其作用是提供对所有全局变量的访问。总结:利用流程
- 用户访问 URL:
http://example.com/index.php?c=GLOBALS
- 代码执行
eval("var_dump($GLOBALS);");
var_dump()
输出所有全局变量,包括$flag
- 用户从输出中提取 flag 值
输入?c=GLOBALS
flag{9f8a2133f0cad361ff6d22a445c2531a}