(41.1)【JWT-KID漏洞】KID之目录遍历、命令注入、SQL注入

目录

一、密钥泄露

二、KID

2.1、原理:

2.2、示例:

三、目录遍历

3.1、原理:

3.2、KID之目录遍历

3.2.1、前提:

3.2.2、利用:

3.2.3、示例:

3.2.4、利用:

3.2.5、扩展:

四、命令注入

4.1、前提:

4.2、原理:

4.3、KID之命令注入

4.3.1、原理:

4.3.2、示例:

4.3.3、拼接符:

五、SQL注入

5.1、原理:

5.2、KID之SQL注入

5.2.1、原理:

5.2.2、示例:


 (事缓,则圆)


一、密钥泄露

无法暴力破解密钥,通过其他途径获取密码,并伪造任意token签名

eg:git信息泄露、目录遍历,任意文件读取、XXE漏洞等


二、KID

2.1、原理:

(1)KID代表“密钥序号”(Key ID头部可选字段),标识认证token的密钥。

(2)接收者能够使用密钥ID获得标识的密钥,也可以通过使用密钥ID而不是传递实际密钥来识别占有证明密钥。

(3)接收者可以通过在JWT中包含“ cnf”声明来以加密方式确认演示者拥有该密钥的证据,该声明的值为JSON对象,其中包含用于标识密钥的“kid”成员

— — — —

2.2、示例:

eg:KID参数

此字段用户可控制,可能会操纵它并导致危险的后果

{
        "alg": "HS256",

         "typ": "JWT",

        "cnf":{

        "kid": "dfd1aa97-6d8d-4575-a0fe-34b96de2bfad"

        }   //使用密钥dfd1……验证token
}


三、目录遍历

3.1、原理:

(1)利用没有充分过滤用户输入的…/之类的目录跳转符

(2)用户通过在输入框提交目录路径到服务器(目录跳转符…/,也可是目录跳转符的ASCII或unicode编码等)

(3)服务器跳转到相应目录来遍历任意文件,并反馈到前端

3.2、KID之目录遍历

3.2.1、前提:

KID是从文件系统中检索密钥文件的

— — — —

3.2.2、利用:

如果在使用前没有清理KID,通过目录遍历文件系统

利用文件系统中指定的任意文件作为认证密钥

— — — —

3.2.3、示例:

设定应用程序使用public文件作为密钥,并用该文件给HMAC加密的token签名

"kid": "../../public/css/main.css"   //利用公共文件main.css验证token

— — — —

3.2.4、利用:

(1)进行web漏洞扫描

(2)发现目标网站存在目录遍历漏洞

(3)进行网站目录爆破(eg:使用Dirb进行爆破)

(4)尝试进行目录遍历

— — — —

3.2.5、扩展:

爆破目录后

(1)寻找dbadmin后台数据库

(2)使用sqlmap进行密码爆破

(3)进入数据库,创建shell.php数据库

(4)生成php的shellcode(反弹网站的webshell)

(5)编辑shellcode.php,设为本机ip,侦听端口

(6)完善数据库信息,Default Value值处填执行shellcode的代码

(7)搭建http的web服务

(8)反弹,获取用户权限


四、命令注入

4.1、前提:

①使用了内部调用shell的函数:system(),exec()等;②应用程序的权限降很高,未降到最低③将外界传入的参数没有足够的过滤,直接传递给内部调用shell的函数;④参数中shell的元字符没有被转义

4.2、原理:

web应用在调用函数执行系统命令的时候,如果未对用户输入过滤,用户将自己的输入作为系统命令的参数拼接到命令行中,就会造成命令注(命令执行)的漏洞

4.3、KID之命令注入

4.3.1、原理:

如果KID参数直接传到不安全的文件,攻击者只需在输入的KID文件名后面添加命令,即可执行系统命令,读取操作可能会让一些命令注入代码流中。

— — — —

4.3.2、示例:

"key_file" | whoami;//查询当前用户

……

— — — —

4.3.3、拼接符:

符号说明
;前后命令依次执行注意前后顺序,若更变目录,则必须在“一句”指令内
|管道,只输出后者的命令当第一条命令失败时,它仍然会执行第二条命令
||前命令执行失败后,才执行后命令
&前台执行后任务,后台执行前任务如 a&b&c 则显示c的执行信息,a b在后台执行
&&前命令执行成功后,才执行后命令
``(反引号,仅linux)即命令替换,echo `date`,输出系统时间使用反引号运算符的效果与函数shell_exec()相同,但在激活了安全模式或者关闭了shell_exec()时是无效的
$(command)这是命令替换的不同符号。与反引号效果一样。echo $(date),输出系统时间.

五、SQL注入

5.1、原理:

Sql 注入攻击是通过将恶意的 Sql 查询或添加等操作语句插入到输入参数中

后台服务器解析执行sql语句对数据库进行操作

并将结果返回到前端

5.2、KID之SQL注入

5.2.1、原理:

如果KID在数据库中检索密钥

攻击者在KID参数上利用SQL注入来绕过JWT安全机制,并返回任意值

5.2.2、示例:

"kid":"1' UNION SELECT 'key';--"  //使用字符串"key"验证token

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑色地带(崛起)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值