sqli-labs———伺服器(兩層)架構

FLy_鵬程萬里發表於2018-05-19

首先介紹一下29,30,31這三關的基本情況:


伺服器端有兩個部分:第一部分為tomcat為引擎的jsp型伺服器,第二部分為apache為引擎的php伺服器,真正提供web服務的是php伺服器。工作流程為:client訪問伺服器,能直接訪問到tomcat伺服器,然後tomcat伺服器再向apache伺服器請求資料。資料返回路徑則相反。

此處簡單介紹一下相關環境的搭建。環境為ubuntu14.04。此處以我搭建的環境為例,我們需要下載三個東西:tomcat伺服器、jdk、mysql-connector-java.分別安裝,此處要注意jdk安裝後要export環境變數,mysql-connector-java需要將jar檔案複製到jdk的相關目錄中。接下來將tomcat-files.zip解壓到tomcat伺服器webapp/ROOT目錄下,此處需要說明的是需要修改原始碼中正確的路徑和mysql使用者名稱密碼。到這裡我們就可以正常訪問29-32關了。

重點:index.php?id=1&id=2,你猜猜到底是顯示id=1的資料還是顯示id=2的?

Explain:apache(php)解析最後一個引數,即顯示id=2的內容。Tomcat(jsp)解析第一個引數,即顯示id=1的內容。

以上圖片為大多數伺服器對於引數解析的介紹。

此處我們想一個問題:index.jsp?id=1&id=2請求,針對第一張圖中的伺服器配置情況,客戶端請求首先過tomcat,tomcat解析第一個引數,接下來tomcat去請求apache(php)伺服器,apache解析最後一個引數。那最終返回客戶端的應該是哪個引數?

Answer:此處應該是id=2的內容,應為時間上提供服務的是apache(php)伺服器,返回的資料也應該是apache處理的資料。而在我們實際應用中,也是有兩層伺服器的情況,那為什麼要這麼做?是因為我們往往在tomcat伺服器處做資料過濾和處理,功能類似為一個WAF。而正因為解析引數的不同,我們此處可以利用該原理繞過WAF的檢測。該用法就是HPP(HTTP Parameter Pollution),http引數汙染攻擊的一個應用。HPP可對伺服器和客戶端都能夠造成一定的威脅。


相關文章