跟踪用户输入
-
$_POST用于获取post参数
-
$_GET 用于获取get参数
-
$_REQUEST用于获取post或get参数
-
$_SERVER用于获取各种http请求头的值
-
$_COOKIE用于获取cookie的值
-
$_FILES用于文件
这些是开发人员可以获得用户输入的方式。因此,当挖掘wordpress插件漏洞,或者只是攻击任何php代码时,最好先查看这些信息,并从中跟踪用户输入。我们可以通过grepping来实现。
示例
例如,我们将破解并复制 Mail Masta 1.0中包含的本地文件。
因此,我们从grepping $_GET开始,找出所有接受用户输入的php代码。这样做时,一个php文件inc/campaign/count_of_send.php似乎很有趣。
用代码编辑器打开该文件。
代码相当简单,在第4行,它获取get参数‘pl’的值,然后将其传递给include函数。Include可能会导致LFI本地包含文件漏洞,因此在这里我们发现了一个LFI漏洞。现在,让我们尝试对它进行复现。
可以看到它是有效的,我们挖掘到了一个LFI漏洞。这就是通过跟踪用户输入发现漏洞的方式。
HOOKS
在wordpress中,有一个叫做hook的东西。hook是开发人员将函数挂钩到wordpress中预定义位置的方法,这可以通过add_action()函数来完成。
现在在测试时,我们需要注意一些hook:
-
wp_ajax_$action_name用于挂钩到ajax(admin-ajax.php)
-
admin_post_$action_name用于挂钩到admin-post.php
-
wp_ajax_nopriv_$action_name、admin_post_nopriv_$action_name同上但不需要认证
-
admin_init用于挂钩每个管理页面加载
-
wp_loaded 用于在安装插件时挂钩
-
admin_action_ 还不确定这个,但还是要注意
-
profile_update 和personal_options_update 在用户编辑他/她的帐户时调用。
现在就像上面一样,我们必须找到是否有函数挂钩到这些hook上,这可以通过 grepping来完成。
示例
在本例中,我们将在Double Opt-In 2.0.9中复现SQL注入漏洞。
因此,我们首先使用grep查找与wp_ajax挂钩的任何操作。
我们在public/class-doifd.php中找到了wp_ajax_populate_download_edit_form。让我们打开文件并分析代码。
在这里,我们可以看到它与populate_download_edit_form函数挂钩。现在让我们来分析一下该函数
在这里,我们可以看到它获取post参数id的值并将其存储到$value变量中,然后在sql查询中使用$value变量,而无需过滤或准备语句,使其容易受到SQL注入攻击。现在让我们复现该漏洞。ajax钩子是wp_ajax_populate_download_edit_form,所以ajax操作参数是populate_download_edit_form,我们还将提供id参数。
对于基于布尔的poc,我们将使用and 1=1有效载荷,使用and 1=1将得到正常响应。
但是使用and 1=2响应为null ,这意味着确实存在SQL注入漏洞。
这就是你在挖掘wordpress插件漏洞时检查钩子的方式。记住在测试时还要检查 wp_ajax以外的其他钩子。
推荐阅读
学习更多技术,关注我:
觉得文章不错给点个‘再看’吧