【问题标题】:Testing Somesite CRLF Bugs Hole Using Indy IdMappedPortTCP使用 Indy IdMappedPortTCP 测试 Somesite CRLF 漏洞
【发布时间】:2014-11-15 17:58:59
【问题描述】:

我想创建一个小工具,例如 CRLF 注入或 HTTP 标头响应拆分。我成功地创建了数千个 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]

    ...

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

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

【问题讨论】:

  • 我不明白这个问题。您能否详细说明您遇到的问题。
  • 感谢您的回复,我很抱歉我的英语不好。在简单的问题中,我有数千个带有修改后的变量的 NetData(数据有效负载)列表。我想将我的 NetData 列表应用到TIdMappedPortContext(AContext).NetData:=mymodifiednetdatalists 我很困惑如何让我的 IdMappedPortTCP1 使用线程来应用数千个列表。我假设在传统的 1 IdMappedPortTCP1 appplay 1 mymodifiednetdatalists 中,这是不可能的,因为我不想将数千个 IdMappedPortTCP 基于 mymodifiednetdatalists
  • 我还是不明白。对不起。

标签: delphi indy delphi-2007 indy10


【解决方案1】:

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

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

【讨论】:

  • 你好@Remy,是的,也许“我的 NetData 模式”它不是一个常规的 http,但我已经学习了这种绕过我的 ISP 的机制,它可以工作。 HEAD http://somebug.com/ HTTP/1.1[CRLF]Host : somehost.com[CRLF]CONNECT somesitesite.com HTTP/1.0[CRLF][CRLF][CRLF][CRLF] 它只是在“我的 NetData 模式列表”列表中取样。当然,在替换字符串之前,我不会将该模式的真实字符串应用到 NetData。只需给我一些代码,在运行时使用列表中的 1 个 NetData 创建 IdMappedPortTCP,并使用我的 NetData 模式循环直到列表结束。
  • 要做你要求的,你需要做我告诉你的。 NetData 的不可预测性使得在每次触发 OnExecute 事件时,如果没有缓冲区来保存事件之间的数据,就不可能进行可靠的模式匹配。您需要缓冲所有传入的数据,并在该缓冲区上执行模式匹配,而不是在 NetData 本身上。接收一些数据,添加到缓冲区,检查缓冲区是否已完成请求。如果没有准备好,则清除NetData,否则对于每个请求,如果找到,则将NetData 设置为修改后的变体,否则将NetData 设置为原始请求。
猜你喜欢
  • 1970-01-01
  • 2014-09-02
  • 2021-10-22
  • 2014-07-14
  • 2021-08-06
  • 2022-01-01
  • 2021-01-13
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多