前置知识:PHP函数缺陷
测试环境 :piwigo CMS
漏洞URL:
漏洞文件位置:\include \functions_rate.inc.php
漏洞产生入口文件:/picture.php
picture.php中接受了一个GET方法action参数,作为switch...case...分支判断
而在case 'rate'中加载并调用了include/functions_rate.inc.php中 的rate_picture,并且进行POST放到对rate参数传参
注意在rate_picture方法中对rate的值使用了in_array方法来判断传进来的值是否在$conf['rate_items']中,并且没有加上第三个参数true,也就是说传进来的值不做类型判断,并且会强转来完成in_array的判断
找到$conf['rate_items']在config_default.inc.php定义,根据in_array可以知道rate只要前面数字在$conf['rate_items'],后面可以写任何字符,如1,select,都是可以满足条件的
继续往后看,可以看到$rate是会传进sql语句的,所以这里绕过in_array是会存在sql注入的
根据他写的注释可以大概知道$rate是用与评价的一个参数 ,而rate判断在不1-5之间,应该是一个评分参数
上传一张图片测试一下
创建一个普通用户,打开照片,确实在点击更改投票时得到了一个传rate的url
使用sqlmap跑一下,sqlmap -u "http://127.0.0.1/piwigo/picture.php?/1/category/1&action=rate&rate=1" --data="rate=1" --dbs