命令执行:使用文件包含绕过
ctfshow web32
读题和简单分析:
1 |
|
这里很简单明确:就是把shell flag php 这些关键词全部过滤了,主要是连后引号都过滤了,就不可以使用常规的命令执行了.
文件包含方法:
先说payloads:
1 | /?c=include$_GET[1]?>&1=data://text/plain,<?php system(“ls”);?> |
分割符
&:
这里就把这个指令分成了两部分:
前面一部分赋值给超全局变量$_GET[‘c’],后面一部分就是另外一段包含代码的对象,并不会赋值给前面的c变量.这两段是完全分开的。
?>绕过(这是我的易错点):
有个这样的机制:
php默认的机制,php中的?>符号前面的字符会自带分号,就绕过了分号”;”,十分巧妙.
总结:
使用文件包含解决命令执行题目,通法就是先将include函数包含一个参数传递给要被正则表达式检查的变量,然后再在后半部分,再包含php伪协议给前面部分的include函数读取,达到绕过preg_match并且执行命令的目的.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!