首页 -> 安全研究

安全研究

安全漏洞
IBM HSLCTF拒绝服务的漏洞

发布日期:2001-03-22
更新日期:2001-03-22

受影响系统:

HSLCTF 1.0 for AIX
描述:

HSLCTF(Hursley软件实验室消费者交易框架,Hursley Software Laboratories
Consumer Transaction Framework)HTTP对象中存在一个缺陷,允许攻击者击溃
Web对象以及与其相连的对象(即SMTP服务)。

<* 来源:Peter Grundl(peter.grundl@defcom.com) *>


测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!


只要发送一个超长的HTTP请求就可以使HTTP崩溃,并使内部的邮件系统也垮掉。请求如下所示:
GET / HTTP/1.0\r\nhost:www.foo.org\r\nreferrer: aaaaaaa...aaaaaaaaaaaa
即不停地给套接字中发送“a”直到服务器崩溃。

建议:

厂商补丁:

用户可以自行修改代码以加入长度检查。IBM Hursley软件实验室给出下面的例子,该例子确保
HTTP头部的长度不超过1024字节。

新编写一个类LimitHttpTcpipAdapter,该类继承自CTFTcpipHttpAdapter并用来替换CTFTcpipHttpAdapter。替换方法是将Web服务器的INI文件的相关部分改为如下形式:

[Adapter]
TCPIPHTTP=LimitHttpTcpipAdapter
或者修改服务器启动代码中与上述等价的AddAdapter( )语句。

LimitHttpTcpipAdapter类如下所示:
import com.ibm.CTF.Adapters.*;
import java.io.*;

public class LimitHttpTcpipAdapter extends CTFTcpipHttpAdapter
  {
  protected String ReadLine( ) throws Exception
    {
    int    intChar;
    int    i = 0;
    StringBuffer Result = new StringBuffer( 1024 );
    /* read Header from input stream                                */
    while ( true )                         /* repeat until "newline"*/
      {
      intChar = Stream_in.read();          /* read a character      */
      switch ( intChar )                   /* what character        */
        {
      case -1:                             /* ... no character      */
        i = i + 1;                         /* error count           */
        if ( i > 3 )                       /* more than threshold ? */
          throw new EOFException();        /* ... yes, EOF          */
          else                             /* ... no                */
          Thread.sleep( 10 );              /* wait a bit            */
        break;
      case 10:                             /* line feed             */
          BytesRead = BytesRead + Result.length();
        /* data received so far  */
        return( Result.toString() );       /* all done              */
      case 13:                             /* carridge return       */
          BytesRead = BytesRead + 1;       /* data received so far  */
        break;
      default:                             /* real data             */
          i = 0;                           /* timeout count reset   */
        Result.append( (char) intChar );   /* append to string      */
          if ( Result.length( ) > 1024 )
            throw new IOException( "missing cr-lf delimiter" );
      }                                    /* switch                */
      }                                    /* while                 */
    }
  }



浏览次数:4208
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障