文件trade.php: $message = trim($message); if($message) { $message = daddslashes($tradelog['message'], 1)."\t\t\t".$discuz_uid."\t".$discuz_user."\t".$timestamp."\t".nl2br(strip_tags(substr($message, 0, 200))); //$message用substr处理了下,取前200个字符 } else { $message = daddslashes($tradelog['message'], 1); } $db->query("UPDATE {$tablepre}tradelog SET status='$offlinestatus', lastupdate='$timestamp', message='$message' WHERE orderid='$orderid'"); //这个地方$message直接进入sql语句了:) showmessage('trade_orderstatus_updated', 'trade.php?orderid='.$orderid); } 把199个A和一个'赋值给message,经过gpc处理后$message的值为199个A和\',在经过substr的处理变为199个A和\,这样带入sql语句,执行时就会报错了:).由于$orderid被过滤导致没有办法利用这个进行'有效'的sql注射漏洞,但是可以利用mysql的错误信息得到表名的前缀等信息,还有就是可能通过<Discuz! 数据库错误信息xss bug>进行xss攻击? 2008-07 <a href=www.discuz.net target=_blank>www.discuz.net</a>
文件trade.php: $message = trim($message); if($message) { $message = daddslashes($tradelog['message'], 1)."\t\t\t".$discuz_uid."\t".$discuz_user."\t".$timestamp."\t".nl2br(strip_tags(substr($message, 0, 200))); //$message用substr处理了下,取前200个字符 } else { $message = daddslashes($tradelog['message'], 1); } $db->query("UPDATE {$tablepre}tradelog SET status='$offlinestatus', lastupdate='$timestamp', message='$message' WHERE orderid='$orderid'"); //这个地方$message直接进入sql语句了:) showmessage('trade_orderstatus_updated', 'trade.php?orderid='.$orderid); } 把199个A和一个'赋值给message,经过gpc处理后$message的值为199个A和\',在经过substr的处理变为199个A和\,这样带入sql语句,执行时就会报错了:).由于$orderid被过滤导致没有办法利用这个进行'有效'的sql注射漏洞,但是可以利用mysql的错误信息得到表名的前缀等信息,还有就是可能通过<Discuz! 数据库错误信息xss bug>进行xss攻击? 2008-07 <a href=www.discuz.net target=_blank>www.discuz.net</a>