string.strip_tags
使用此过滤器等同于用 strip_tags()函数处理所有的流数据。可以用两种格式接收参数:一种是和 strip_tags()函数第二个参数相似的一个包含有标记列表的字符串,一种是一个包含有标记名的数组。strip_tags — 从字符串中去除 HTML 和 PHP 标记.该函数尝试返回给定的字符串 str 去除空字符、HT
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。
注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。
注释:该函数是二进制安全的。
ML 和 PHP 标记后的结果
先测试以下功能
<?php
echo strip_tags($_POST[1]);
发现去除了<>标签,
在标签中加内容会发生啥
把标签中的内容都去掉了
这样就可以通过string.strip_tags去掉标签中的内容,当然<一个标签后的内容也可以去掉
abc<?aaaaa通过过滤就变成了abc
filterchain可以通过字符转换的差异构造出任意字符,原理可看探姬博客
详细看这个项目:
https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d
当然也有可以直接用来梭的脚本:
https://github.com/synacktiv/php_filter_chain_generator
如果构造出要的字符然后在字符后面加个<?php可以把之后的数据清空,然后只剩下需要的字符了
比如我要构造XYCTF
通过脚本构造XYCTF<?
然后在最后手动加个string.strip_tags过滤器,就可以吧标签后的数据清空
举个死亡die的例子
部分代码
$content = $secret . $filename;
file_put_contents($filename, $content);
其中$secret为<?php die();
<?php
highlight_file(__FILE__);
error_reporting(0);
$p=$_GET['p'];
if(preg_match("/http|=|php|file|:|\/|\?/i", $p))
{
die("waf!");
}
$payload="php://filter/$p/resource=/etc/passwd";
if(file_get_contents($payload)==="XYCTF"){
echo file_get_contents('/flag');
}
$p只能传入filter过滤器链,其他被过滤了
我们构造XYCTF<然后可以通过string.strip_tags把标签之后的乱码消掉就得到XYCTF了