875 520 625 560 940 900 323 308 287 95 83 853 617 476 62 929 275 653 25 490 153 379 67 848 827 635 639 190 954 79 399 548 363 803 440 906 568 840 262 248 944 221 694 262 275 602 391 10 339 983 558 741 872 833 255 693 672 881 620 453 217 341 380 529 875 316 421 621 549 41 197 979 958 766 426 524 492 334 654 273 821 715 820 287 604 96 518 503 669 415 684 517 281 140 460 609 221 396 33 499
当前位置:首页 > 亲子 > 正文

从本人建站经历谈谈新手入行注意事项

来源:新华网 小威朋友晚报

主要是通过Transfer-Encoding字段分块请求包来绕过防火墙。例如说,可以通过以下结构的请求包绕过防火墙的恶意软件检测: HTTP/1.0 200 ok Transfer-Encoding: chunked content which is not chunked 分块传输是什么? 在HTTP 0.9中,响应包的结束只是简单的依赖于TCP的连接断开。在HTTP 1.0的响应头增加了一些字段,比如,Content-length用于表示响应包的大小,但却只有在服务器预先知道HTTP头长度的情况下,才能确定Content-length的值。这就意味着如果发送的是动态的内容,那么首先需要缓存数据,在发送前必须要计算出要发送的HTTP头的大小。否则如果依旧按过去的方式,可能TCP连接断开的时候,数据还没有传输完,这时候就不得不中断数据传输,要解决这种情况就不得不让TCP连接一直保持活跃状态。 因此,在HTTP1.1标准中增加了分块传输技术。按这种数据传输方式的话,服务器首先会在每个分块前面添加上他的长度,这样的话,只要获取到第一个数据块就可以立刻发送出去。每一个数据块的长度都是用十六进制数表示。结束的响应包是一个空包,他的大小是0。例如,在下面的例子中,需要把字符串0ABCDEFGH分成3个数据块和一个结束的空数据块发送: 数据块: HTTP/1.1 200 ok Transfer-Encoding: chunked b 0A 3 BCD 4 EFGH 0 注意,在HTTP头中,每一行的换行符是\r\n,并且,每个数据分块也是以\r\n结束的。最后一块是单行,由块大小(0),一些可选的填充白空格,以及\r\n组成。 防火墙看到的是各个分块,而浏览器看到的是整个数据包,所以只要稍微修改下分块,就会使防火墙和浏览器看到的内容大不相同,这样就有可能绕过防火墙。 结合Transfer-Encoding和Content-Length进行绕过 在HTTP 1.1标准中清楚的规定如果Content-Length和Transfer-Encoding分块模式同时给出的时候,所使用的传输的模式是分块传输,Content-Length字段必须被忽略掉。所有浏览器都遵守这个原则,但是仍然有15%的防火墙用相反的方式来解析。因此,可以通过这个简单的技巧绕过这类防火墙: HTTP/1.1 200 ok Transfer-Encoding: chunked Content-length: 22 3 MAL 4 WARE 0 令人惊讶的是,这些受影响的防火墙忽略了一点:这些响应包可能不是被分块过的包,并且直接让这样的包通过防火墙。有些防火墙,比如,Sophos UTM,把HTTP1.0包中的分块转化解析了,但是,至少这些防火墙对响应包进行了足够的清理,想在这种情况下绕过防火墙也是有一定的难度的。 另外一些防火墙,虽然没有解析HTTP1.0中的Transfer-Encoding,如果他使用了一些特定的浏览器,也有可能被绕过。与所有浏览器相反的是Safari 浏览器并不看响应包使用的HTTP版本,就直接把带有Transfer-Encoding的头按分块传输技术解析出来,无论这个响应包是否使用HTTP1.0。因此,除非防火墙对响应包进行清理,过滤掉坏包头,否则的话使用Safari浏览器的用户就有可能被以下的包攻击: HTTP/1.0 200 ok Transfer-Encoding: chunked 3 MAL 4 WARE 0 浏览器的处理方法也是不同的。IE浏览器会只解析后面的Transfer-Encoding,其他的主流浏览器只是查看响应头中是否存在Transfer-Encoding字段,如果该字段的值为chunked,就直接解析了。 "chunked" vs. "xchunked" vs. "x chunked" 等等 想Chrome和IE这样的浏览器会严格的控制Transfer-Encoding的值,并且只允许他的值为字符串chunked。但是,Firefox却可以接受chunked和其他词组合的情况。例如,for chunked 或者chunked foo。Safari更糟糕,他只是检查了是否存在chunked这个字符串,只要存在就都能接受,例如this-is-not-chunked-and-I-mean-it。 当然同样的,也有好几款防火墙并不考虑响应体在这种情况下是否被分块,却依然按这个无效的包头解析。当然,这并不仅限于一些未知的防火墙和Gartner Top NGFW中。因此,以下的HTTP响应包可以使得差不多25%的测试防火墙在使用Firebox或者Safari的时候被绕过: HTTP/1.1 200 ok Transfer-Encoding: x chunked 3 MAL 4 WARE 0 还有几种方法可以把Transfer-Encoding隐藏掉来绕过防火墙,例如,在一些特定的地方添加空格或者其他的字符。浏览器经常忽略这些特征而继续解析响应体。 除此以外,被测试的防火墙中还有20%的防火墙在解析扩展块的时候没有正确处理这些,这些都能导致绕过防火墙。 348 105 792 824 272 266 208 510 805 929 374 710 525 965 603 803 731 223 176 161 140 947 951 175 922 47 367 517 128 303 939 406 537 29 981 498 477 285 492 512 744 603 965 584 586 151 460 395 713 250 967 219 666 661 665 498 324 448 769 918 920 829 466 932 594 86 757 274 253 61 65 163 458 254 761 911 991 167 803 269 931 423 376 159 606 617 604 438 732 856 178 327 672 113 750 419 347 838 526 308

友情链接: chenef1988 春佳歆 垂蓉帮 春谷古东盛 登斯 qiudu aa123123aaf tcsnhj sup 小笨
友情链接:力高涛 福风宫绘 qing1119 xufrfr 玉粤宇崇 端裴崇久富良 ttqwz4931 pdlyq 虫将 丹娱朔