CTFshow web入门—web56
题目:
题目分析:
查看本题,发现本题为命令执行类题目,但是有一个很致命的点,那么就是他过滤了所有的字母和数字,以及一系列的符号。因此本题最值得推敲的点就是如何实现无字母数字的命令执行
通过拜读P神的一篇文章,其中《无字母数字webshell之提高篇》讲到了想要getshell,但是又被过滤了数字与字母时,需要如何利用。
在P神文章中>深入理解glob通配符<部分,讲到了我们上传到linux系统中的文件,都会被存放到/tmp目录下,并且传入生成的临时文件中,只有传入的php文件,中含有大写字母,且格式为/tmp/php???的形式,因此可以使用方法来选择传入的php文件/???/???[@-[]
此处为何最后一位需要用[@-[]来表示,这需要查阅ascii码表,可以看出,大写字母是被@和[两个字符所包围的,因此[@-[]可以用来表示所有的大写字母。
本题没有过滤符号.(点),因此可以想到linux中该符号.(点)的用法,与source命令用法相同:linxu中source命令和.(点)
总体分析后,可以post上传一个php文件,内容为所需执行的linux指令,然后使用glob通配符和.(点)来将其中的内容以linux指令的形式来进行执行。
开始解题部分:
构造一个post上传文件的脚本,用来上传我们所需的php文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="http://8f79b818-dffd-4d3e-bab6-7afde656b630.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
使用该页面来上传一个包含了所需执行指令的php文件,并使用burp抓包:
此处如果执行一次发现没有回显的话,在确保语句没有错误的前提下,多执行几次就有了
本题主要就是考察了使用.(点)来以命令执行上传的文件,以及如何在过滤了数字字母的情况下来进行命令执行。在学习web的一些进阶知识点时,阅读一些大师傅们的文章是能够让自己学习到很多东西的。