如何深入理解$_REQUESTS数组


这篇文章主要为大家分析了如何深入理解$_REQUESTS数组的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何深免费云主机域名入理解$_REQUESTS数组”的知识吧。题目叫做诗,代码如下:漏洞解析 :这道题目包含了两个漏洞,利用这两个漏洞,我们可以往FTP连接资源中注入恶意数据,执行FTP命令。首先看到 第7行 代码,可以发现程序使用 cleanInput 方法过滤 GETPOSTCOOKIE 数据,将他们强制转成整型数据。然而在 第8行 处,却传入了一个从 REQUEST 方式获取的 mode 变量。我们都知道超全局数组 $_REQUEST 中的数据,是 $_GET$_POST$_COOKIE 的合集,而且数据是复制过去的,并不是引用。我们先来看一个例子,来验证这一观点:可以发现 REQUEST 数据丝毫不受过滤函数的影响。回到本例题,例题中的程序过滤函数只对 GETPOSTCOOKIE 数据进行操作,最后拿来用的却是 REQUEST 数据,这显然会存在安全隐患。想了解更多 $_REQUEST 信息,大家自己上官网学习。第二个漏洞的话,在代码 第21行 ,这里用了 == 弱比较。关于这个问题,我们在前面的文章中讲的也很细致了,大家可以参考:[红日安全]PHP-Audit-Labs题解之Day1-4 (Day4)。至于本次案例的攻击payload,可以使用: ?mode=1%0a%0dDELETE%20test.file ,这个即可达到删除FTP服务器文件的效果。本次实例分析,我们分析的是 WordPress 的 All In One WP Security & Firewall 插件。该插件在 4.1.4 – 4.1.9 版本中存在反射型XSS漏洞,漏洞原因和本次案例中的漏洞成因一致,官方也在 4.2.0 版本中修复了该漏洞。本次,我们将以 4.1.4 版本插件作为案例讲解。将下载下来的插件zip包,通过后台插件管理上传压缩包安装即可。本次发生问题的文件在于 wp-contentpluginsall-in-one-wp-security-and-firewalladminwp-security-dashboard-menu.php ,为了方便大家理解,我将问题代码抽取出来,简化如下:我们可以很清晰的看到,问题就出在 第25行render_tab3 方法中,这里直接将 REQUEST 方式获取的 tab 变量拼接并输出。而实际上,在 第20行 已经获取了经过过滤处理的 $tab 变量。我们来看一下 get_current_tab 方法:过滤函数的调用链如下图 第1行 ,接着 $tab 变量就会经过 wp_check_invalid_utf8 方法的检测。下面我们来看看攻击 payload (向 http://website/wp-admin/admin.php?page=aiowpsec&tab=tab3 POST数据 tab="> ):可以看到成功引发XSS攻击。我们最后再根据 payload 对代码的调用过程进行分析。首先,我们的 payload 会传入 wp-admin/admin.php 文件中,最后进入 第14行do_action(‘toplevel_page_aiowpsec’); 代码。在 wp-includes/plugin.php 文件中,程序又调用了 WP_Hook 类的 do_action 方法,该方法调用了自身的 apply_filters 方法。然后 apply_filters 方法调用了 wp-contentpluginsall-in-one-wp-security-and-firewalladminwp-security-admin-init.php 文件的 handle_dashboard_menu_rendering 方法,并实例化了一个 AIOWPSecurity_Dashboard_Menu 对象。接下来就是开头文章分析的部分,也就是下面这张图片:整个漏洞的攻击链就如下图所示:这里还有一个小知识点要提醒大家的是,案例中 $_REQUEST[“tab”] 最后取到的是 $_POST[“tab”] 的值,而不是 $_GET[“tab”] 变量的值。这其实和 php.ini 中的 request_order 对应的值有关。例如在我的环境中, request_order 配置如下:这里的 “GP” 表示的是 GETPOST ,且顺序从左往右。例如我们同时以 GETPOST 方式传输 tab 变量,那么最终用 $_REQUEST[‘tab’] 获取到的就是 $_POST[‘tab’] 的值。更详细的介绍可以看如下PHP手册的定义:对于这个漏洞的修复方案,我们只要使用过滤后的 $tab 变量即可,且变量最好经过HTML实体编码后再输出,例如使用 htmlentities 函数等。看完了上述分析,不知道大家是否对 $_REQUEST 数组有了更加深入的理解,文中用到的 CMS 可以从这里( All In One WP Security & Firewall )下载,当然文中若有不当之处,还望各位斧正。如果你对我们的项目感兴趣,欢迎发送邮件到 hongrisec@gmail.com 联系我们。Day16 的分析文章就到这里,我们最后留了一道CTF题目给大家练手,题目如下:关于“如何深入理解$_REQUESTS数组”就介绍到这了,更多相关内容可以搜索云编程开发博客以前的文章,希望能够帮助大家答疑解惑,请多多支持云编程开发博客网站!

相关推荐: 如何用Ngork实现外网访问你的本地Web项目

如何用Ngork实现外网访问你的本地Web项目,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言有时候你在本地写了一个web项目,地址是http:localhost:8080/XXX,但是你只能在…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/06 17:40
下一篇 02/07 09:50