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

举报
黑色地带(崛起) 发表于 2023/02/17 17:21:19 2023/02/17
【摘要】 【JWT-KID漏洞】KID之目录遍历、命令注入、SQL注入

【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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。