MENU

WordPress插件漏洞挖掘手册

March 29, 2017 • Security

Cross-Site Scripting (XSS)

检查以下PHP变量是否回显到页面或存储在数据库中,是否进行过滤或编码输出.

$_GET
$_POST
$_REQUEST
$_SERVER['REQUEST_URI']
$_SERVER['PHP_SELF']
$_SERVER['HTTP_REFERER']
$_COOKIE

不安全的API函数

以下函数的不安全使用可能导致XSS:

add_query_arg()
remove_query_arg()

参考:

DISALLOWUNFILTEREDHTML

动态测试时wp-config.php文件中的以下设置(默认)会防止管理员和编辑器用户嵌入执行JavaScript/HTML:

define( 'DISALLOW_UNFILTERED_HTML', true );

SQL Injection

不安全的API方法(过滤/转义)

$wpdb->query()
$wpdb->get_var()
$wpdb->get_row()
$wpdb->get_col()
$wpdb->get_results()
$wpdb->replace()

安全使用API方法

$wpdb->insert()
$wpdb->update()
$wpdb->delete()

安全代码 prepared statement:

<?php $sql = $wpdb->prepare( 'query' , value_parameter[, value_parameter ... ] ); ?>

不安全的转义('securing') API方法:

显示/隐藏SQL错误:

<?php $wpdb->show_errors(); ?> 
<?php $wpdb->hide_errors(); ?> 
<?php $wpdb->print_error(); ?>

File Inclusion

include()
require()
include_once()
require_once()

PHP Object Injection

unserialize()

Command Execution

system()
exec()
passthru()
shell_exec()

PHP Code Execution

  • eval()
  • assert()
  • preg_replace() PHP >= 5.5.0之后"e"被弃用,并在PHP >= 7.0.0中删除

Authorisation

  • is_admin() 检查用户是否以管理员身份验证
  • is_user_admin() 与上述相同
  • current_user_can() 用于检查授权

Open Redirect

  • wp_redirect() 能可用于重定向到用户提供的URL.如果用户输入未被过滤理或验证可能导致重定向漏洞.

Cross-Site Request Forgery (CSRF)

  • wp_nonce_field() 将CSRF token添加到表单中
  • wp_nonce_url() 将CSRF token添加到URL中
  • wp_verify_nonce() 检查CSRF token服务端
  • check_admin_referer() 从管理界面检查CSRF token服务端

SSL/TLS

  • CURLOPT_SSL_VERIFYHOST 如果设置为 则不会在主机证书中检查名称
  • CURLOPT_SSL_VERIFYPEER 如果设置为 FALSE 则不检查证书(inc chain)是否被信任

参考

Archives QR Code
QR Code for this page
Tipping QR Code