Groupware是一个开源的团队协作软件,包含有即时消息、公共论坛、邮件等多种功能。 远程攻击者可以通过向Groupware的多个模块提交恶意参数请求导致拒绝服务或执行任意代码。 当Groupware配置为使用PostgreSQL数据库服务器时会调用以下函数: int pgSQLQuery(CONN *sid, int sqr, char *SQLquery) { ... char query[8192]; ... memset(query, 0, sizeof(query)); snprintf(query, sizeof(query)-1, DECLARE myportal CURSOR FOR ); strncat(query, SQLquery, sizeof(query)); ... } 该函数在栈上为查询分配了8192字节的缓冲区,然后继续创建SQL查询,但在创建28字节固定长度的字符串时最多又连接了8192字节的数据,因此写到栈上的全部数据(8220字节)大于最初所分配的缓冲区。理论上只要所传送的SQLquery值大于8163字节,就可以溢出函数基指针(%ebp)和返回地址(%eip)。
Groupware是一个开源的团队协作软件,包含有即时消息、公共论坛、邮件等多种功能。 远程攻击者可以通过向Groupware的多个模块提交恶意参数请求导致拒绝服务或执行任意代码。 当Groupware配置为使用PostgreSQL数据库服务器时会调用以下函数: int pgSQLQuery(CONN *sid, int sqr, char *SQLquery) { ... char query[8192]; ... memset(query, 0, sizeof(query)); snprintf(query, sizeof(query)-1, DECLARE myportal CURSOR FOR ); strncat(query, SQLquery, sizeof(query)); ... } 该函数在栈上为查询分配了8192字节的缓冲区,然后继续创建SQL查询,但在创建28字节固定长度的字符串时最多又连接了8192字节的数据,因此写到栈上的全部数据(8220字节)大于最初所分配的缓冲区。理论上只要所传送的SQLquery值大于8163字节,就可以溢出函数基指针(%ebp)和返回地址(%eip)。