網(wǎng)上大家可能找不到“LOL”的http方法,當(dāng)然选酗,http方法也的確不存在什么LOL方法蒿柳。第一次聽說這個(gè)概念饶套,是在DEFCON GROUP 0531 極客會(huì)議上,不好意思垒探,忘記是哪個(gè)團(tuán)隊(duì)提及的了妓蛮。
為什么要用LOL方法呢?其實(shí)什么命名都無所謂圾叼,只要不是默認(rèn)的HTTP方法就可以蛤克,就可以實(shí)現(xiàn)對被限制網(wǎng)頁的訪問,此次以LOL方法命名呢夷蚊,也算是慶祝下最近的埃及法老復(fù)活事件构挤。
之所以今天突然寫下這篇文章,是因?yàn)榇a審計(jì)恰好遇到了惕鼓,那么筋现,剛好給大家來講解一下這個(gè)漏洞究竟是如何形成的,同時(shí)也給開發(fā)者提供一點(diǎn)小小的心得箱歧,嗯矾飞,據(jù)不完全統(tǒng)計(jì)與實(shí)踐php、J2E均存在此漏洞叫胁。
web.xml文件凰慈,對于J2E大佬來講是再熟悉不過了汞幢。作為小白的我們驼鹅,在好多Web應(yīng)用的代碼中,都有留意到過森篷,尤其是一些框架如springMVC更是將它最為一個(gè)比較重要的配置項(xiàng)输钩,那么,這個(gè)文件究竟是用來做什么的呢仲智?
web.xml文件是用來初始化配置信息:比如Welcome頁面买乃、servlet、servlet-mapping钓辆、filter剪验、listener、啟動(dòng)加載級(jí)別等前联。當(dāng)你的web工程沒用到這些時(shí)功戚,你甚至可以不用web.xml文件來配置你的Application,關(guān)于它其中的元素實(shí)在太多似嗤,我們今天就不一一展開講解了啸臀,直接今天的探究。
環(huán)境:tomcat6.0??? IDE:eclipse
我們首先在web.xml中提供建立一個(gè)文件保護(hù)規(guī)則烁落,大體翻譯一下:就是只允許tomcat用戶使用DELETE乘粒、GET豌注、POST、PUT方法去訪問我們的rabbit.jsp文件灯萍,即受保護(hù)的資源轧铁,保護(hù)的身份驗(yàn)證方式,采用BASIC驗(yàn)證旦棉。
然后我們建立一個(gè)簡單的jsp文件作為我們的測試文件属桦,也就是受保護(hù)的rabbit.jsp文件。
然后通過配置tomcat-user.xml實(shí)現(xiàn)role管理他爸,添加剛剛我們提到的tomcat用戶聂宾。
我們以輸入url的方式,即GET方式去訪問目標(biāo)資源诊笤,發(fā)現(xiàn)目標(biāo)資源果然受到了保護(hù)系谐,一些從事滲透行業(yè)的小伙伴應(yīng)該也碰到了此類情況,咋整讨跟?爆破纪他?不好意思,該登錄驗(yàn)證為加密傳輸晾匠,如果爆破的話也只能采用手工爆破茶袒。
我們來換個(gè)思路,祭出我們今天的重點(diǎn)大招凉馆。通過篡改HTTP請求的方式成功訪問到了文件內(nèi)容薪寓!
這個(gè)漏洞是怎么形成的呢?關(guān)于這個(gè)問題的探討澜共,網(wǎng)上的資料真的是太向叉,,太嗦董,母谎,少了。其實(shí)包括PHP, JAVA EE在內(nèi)的許多平臺(tái)都默認(rèn)允許使用任意的HTTP請求京革,而且中間件會(huì)以GET方式響應(yīng)不能識(shí)別的HTTP請求奇唤,這就是漏洞的成因。
剛剛也提到了匹摇,為什么是許多平臺(tái)呢咬扇,因?yàn)槿绻脚_(tái)是tomcat7你就會(huì)看到501的界面,因?yàn)槟乩淳澹€有許多平臺(tái)存在如下規(guī)則:方法名稱是區(qū)分大小寫的冗栗,當(dāng)某個(gè)請求所針對的資源不支持對應(yīng)的請求方法的時(shí)候,服務(wù)器應(yīng)當(dāng)返回狀態(tài)碼405(Mothod Not Allowed);當(dāng)服務(wù)器不認(rèn)識(shí)或者不支持對應(yīng)的請求方法時(shí)隅居,應(yīng)返回狀態(tài)碼501(Not Implemented)钠至。
那么,我們的研究目標(biāo)也就很明確了胎源,究竟那些平臺(tái)存在該漏洞呢棉钧?我給大家提供如下可以版本,有空給大家慢慢驗(yàn)證涕蚤,大家有驗(yàn)證過的宪卿,也可以通過多種途徑反饋給我。
APACHE 2.2.8
JBOSS 4.2.2
WEBSPERE 6.1
TOMCAT 6.0
IIS 6.0
WEBLOGIC 8.2
當(dāng)然万栅,到這里還沒有結(jié)束佑钾。給使用相關(guān)平臺(tái)并從事開發(fā)的小伙伴們交代幾句:雖然你現(xiàn)在去網(wǎng)上搜索如何關(guān)閉不安全的HTTP方法,得到的結(jié)果幾乎全都是如何配置黑名單烦粒。但我還是要從安全開發(fā)角度提醒諸位休溶,不要使用黑名單,請使用白名單扰她。指定一個(gè)授權(quán)策略兽掰,僅列出允許進(jìn)行的操作,拒絕所有其他操作徒役。不要在安全限制中指定 HTTP 方法孽尽。這將確保您的安全限制都能夠應(yīng)用于所有 HTTP 動(dòng)詞。
給大家提供個(gè)簡單的例子
#修復(fù)前代碼
<security-constraint>
? ? ? ? <display-name>Admin Constraint</display-name>
? ? ? ? <web-resource-collection>
? ? ? ? ? ? <web-resource-name>Admin Area</web-resource-name>
? ? ? ? ? ? <url-pattern>/pages/index.jsp</url-pattern>
? ? ? ? ? ? <url-pattern>/admin/*.do</url-pattern>
? ? ? ? ? ? <http-method>GET</http-method>
? ? ? ? ? ? <http-method>POST</http-method>
? ? ? ? </web-resource-collection>
? ? ? ? <auth-constraint>
? ? ? ? ? ? <description>only admin</description>
? ? ? ? ? ? <role-name>admin</role-name>
? ? ? ? </auth-constraint>
? ? </security-constraint>
#修復(fù)后代碼
<security-constraint>
? ? ? ? <display-name>Admin Constraint</display-name>
? ? ? ? <web-resource-collection>
? ? ? ? ? ? <web-resource-name>Admin Area</web-resource-name>
? ? ? ? ? ? <url-pattern>/pages/index.jsp</url-pattern>
? ? ? ? ? ? <url-pattern>/admin/*.do</url-pattern>
? ? ? ? </web-resource-collection>
? ? ? ? <auth-constraint>
? ? ? ? ? ? <description>only admin</description>
? ? ? ? ? ? <role-name>admin</role-name>
? ? ? ? </auth-constraint>
? ? </security-constraint>
總結(jié)一下:我們能利用該漏洞干什么呢忧勿?對于一些受保護(hù)的資源文件杉女,我們可以通過繞過http請求規(guī)則來繞過身份驗(yàn)證,訪問敏感界面甚至是管理界面狐蜕,我相信9成的開發(fā)會(huì)使用黑名單的方式宠纯,慶幸你所使用的中間件幫助你返回了501,而不是默認(rèn)GET響應(yīng)吧层释。
雖然花了兩天半的時(shí)間,才把這看似弱雞的漏洞研究透快集,但贡羔、這一刻真的值得,嚶个初。