基础信息
靶机链接: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系统按照渗透测试的过程进行操作,从信息收集到提权只需要按部就班就可以了,难点在于取证,因为是第一次接触需要取证的靶机没有思路,看了大佬的操作之后,自己进行复现也有所收获。
nmap 192.168.1.0/24
使用nmap进行扫描,得到ip地址:192.168.1.106
nmap -sV -p- -O -A 192.168.1.106
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)
访问192.168.1.106
使用dirb爬取网站链接
没有发现可利用的信息
查看之前扫描端口的详细信息
得知可以直接匿名登录ftp
用户:ftp 密码:无(直接回车)
发现存在两个文件使用wget命令将文件下载到kali中
wget -r ftp://192.168.1.106
进入目录查看下载文件,通过README.txt提示知道这个压缩包中保存的是密码文件
通过fcrackzip进行爆破
fcrackzip -D -u -p /usr/share/wordlists/rockyou.txt sshpass.zip
成功爆破
密码:seahorse!
解压之后获得密码,尝试ssh远程登录,用户名Henry、Michael都不对,查看靶机描述,发现可疑用户名squiddie
进行尝试,登录成功
用户:squiddie
密码:Squ1d4r3Th3B3$t0fTh3W0rLd
但是对squiddie的权限限制较大不能直接使用该命令升级,只能一步一步进行操作
python -c "import pty;pty.spawn('/bin/bash')"
使用sudo -l 查看该用户可使用的命令
直接使用find命令进行提权
sudo find /home -exec /bin/bash \;
在路径、home/squiddie/Desktop下发现use.txt
查看文件是一串md5密文
dd69f649f3e5159ddd10b83b56b2dda2
解密:2004737969
在/home/microsystems/Desktop目录下发现root.txt
在/root/Desktop中发现note.txt和proof.txt
解密得到:836934778
crontab -l
*/2 * * * * /etc/cron.daily/backup
每隔两分钟执行一次/etc/cron.daily/backup文件脚本。参考
查看文件脚本,仅root权限可以执行
文件从/root/Documents/.docs向/var/backups/.docs备份
查看/var/backups/.docs目录,存在很多表格
将文件拷贝到ftp的目录下下载到kali中
在Password_keeper文件夹下发现用来查看密码的小程序,发现查看密码也需要输入密码
表格密码 密文
usage.txt使用说明
要想破解表格密码,需要得到小程序的输入密码,需要将程序反编译,并分析代码
这个程序是用pyinstaller编译的,可以使用pyinstall进行反编译
(1)反编译工具:https://github.com/extremecoders-re/pyinstxtractor
python2 ./pyinstxtractor.py ../password_keeper.exe
执行过命令之后会在pyinstxtractor.py同目录下生成一个文件夹
现在的pyc文件还不是源代码,需要继续反编译
(2)反编译pyc文件
链接:https://tool.lu/pyc/
分析源代码
#!/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 / __/ (_| | <| |_| |_____| . \\ __/ __/ |_) | __/ | '
print ' \\_/\\_/ \\___|\\__,_|_|\\_\\__, | |_|\\_\\___|\\___| .__/ \\___|_| '
print ' |___/ |_| '
iv = '166fe2294df5d0f3'
key = 'N2FlMjE4ZmYyOTI4ZjZiMg=='
database = read_database()
loop = True
while loop:
print ''
print 'Choose what you want to do: '
print '1) See your passwords!'
print '2) Generate a cipher-password'
print '3) Close'
option = raw_input('Insert your selection here --> ')
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()函数
当输入的密码值正确时if条件成立,显示表格密码
输入的密码是base64(key)
N2FlMjE4ZmYyOTI4ZjZiMg==
解密:7ae218ff2928f6b2
运行.exe查看密码
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
AccountabiltyReportMorning-1112018
MoneyBalance
Pending_to_erase
一开始的渗透到提权都是思路清晰,因为之前没有接触过取证在取证的时候不懂,参考了大佬的做法自己复现一遍,加深了印象
https://www.freebuf.com/articles/web/261787.html