[HMV]第一章
一个新发现的靶场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内容不存在,则会出现下面这一幕 ...