文章目錄

tinyshop商城使用余额支付的时候,签名机制存在问题。导致签名失效。可以篡改订单金额,从而实现一分钱支付任意金额的订单。

测试版本tinyshop最新版1.6

sign字段的签名算法如下:

public function buildSign($sort_para,$key,$sign_type = "MD5")
{
    //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
    $prestr = $this->createLinkstring($sort_para);
    //把拼接后的字符串再与安全校验码直接连接起来
    $prestr = $prestr.$key;
    $mysgin = $prestr;//md5($prestr);
    return $mysgin.'|||';
}

签名算法很正统,把参数拼接,再拼接安全校验码,然后md5.可是。。。可是。。。$mysgin = $prestr;//md5($prestr); 这里md5被注释掉了。经过测试发现,这个安全校验码是在安装的时候不会初始化。默认是NDHGFIUWYY943534578MNB,所以即使采用了md5做签名,也存在校验码泄露导致的签名机制失效。有了合法的sign就可以修改任意订单的金额了。


文章目錄