替换单个字符时绕过PHP的str_replace()

时间:2014-01-29 17:29:02

标签: php security shell str-replace

所以,我正在使用DVWA(http://www.dvwa.co.uk/)研究一些PHP安全性。现在,我正在进行一项练习,作者试图教我们在易受攻击的应用程序上执行命令。在此级别中,it adds a very simple blacklist which removes important characters

$substitutions = array(
        '&&' => '',
        ';' => '',
    ); 

我显然可以使用其他一些字符来执行代码(例如|||&等),但我想知道我是怎么做的避免替换单个字符&#34; ;&#34;。我已经看到了一些例子,这些例子愚弄了代码,例如&#34; <scr<script>ipt>&#34;我尝过像#34; ;;;&#34 ;;试图用hex和base64等编码,但它没有用。

有没有办法在寻找单个字符时逃避str_replace()?这是PHP 5.5.3。

2 个答案:

答案 0 :(得分:0)

我不确定为什么作者会展示如何使用黑名单,它太容易被颠覆,也许这个想法在啧啧中被进一步粉碎。 http://en.wikipedia.org/wiki/Secure_input_and_output_handling

虽然您链接到的示例是“中等”级别,但即使是“更难”级别也不使用PHP过滤器FILTER_VALIDATE_IP

即使是REGEX也会做得更好。请参阅页面的下半部分:http://www.regular-expressions.info/examples.html

如果您正在尝试防范XSS攻击(提及错误的脚本标记),那么白名单是可行的方法。验证您希望获得或中止的内容。

修改

嗯...现在我看到该网站被称为诅咒易受攻击的网络应用程序,或许这个想法是教你所有可怜的例子......

答案 1 :(得分:0)

我发现这个page在我这样做时非常有用。事实证明,还有其他运营商可以使用除了&#39 ;;&#39;插入你自己的命令!

&#34; hard&#34;对此设置目前正在给自己带来一些麻烦,我认为可能有使用URL编码字符的解决方法或类似的东西,但还有待观察。