Xibo CMS SQL注入漏洞总结 漏洞概述 Xibo CMS 存在SQL注入漏洞,主要由于对SQL查询参数和过滤器的处理不当,导致攻击者可以通过构造恶意输入执行任意SQL命令。 影响范围 受影响文件: - - - 修复方案 1. 增强输入验证:在 中增加对 参数的严格验证。 2. 使用预处理语句:在 中使用预处理语句替代直接拼接SQL字符串。 3. 清理SQL输入:在 中增加对SQL关键字和特殊字符的过滤。 POC代码 ```php // lib/Controller/DataSetData.php $filter = $this->getGridRenderFilter(['filter' => $this->getParam('filter'), $filter]); $filter = $this->getGridRenderFilter(['filter' => $filter]); // lib/Entity/DataSet.php $blacklist = array(';', 'INSERT', 'UPDATE', 'SELECT', 'DELETE', 'TRUNCATE', 'TABLE', 'FROM', 'WHERE'); $blacklist = str_replace($this->blacklist, '', $blacklist); $blacklist = str_replace($this->blacklist, '', $filter); // lib/Helper/Sql.php public static function cleanup($sql, $total = 0) { $sqlAllowedKeywords = [ 'SELECT', 'FROM', 'WHERE', 'GROUP BY', 'ORDER BY', 'HAVING', 'LIMIT', 'OFFSET', 'UNION', 'ALL', 'DISTINCT', 'AS', 'AND', 'OR', 'NOT', 'IN', 'BETWEEN', 'LIKE', 'IS NULL', 'IS NOT NULL', 'EXISTS', 'CASE', 'WHEN', 'THEN', 'ELSE', 'END', 'JOIN', 'INNER', 'LEFT', 'RIGHT', 'OUTER', 'ON', 'CROSS', 'NATURAL', 'USING', 'ASC', 'DESC', 'COUNT', 'SUM', 'AVG', 'MIN', 'MAX', 'NOW', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE', 'TIME', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'INTERVAL', 'CAST', 'CONVERT', 'CHAR', 'VARCHAR', 'TEXT', 'INT', 'INTEGER', 'BIGINT', 'SMALLINT', 'TINYINT', 'DECIMAL', 'NUMERIC', 'FLOAT', 'DOUBLE', 'REAL', 'BOOLEAN', 'BIT', 'BINARY', 'VARBINARY', 'IMAGE', 'TIMESTAMP', 'DATETIME', 'DATE', 'TIME', 'YEAR', 'SERIAL', 'AUTO_INCREMENT', 'PRIMARY KEY', 'FOREIGN KEY', 'REFERENCES', 'CHECK', 'UNIQUE', 'DEFAULT', 'NULL', 'NOT NULL', 'AUTO_INCREMENT', 'INDEX', 'KEY', 'FULLTEXT', 'SPATIAL', 'VISIBLE', 'INVISIBLE', 'COMMENT', 'ENGINE', 'DEFAULT CHARSET', 'COLLATE', 'ROW_FORMAT', 'STATS_AUTO_RECALC', 'STATS_PERSISTENT', 'STATS_SAMPLE_PAGES', 'CHECKSUM', 'DELAY_KEY_WRITE', 'INSERT_METHOD', 'KEY_BLOCK_SIZE', 'MAX_ROWS', 'MIN_ROWS', 'PACK_KEYS', 'TABLESPACE', 'STORAGE', 'DISK', 'MEMORY', 'NDB', 'NDBCLUSTER', 'ARCHIVE', 'BLACKHOLE', 'CSV', 'FEDERATED', 'MRG_MYISAM', 'MYISAM', 'PERFORMANCE_SCHEMA', 'TOKUDB', 'XTRADB', 'INNODB', 'MARIADB', 'MYSQL', 'SQLITE', 'ORACLE', 'POSTGRESQL', 'MSSQL', 'DB2', 'SYBASE', 'INFORMIX', 'TERADATA', 'NETEZZA', 'VERTICA', 'REDSHIFT', 'SNOWFLAKE', 'BIGQUERY', 'DYNAMODB', 'CASSANDRA', 'MONGODB', 'REDIS', 'ELASTICSEARCH', 'HBASE', 'HDFS', 'MAPREDUCE', 'SPARK', 'FLINK', 'KAFKA', 'ZOOKEEPER', 'YARN', 'HIVE', 'PIG', 'SQOOP', 'FLUME', 'CHUKWA', 'AVRO', 'PARQUET', 'ORC', 'SEQUENCEFILE', 'TEXTFILE', 'RCFILE', 'JSON', 'XML', 'BINARY', 'TEXT', 'CSV', 'TSV', 'FIXED', 'VARIABLE', 'DELIMITED', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STARTED', 'ENCLOSED', 'ESCAPED', 'NULL', 'ESCAPED', 'LINES', 'TERMINATED', 'STAR