post-query是NCSA发布的一个常见的Unix下的CGI演示程序。它用C语言编写。很多Unix/Linux发布版本中都包含该CGI。 post-query存在一个远程缓冲区溢出漏洞,远程攻击者可能利用此漏洞在主机上以Web服务进程的权限执行任意指令。 如果向post-query提交超过10001个参数的请求,就会触发一个缓冲区溢出。精心构造该请求,可以在目标主机上执行任意代码。有问题的代码如下: ... #define MAX_ENTRIES 10000 typedef struct { char *name; char *val; } entry; ... main(int argc, char *argv[]) { entry entries[MAX_ENTRIES]; ... for(x=0;cl && (!feof(stdin));x++) { m=x; entries[x].val = fmakeword(stdin,\'\'&\'\',&cl); plustospace(entries[x].val); unescape_url(entries[x].val); entries[x].name = makeword(entries[x].val,\'\'=\'\'); } ...
post-query是NCSA发布的一个常见的Unix下的CGI演示程序。它用C语言编写。很多Unix/Linux发布版本中都包含该CGI。 post-query存在一个远程缓冲区溢出漏洞,远程攻击者可能利用此漏洞在主机上以Web服务进程的权限执行任意指令。 如果向post-query提交超过10001个参数的请求,就会触发一个缓冲区溢出。精心构造该请求,可以在目标主机上执行任意代码。有问题的代码如下: ... #define MAX_ENTRIES 10000 typedef struct { char *name; char *val; } entry; ... main(int argc, char *argv[]) { entry entries[MAX_ENTRIES]; ... for(x=0;cl && (!feof(stdin));x++) { m=x; entries[x].val = fmakeword(stdin,\'\'&\'\',&cl); plustospace(entries[x].val); unescape_url(entries[x].val); entries[x].name = makeword(entries[x].val,\'\'=\'\'); } ...