一个新发现的靶场hackmyvm,随便拿台靶机试试难度,本期靶机boxing
url用户名
这个之前CTF题里遇到过,这里用来绕SSRF的访问域名限制了,用得挺巧妙的。先来看一下代码
<?php
if(isset($_GET['url'])){
$url = $_GET['url'];
if (!preg_match("/^http[s]?:\/\//", $url)) {
$url = "http://" . $url;
}
if (strpos($url, "http://boxing.hmv") === 0 || strpos($url, "https://boxing.hmv") === 0) {
$content = file_get_contents($url);
echo $content;
} else {
echo "Unauthorized URL.";
}
}
?>
简答来说就是输入的内容会被拼接到http://后,再判断是不是http://boxing.hmv,如果是就读取
逻辑很简单,问题就出在拼接。如果我此时想访问这台机子的127.0.0.1:5000,如果我直接输入就会变成http://127.0.0.1:5000,没法访问。但如果我输入的是http://boxing.hmv@127.0.0.1:5000,这样就既能满足判断条件(因为是strpos位置匹配而不是preg_match这种全匹配),因此就能过
原理可以看这篇靶场笔记的parse_url与curl一栏https://redshome.top/2024/06/30/靶场笔记第十九章/
特殊字符fuzz
有时候碰到理论上能行但却没有执行结果的时候,确保拼接起来的命令能执行后,要思考的就是是否过滤掉了特殊字符。比如空格、引号这种老黑户
这个时候就可以把空格或者引号的地方fuzz一下换成别的,比如+
这个神奇的符号。也许你直接在shell运行不对,但放到web上就对了,原因有可能是apache2启用了Rewrite配置或者php做了str_replace(在本题php里没找到replace,因此猜测是apache2,不过粗略搜索后也没发现,就有点发懵了= =)
放上fuzz的语句供参考
ffuf -u 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=asdFUZZ-eFUZZid' -w chars.txt -fs 2548
incrontab
简单来说就是一个处理正在监听中的系统事件的程序,而这个程序在这台机子里由一个叫incrontab.sh的脚本运行,用来监听一些事件,其中有一个事件如下
echo '/home/cassius/user.txt IN_ATTRIB /opt/sos/sos.sh' | incrontab -
意思就是当user.txt被更改权限时触发sos.sh运行
file *
这段指令的意思乍一看就是把所有文件名匹配并填入这个*。而这么做的操作空间就很大了,可以利用file的-f参数来达到读取文件的目的。
file -f fname 这段指令的意思是将fname的内容当作文件名被file处理。而问题就出在如果fname内容不存在,则会出现下面这一幕
告诉你无法打开,然后又把内容告诉你,和你说是什么无法打开。这样我们不就能读文件内容了吗?而操作步骤也很简单,在执行file *的目录下创建一个名为-f的文件就行了,因为由于linux的字符排序,-
的匹配优于字母(但低于数字和.),因此只要保证这个运行目录下不存在数字开头的文件名即可
小结
这靶场还挺有意思,发给用户ova文件自己起虚拟机,然后又可以交flag。靶机的安全措施就是把grub的编辑权限改成了需要登录,只能说这平台很自信,有信心自己的靶机能适配所有网络环境🤣(因为vulnhub的离线靶机启动一般都需要进虚拟机修改网卡名称,起的网卡和/etc/network配置文件里的网卡永远是两个名字……)