前言
也是差点又忘了一天要做一道ctf题了,做一道题时候看到了这道题,说实话,find命令自己真不熟,所以这里来了解一下
做题
进入页面发现有个
随便输点东西,我只能说没有屁用,然后源码发现
function search() {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("res").innerHTML = xmlhttp.responseText;
}
}
resdiv = document.getElementById("res");
resdiv.style.display = "block";
xmlhttp.open("GET", "./search.php?search=" + document.getElementById("search_input").value, true);
xmlhttp.send();
}
我们只看重点 xmlhttp.open("GET", "./search.php?search=" + document.getElementById("search_input").value, true);
理解一下document.getElementById("search_input")是什么意思
document.getElementById("search_input") 是一个 JavaScript 代码片段,用于获取具有指定 ID 的 HTML 元素对象。原来如此,我们进入那个地方随便输点东西,我们输入1
发现这些都是文件名啊,那就是把带1的文件都找出来了,那我们输入flag,没有东西,难道flag不叫flag,但是如果对find命令熟悉的话,这就是个find命令的作用啊,当然我不熟悉,所以我果断看了wp,sg
find命令
find /path 表示找/path下所有的文件
find /path/to/dir -name "*.txt"
这个命令将在 /path/to/dir 目录中查找所有扩展名为 .txt 的文件。
find /path/to/dir -name "*.log" -exec ls {} \;
这个命令将在 /path/to/dir 目录中查找所有扩展名为 .log 的文件,并删除它们。这就是ctf常用的
我们利用方法就是最后一个,开始尝试
flag -exec cat {} \;不行,没有flag吗???
env -exec env {} \;成功,意思是在env目录执行env命令
成功找到flag
find 命令用于查找文件和目录。在这个命令中,env 是需要查找的文件名,-exec 是 find 命令的选项,用于在找到匹配的文件时执行特定的命令。env {} \; 是 -exec 选项的一部分,表示要执行的命令是 env,其中 {} 会被替换为查找到的文件名,而 \; 是命令的结束符号。
我看到一个神奇的payload 1 -exec env \;
删去了{},但是如果删去 {},find 命令将无法将查找到的文件名作为参数传递给 -exec 选项指定的命令。奇怪,而且这个命令还更好,我前面可以输的内容更随便,输入1,2,3,5,都可以执行命令,只要纯在目录就可以