WordPress <= 1.5.1.1 - SQL注入分析

  • 影响条件:
  • 程序:WordPress
  • 版本:<= 1.5.1.1
  • 严重程度:高危

简要

在Wordpress调用模版时候,其功能之一是在右侧显示当前存档的类型,进行对应类型查询的时候没有使用干净的参数导致注入

正文

首先将断点下在问题点追寻处理流程

如下:
C3110BB5-4E9D-45E1-B40E-3A3E031C4AD2.png

这是最后参数被污染之后所处的位置

546EC9F9-E58D-453F-846F-3BDF73FC1D9E.png

为了理解wordpress的漏洞就要研究wordpress的整个处理流程.

我们可以看到#8中的代码

index.php

1
2
3
4
5
<?php
/* Short and sweet */
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
?>

很简单的两行代码

Short and sweet:grinning:

包含了wp-blog-header.php

wp-blog-header.php主要进行了一些配置文件的初始化,以及对 GET传入的参数进行了构建。

构建好参数之后经过处理,应用到对应的模板上面.

构建参数在主要是如下代码

1
2
3
// Call query posts to do the work.
$posts = &query_posts($query_string);

query_posts()函数的函数原型,如下:

1
2
3
4
function &query_posts($query) {
global $wp_query;
return $wp_query->query($query);
}

query_posts申明了一个$wp_query的全局变量,这是很重要的一个全局变量.

query()函数原型,如下:

1
2
3
4
function &query($query) {
$this->parse_query($query);
return $this->get_posts();
}

query函数做了对参数的解析赋值,之后return调用了一个get_posts()函数这个函数做了很多拼接并进行数据库查询语句的动作.

我还发现了,在#4中的load_template()

1
2
3
4
5
6
7
8
function load_template($file) {
    global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query,
            $wp_rewrite, $wpdb;
            
                extract($wp_query->query_vars);
                
                    require_once($file);
                    }
这里的`extract($wp_query->query_vars);`貌似是一段废代码,因为`$wp_query->query_vars`是`NULL`,extract()接受的参数是array.

在`#2`中![9E14F734-4D79-4D7F-A356-9F4FFA32B805.png](http://lonelyrain.me/usr/uploads/2016/06/1158169231.png)

这个函数从`$wp_query`中取出了`cat`参数被污染的值,并且最终传入了`functions.php`中的`get_category()`拼接的语句中执行了注入的语句.

![D651BF01-6F92-4489-9443-F775DBF723C0.png](http://lonelyrain.me/usr/uploads/2016/06/957824432.png)

Comments

⬆︎TOP