使用Indy IdMappedPortTCP测试某些网站CRLF漏洞

时间:2014-11-15 17:58:59

标签: delphi indy delphi-2007 indy10

我想创建一个小工具,如CRLF Injection或HTTP header respons splitting。我成功创建了数千个NetData模式(数据有效载荷)列表。像这个例子的NetData模式:

  1. GET http://somebug.com/ HTTP/1.1[CRLF]Host : somehost.com[CRLF]GET somesite.com HTTP/1.1[CRLF][CRLF]

  2. GET http://somebug.com/ HTTP/1.1[CRLF]Host : somehost.com[CRLF][CRLF]GET somesitesite.com HTTP/1.1[CRLF][CRLF]

  3. HEAD http://somebug.com/ HTTP/1.1[CRLF]Host : somehost.com[CRLF]CONNECT somesitesite.com HTTP/1.0[CRLF][CRLF][CRLF][CRLF]

    ...

  4. 如果只有一个数据模式/数据有效负载,我可以编写如下示例代码:

    procedure T_CRLFTest.IdMappedPortTCP1Execute(AContext: TIdContext);
    begin
      if(Pos('CONNECT',TIdMappedPortContext(AContext).NetData)<>0) then
        TIdMappedPortContext(AContext).NetData := 'GET http://somebug.com/ HTTP/1.1'#13#10'Host : somehost.com'#13#10+TIdMappedPortContext(AContext).NetData+#13#10#13#10
    end;
    

    问题是,如何使用IdMappedPortTCP多线程技术测试所有数据模式超过20,000个列表?

    我正在使用Delphi 2007Indy 10

1 个答案:

答案 0 :(得分:2)

NetData包含OnExecute事件被触发时套接字上可用的原始数据。对于事件的任何触发,无法保证NetData的内容。因此,每次触发事件时,您都需要将该数据存储到您自己的每个连接缓冲区中,然后您可以解析该缓冲区以查找完整的行并根据需要进行调整,然后使用新数据更新NetData如所须。当事件处理程序退出时,NetData中的任何数据都是传递给目标服务器的数据。

BTW,HEAD http://somebug.com/ HTTP/1.1[CRLF]Host : somehost.com[CRLF]CONNECT somesitesite.com HTTP/1.0[CRLF][CRLF][CRLF][CRLF]是两个相互重叠的HTTP命令。这绝不应该发生在真实场景中。如果是,则发送这些命令的客户端有问题。