01、靶机名称:Empire: LupinOne
02、靶机网址:https://www.vulnhub.com/entry/empire-lupinone,750/
03、参考文章:大余每日一攻防EMPIRE: LUPINONE(七)
04、文章目录:
主机发现
端口发现(服务、组件)
漏洞发现(获取权限)
22端口/ssh服务
组件漏洞
弱口令漏洞
80端口/http服务
组件漏洞
URL发现(目录、文件)
22端口/ssh服务
私钥泄露
提升权限
perm
sudo
sudo
一、主机发现
启动虚拟机,直接就获得了主机的IP地址。
二、端口发现(服务、组件)
使用命令sudo nmap 10.58.81.112 -n -Pn -p- --reason -sV -sC -O,获得主机开放的端口、提供的服务、使用的组件、组件的版本。
开发的端口 | 提供的服务 | 使用的组件 | 组件的版本 |
22/tcp | ssh | OpenSSH | 8.4p1 |
80/tcp | http | Apache | httpd 2.4.48 |
- | - | Linux | 4.15 - 5.6 |
三、漏洞发现(获取权限)
### 22端口/ssh服务
#### 01、组件漏洞
使用命令searchsploit OpenSSH,未发现OpenSSH 8.4p1组件的Nday漏洞。
#### 02、弱口令漏洞
使用命令hydra -C /usr/share/seclists/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt 10.58.81.112 ssh,未发现弱口令漏洞。
换一个字典,使用命令hydra -C /usr/share/wordlists/legion/ssh-betterdefaultpasslist.txt 10.58.81.112 ssh,仍未发现弱口令漏洞。
### 80端口/http服务
#### 01、组件漏洞
使用命令searchsploit Apache,未发现Apache httpd 2.4.48组件的Nday漏洞。
使用命令searchsploit Apache | grep -i httpd,未发现Apache httpd 2.4.48组件的Nday漏洞。
#### 02、URL发现(目录、文件)
1、访问首页http://10.58.81.112/,发现啥也没有,是静态页面,妥妥的CTF风格。
2.1、在端口发现(服务、组件)阶段,已经发现存在/robots.txt文件,且暴露了/~myfiles/目录。
http://10.58.81.112/robots.txt
访问http://10.58.81.112/~myfiles/目录,发现啥也没有。
2.2、使用命令dirb http://10.58.81.112 -r对网站目录和文件进行爆破,未发现新的目录和文件。
2.3、使用命令dirb http://10.58.81.112/~myfiles/ -r对/~myfiles/下的目录和文件进行爆破,未发现新的目录和文件。完了,game over了。
3.1、因为目录/~myfiles/前面有个~,是常规目录爆破字典里没有的,这可能是目标网站的特性,所以决定尝试爆破~前缀的目录。
使用命令wfuzz -c -z /usr/share/seclists/Discovery/Web-Content/common.txt –hc 404 http://10.58.81.112/~FUZZ进行模糊测试,还真发现了新的目录。
3.2、使用命令dirb http://10.58.81/112/~secret/ -r对/~secret/下的目录和文件进行爆破,发现有个文件/~secret/index.html。
访问文件/~secret/index.html,发现提示/~secret/目录下存在“我”的SSH私钥文件,看来目录爆破的强度是不够的,得用模糊测试。
同时还提示了“我”的名字是icex64,看来使用账号“icex64”和SSH私钥文件就能登录SSH服务了。
3.3、使用命令wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -z list,".txt"- --hc 403,404 http://10.58.81.112/~secret/FUZZFUZ2Z进行模糊测试,通过无文件后缀和“.txt”文件后缀两种后缀,并未发现SSH私钥文件。
3.4、难道是文件后缀不对?还是文件名字典不行?又或者是文件名要加前缀?是加~前缀吗?既然是SSH私钥文件,那就试试加.前缀吧。
使用命令wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -z list,".txt"- --hc 403,404 http://10.58.81.112/~secret/.FUZZFUZ2Z进行模式测试,发现SSH私钥文件/~secret/.mysecret.txt。
### 22端口/ssh服务
#### 03、私钥泄露
1、一般使用SSH账号和SSH私钥文件就能登录SSH服务了,但这个SSH私钥文件不知道被什么加密或编码了。如果是被加密就没辙了,没有解密算法和密钥。只能碰运气希望是被编码了,最终使用base58解码成功。
2.1、使用账号“icex64”和SSH私钥文件登录SSH服务,发现因为SSH私钥文件的文件权限是0644,可以被其它用户访问,不够安全,所以SSH服务就自动跳转成SSH密码登录了。使用命令chmod 0600 mysecret删除其它人访问SSH私钥文件的权限。
使用账号“icex64”和SSH私钥文件登录SSH服务,发现SSH私钥文件需要解密密钥。各位运维人员,你们看看这是人干的事吗。
2.2、使用命令/usr/share/john/ssh2john.py mysecret > mysecret.john将SSH私钥文件转成John需要的格式。
使用命令john mysecret.john --wordlist=/usr/share/wordlists/fasttrack.txt爆破SSH私钥文件的解密密钥,得到P@55w0rd!。各位运维人员,你们看看这才是人干的事。
3、使用账号“icex64”、SSH私钥文件、SSH私钥文件的解密密钥P@55w0rd!,最终成功登录SSH服务。
四、提升权限
#### 01、perm
使用命令find -perm 4000 2>/dev/null查看系统中的特权命令,未发现。
### 02、sudo
1、使用命令sudo -l查看当前用户的特权命令,发现可以免密使用arsene用户的身份执行/usr/bin/python3.9 /home/arsene/heist.py命令。
遗憾的是,arsene用户和icex64用户一样,都是普通用户,就算拿到arsened 的用户权限,也只是越权,还不是提权。
更遗憾的是,/usr/bin/python3.9和/home/arsene/heist.py命令都没有write权限,无法写入提权命令。
2、柳暗花明的是,/home/arsene/heist.py文件中import了webbrowser模块文件。如果有webbrowser.py文件的write权限,写入提权命令也是有效的。
幸运的是,有webbrowser文件的write权限,路径是/usr/lib/python3.9/webbrowser.py。
3、在GTFOBins搜索Python提权命令:
在/usr/lib/python3.9/webbrowser.py文件中写入提权命令。
4、免密使用arsene用户的身份执行/usr/bin/python3.9 /home/arsene/heist.py命令,获得arsene用户的权限,成功越权。
参考文章:
Python提权文章,发布于2021-06-03:Linux Privilege Escalation: Python Library Hijacking[1]
Python提权文章的中文翻译,发布于2021-06-09 :Linux提权:Python脚本利用劫持的三种方法[2]
该靶机网址,发布于2021-10-21:Empire: LupinOne[3]
猜测:靶机作者很有可能参考该Python提权文章,设计了该漏洞。
### 03、sudo
1、使用命令sudo -l查看当前用户的特权命令,发现可以免密使用root用户的身份执行/usr/bin/pip命令。
2、在GTFOBins搜索pip提权命令:
3、免密使用root用户的身份执行/usr/bin/pip命令,获得root用户的权限,成功提权。
参考资料
[1]
Linux Privilege Escalation: Python Library Hijacking: https://www.hackingarticles.in/linux-privilege-escalation-python-library-hijacking/
[2]Linux提权:Python脚本利用劫持的三种方法: https://www.4hou.com/posts/o8rj
[3]Empire: LupinOne: https://www.vulnhub.com/entry/empire-lupinone,750/