Less 29
基于錯誤_GET_雙服務器_單引號_字符型注入
看著真喜慶啊。
0x01. 參考教程
網(wǎng)上的大部分 Sqli-Labs 的教程都比較零散且很不系統(tǒng)坯台,平時做題時參考的有:
-
windows下sqli-labs的搭建及學習
該作者只寫到了 Less 17,但這些寫的非常詳細瘫寝,所用函數(shù)也有詳細介紹蜒蕾。我的 Less 1 到 Less 17 主要是參考此教程。 -
通過sqli-labs學習sql注入
該作者只寫到了 Less 28a焕阿,但同樣非常詳細咪啡,有的關卡提供了非常多的解題方法。我的 Less 18 到 Less 28a 主要是參考此教程暮屡。 -
MySQL注入天書
這是見過方向掌握最好的教程撤摸,有所用技術的背景介紹,作者提供了 pdf 版下載褒纲。我的 Less 29 及以后主要是參考此教程准夷。 -
一航師傅WP
這應該是一航的早期 WP,基本上用于參考盲注腳本莺掠,對于其他很多并沒有詳細介紹衫嵌。
0x02. Tomcat的配置
網(wǎng)上大部分對 Less 29 - Less 31 的教程都是錯的,只考慮了 php 服務器彻秆,而這三關實際上是兩層服務器架構渐扮,在做這三關之前需要把 Tomcat 為引擎的 jsp 服務器搭好论悴。
Tomcat 在學 JavaEE 時已經安裝過掖棉,安裝步驟也很簡單墓律,只是安裝完需要配置一下Tomcat/conf/server.xml
中的項目發(fā)布文件夾appBase
:
<Host name="localhost" appBase="D:/Web-jsp" unpackWARs="true" autoDeploy="true">
注意:Tomcat部署多個項目有兩種方式,單端口或多端口:Tomcat下部署多個項目幔亥。
然后下載mysql-connector-java.jar
包耻讽,放入Tomcat/lib
中,然后把它加入系統(tǒng)環(huán)境變量帕棉。
配置完后將Sqli-Labs
文件夾中的tomcat-files.zip
解壓至 Tomcat 的項目發(fā)布文件夾针肥,并修改其中index.jsp
中的轉發(fā)鏈接為自己 php 項目發(fā)布文件夾的鏈接,以及自己 MySQL 的用戶名和密碼香伴。
至此便可以正常訪問 Less 29 - Less 32 的 jsp 文件了慰枕。
0x03. 服務器(兩層)架構
注:截圖等來自《MySQL注入天書:Less 29》
服務器端有兩個部分:第一部分為 tomcat 為引擎的 jsp 型服務器,第二部分為 apache 為引擎的 php 服務器即纲,真正提供 web 服務的是 php 服務器具帮。
工作流程為:client 訪問服務器,能直接訪問到 tomcat 服務器低斋,然后 tomcat 服務器再向 apache 服務器請求數(shù)據(jù)蜂厅。數(shù)據(jù)返回路徑則相反。
接下來是參數(shù)解析的問題膊畴。
問:index.php?id=1&id=2
掘猿,這時回顯是id=1
還是id=2
呢?
答:apache (php) 解析最后一個參數(shù)唇跨,即回顯id=2
稠通;tomcat (jsp) 解析第
一個參數(shù),即回顯id=1
买猖。
大多數(shù)服務器對于參數(shù)解析:
這里有一個新問題改橘。
問:index.jsp?id=1&id=2
,針對這關的兩層結構政勃,客戶端請求首先過 tomcat既棺,tomcat 解析第一個參數(shù)懒叛,接下來 tomcat 請求 apache丸冕,apache 解析最后一個參數(shù)病附。那么最終返回客戶端的是哪個參數(shù)择示?
答:此處應該還是id=2
萤捆,因為實際上提供服務的是 apache 服務器,返回的數(shù)據(jù)也應該是 apache 處理的數(shù)據(jù)卿泽。
而在我們實際應用中,也是有兩層服務器的情況蔓挖,那為什么要這么做踱侣?是因為我們往往在 tomcat 服務器處做數(shù)據(jù)過濾和處理,功能類似為一個 WAF趟畏。
而正因為解析參數(shù)的不同赋秀,我們此處可以利用該原理繞過 WAF 的檢測利朵。如 payload:index.jsp?id=1&id=0 or 1=1--+
,tomcat 只檢查第一個參數(shù)id=1
猎莲,而對第二個參數(shù)id=0 or 1=1--+
不做檢查绍弟,直接傳給了 apache,apache 恰好解析第二個參數(shù),便達到了攻擊的目的年碘。
該用法就是 HPP(HTTP Parameter Pollution)即 HTTP 參數(shù)污染攻擊的一個應用。HPP 可對服務器和客戶端都能夠造成一定的威脅展鸡。
0x04. 注入過程
步驟1:確定雙服務器
從跳轉到.jsp
頁面可以看出來是 Tomcat 服務器屿衅,一般來說,現(xiàn)在沒有拿 jsp 寫后臺的了莹弊,大都用 php 涤久,我們果斷猜測是雙服務器。
步驟2:注入點測試
http://localhost:8080/sqlilabs/Less-29/?id=1&id=2'
有正確回顯和錯誤回顯忍弛,單引號無小括號响迂,剩下的事就好辦了,可以發(fā)現(xiàn)沒有其他任何的過濾條件细疚,是最簡單的注入之一蔗彤。
Less 30
基于錯誤_GET_雙服務器_雙引號_字符型_盲注*
有正確回顯但無錯誤回顯,所以還是能叫基于錯誤疯兼。
1
和1'
正橙欢簦回顯,1"
無回顯吧彪,雙引號字符型待侵。
2"%26%26"1"="1
回顯為id=2
,無小括號姨裸。
其他的和 Less 29 一模一樣秧倾。
Less 31
基于錯誤_GET_雙服務器_雙引號_小括號_字符型注入
有錯誤回顯怨酝,估計是忘了注釋掉了,同上面一樣那先。
總結:在以上三關中农猬,我們主要學習到的是不同服務器對于參數(shù)的不同處理,HPP 的應用有很多胃榕,不僅僅是我們上述列出過 WAF 一個方面盛险,還有可以執(zhí)行重復操作,可以執(zhí)行非法操作等勋又。同時針對 WAF 的繞過,我們這里也僅僅是拋磚引玉换帜,后續(xù)的很多的有關 HPP 的方法需要共同去研究楔壤。這也是一個新的方向。