相信大家看完上一篇之後,對於HTTP有一個基本的認識了,從這篇開始會介紹一些跟HTTP相關名字有HTTP的一些攻擊。
在上一篇的HTTP基礎後,我們知道了RFC定義了9種Method,接下來我們來講講HTTP Verb Tampering。GET
和POST
是用來訪問Web Server內容最常用的方法,現在我們知道了除了GET
和POST
之外的其他Method。在一般時候這通常不會造成甚麼問題,但如果使用的Web Server設定錯誤(misconfiguration),可能就可以被用於一些惡意目的,例如bypass security control、上傳Web Shell等等。
PUT: 這個Method允許User在Web Server上傳檔案,如果濫用的話,攻擊者就可以通過上傳惡意檔案來取的伺服器權限,例如在使用php的網站中寫入:<?php echo system($_REQUEST['cmd']); ?>
就可以造成Code Execution,當然也可以很乾脆的寫入php reverse shell等等,可以利用的方法很多。
雖然實務上很少使用到PUT
,但勿忘CVE-2017-12615/CVE-2017-12617(Apache Tomcat Remote Code Execution via JSP upload) XD。
CONNECT: 這個Method請求HTTP Proxy Server建立指定位置的TCP Connection的tunnel,如果被濫用的話,可以用來利用Web Server作為proxy,用於對內部機器發起攻擊,這種嚴重程度不言而喻。
TRACE: 這個Method會將發送到Server的任何strings返回給user,讓攻擊者可以知道網站的某些資訊,達到Enum/Leak的效果,也可以透過TRACE進行XSS、XST攻擊,steal cookies,接管帳戶等等。
下面的Java EE Containers是從github抓下來再修改的
<security-constraint>
<web-resource-collection>
<web-resource-name>example</web-resource-name>
<url-pattern>/secret/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
上面設定了HTTP Servlet的Container,定義只允許admin使用GET
和POST
method拿到/secret/下的所有資源。這邊的問題是可以通過其他Method取繞過這個限制取得相應的資源,例如HEAD
或是一些無意義的字串像是FOO
、ABC
、XXX
等,繞過VBAAC/設定檔的安全控制,在有這種漏洞的網站中,一些無意義字串可能會被當作GET
。
IBM
在這個案例中,攻擊者可以透過發送特製的請求,造成HTTP Verb Tampering影響IBM Cúram SPM來達成bypass一些安全控制。
A HTTP Verb Tampering vulnerability may impact IBM Curam Social Program Management 7.0.9 and 7.0.10. By sending a specially-crafted request, an attacker could exploit this vulnerability to bypass security access controls. IBM X-Force ID: 189156.
SAP BusinessObjects Business Intelligence
在SAP BusinessObjects Business Intelligence平台中的CMC(中央管理控制台),透過更改Method,可以造成HTTP Verb Tampering。(沒有找到實際影響的程度,不過應該可以透過這個漏洞使一般使用者越級訪問一些內容,但純屬猜測)
HTTP Verb Tampering is possible in SAP BusinessObjects Business Intelligence Platform, versions 4.1 and 4.2, Central Management Console (CMC) by changing request method.
通常使用的Method跟所需實現的資源執行有關,但某些Web Server可能沒有嚴格執行的話,就會產生安全隱患,例如GET
主要用來請求網站return指定的資源,通常只用來取得資料,不會改變應用程式的狀態,但若是設計不良,讓GET
可以某些程度上的改變後端資料庫等等的話,可能會導致CSRF、Info Leak等等。
下篇預告: HTTP Request Smuggling