【问题标题】:Bypass PHP's str_replace() when replacing a single character替换单个字符时绕过 PHP 的 str_replace()
【发布时间】:2014-01-29 17:29:02
【问题描述】:

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

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

我显然可以使用其他一些字符来执行代码(例如|||& 等),但我想知道如何避免替换单个字符“ ;"。我已经看到了一些示例,这些示例使用“<scr<script>ipt>”之类的代码来欺骗替换,并且我尝试了“;;;”之类的东西;尝试用 hex 和 base64 等进行编码,但没有成功。

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

【问题讨论】:

  • 可以用正则替换吗?
  • 你对传入的字符串做了什么?你为什么使用str_replace?大多数函数都有自己应该使用的“转义”函数。 (例如mysql_real_escape_stringescapeshellcmd
  • “逃避替代”是什么意思?这意味着什么?你见过哪些例子?
  • $str = bin2hex(';'); // ... echo hex2bin($str);
  • 我不是作者。这是一个应用程序,用于展示开发人员所犯的常见安全错误,并教授如何利用和纠正这些错误。作者用它来展示一些开发人员使用的可能解决方案(将已知的坏东西列入黑名单),并希望我了解如何绕过它 - 告诉我这不是一个好的解决方案。

标签: php security shell str-replace


【解决方案1】:

我发现这个page 在我这样做时很有用。事实证明,除了“;”之外,还有其他运算符可以使用。插入你自己的命令!

对此的“硬”设置目前给我自己带来了一些麻烦,我认为可能存在使用 URL 编码字符或类似的解决方法,但仍有待观察。

【讨论】:

    【解决方案2】:

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

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

    即使是正则表达式也会做得更好。在页面的下半部分查看:http://www.regular-expressions.info/examples.html

    如果您试图防止 XSS 攻击(您提到了一个损坏的脚本标签),那么白名单就是您的选择。根据您期望获得或中止的结果进行验证。

    编辑

    嗯..现在我看到这个网站叫做 Damned Vulnerable Web App,也许这个想法是为了教你所有糟糕的例子......

    【讨论】:

    • 确实,它向我展示了糟糕的编码实践。我能够使用不在列表中的其他字符来规避保护,并且我了解如何使用诸如“ipt>”之类的字符串来规避和欺骗str_replace,以形成单个“
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多