CTF web個人總結
僅供個人參考
從0開始接觸到了CTF,算是入門了,為了友善自己做題,現在記錄一下web類型題目的解題思路。
工具
- 中國菜刀
- burpsuite
- 谷歌浏覽器或火狐浏覽器
- postman(總感覺還是這個用着爽)
- sqlmap
- dirb
- …
解題思路
一、普通思路
- 拿到題目首先檢視源代碼,在源代碼中特别注意js或者css檔案中是否透露着某些資訊
- 檢視meta标簽,如type為author的,這個标簽表示作者,後面很有可能會用到這些資訊
- 檢視根目錄下是否有robots.txt,建議任何網站,開始做題的時候都先扔到dirb中進行路徑爆破
- 注意審題,題目中往往會透露一些關鍵資訊,例如:網站備份,諸如此類,那麼建議根據路徑搜尋相關的www.zip或xxx.bak等備份檔案
- 使用者認證僞造,注意檢視網絡資料包,可以通過修改cookie,或者爆破jwt的方式僞造認證
- ip僞造,通常用于頁面需要本地或指定ip通路的題目,利用
、X-Forwarded-For
、X-Client-IP
、X-Real-IP
head頭,來僞造通路用戶端的ip,前提是服務端利用這兩個參數進行使用者驗證CDN-Src-IP
- git洩露,網站下存在.git且可以通路,用
工具,還原代碼,檢視漏洞GitHack
二、注入思路
- 時刻注意項目中是否有可送出的輸入框,後者頁面參數為
,諸如此類,建議嘗試sql注入,sql注入有很多分類,簡單的可以使用sqlmap做基礎探測,如果一直半會兒試不出來可以先尋找其他突破口。id=1
- sql注入先使用錯誤的參數進行頁面報錯判斷,因為有時候也有可能是作為檔案包含的參數。
- 使用
或者'
進行sql探測,使用"
或--+
(注意轉換成#
,因為#在url中代表hash),如果有報錯是最好的。%23
- 使用一些固定的payload進行嘗試,例如:
,and 1=2
或者其他複雜的payloadand 1='1
- 使用
報錯函數進行注入,如:extractvalue
?id=1" and extractvalue('~', concat(',', (select f4ag from f1ag limit 2,1)))%23
- 利用時間函數進行判斷, 如:
select 1,IF(1=1, sleep(3), 'goodbye'),3
确認可以時間盲注的話,就可以編寫腳本進行爆破
- 很多時候再服務端往往會進行字元串過濾,這時候你要根據一定的資訊去猜測服務端可能存在的過濾方法,然後篩選出可能可以使用的注入方法,可能存在的情況有:字元串空替換,小寫關鍵字判斷,那麼關鍵字就可以寫成這樣:
,selselectect
sElEct
- 超長字元截斷,例如: 題目需要你以admin賬号登入,但是系統中已經存在admin賬号,此時,你注冊一個類似
的賬号,利用mysql的截斷,成功注冊使用者名為admin 的賬号admin空格*n 1
- 使用16進制注入,MySQL中會将16進制自動解析成字元串,同時,16進制也可以用于繞過is_numeric。
- 寬位元組注入,一般遇到addslashes函數來過濾
和'
時,可能會出現寬位元組注入,使用"
來與轉義引号的%df
進行合并,進而達到閉合輸入的目的。\
-
文法,試關鍵字段出現一個null的結果,配合limit擷取null值,最後通過與null比較,繞過邏輯判斷。group by rollup
三、檔案包含漏洞
- 檔案包含漏洞有時候是跟檔案上傳漏洞同時存在的,在上傳的時候注意僞裝檔案資訊,上傳小馬,然後使用檔案包含漏洞執行webshell,可以使用菜刀工具。
- 檔案包含漏洞往往可以讓你擷取頁面的源代碼,但是php檔案會被伺服器解析,是以你看不到,這裡就要用到php的僞協定,例如:
,使用僞協定來講源碼轉換成base64後輸出,然後用base64解碼成源碼。php://filter/read=convert.base64-encode/resource=xxxx.php
- 當然,在檔案包含漏洞中往往也為設定字元串過濾,但是還是有可以利用的函數漏洞,例如:使用
來替換%2570
,當代碼中判斷你的字元串是否包含php時,可以使用這個方法,但是注意,在浏覽器中似乎不管用,你可以再bash環境中使用curl測試。p
- 如果你上傳的檔案可以直接覆寫.htaccess檔案,那麼你可以在.htaccess中聲明,以php檔案去解析某一些比對的圖檔。
AddType application/x-httpd-php .jpg
-
include
函數,以字元’/‘分隔(而且不計個數),若是在前面的字元串所代表的檔案無法被PHP找到,則PHP會自動包含‘/’後面的檔案——注意是最後一個’/’
例如
include $_REQUEST['file'];
#payload
?file=hint.php?../../../../../../../../ffffllllaaaagggg
-
協定支援以file://
的方式通路伺服器檔案,來繞過file://localhost/etc/hosts
的過濾file:///
四、顯示源碼類型
- 這個就比較考驗你的邏輯思維了,一般吧目前檔案的源碼放出來給你,讓你找漏洞,其中也包括檔案包含的漏洞。
- 可利用的php函數的一些特性,比如在做字元串比較的時候,如:
, 首先帶那種過濾了0==$_GET['a']
,讓你無法送出數字,但是根據php的一些特性,你送出字元串時,在判斷時會被強轉成數字。$_GET
- md5利用,一般會判斷兩個不同輸入值的md5值是否相等,這時要利用php的特性,
開頭表示科學計數法,讓兩個MD5值為0e
0e
開頭的字元串進行md5比較,我也收藏了相關的部落格如下:
https://blog.csdn.net/qq449736038/article/details/80843914
-
反序列化漏洞,通過修改序列化字元串繞過反串行化的漏洞
例如序列化後為:
可修改為:O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}
其中O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}
為了繞過正則+
/[oc]:\d+:/i
改為:1:
是為了繞過:2:
__wakeup
五、反彈shell
- 在近期的奪旗賽中,有一道題目,通過層層挖掘,找到了一個一句話木馬的頁面,但是系統禁用了很多執行函數,但是開放了一個叫PCNTL 函數,可以利用這個函數進行腳本執行,利用執行到的反彈shell進行伺服器shell執行
五、xss和csrf
會有專門的機器人來跑腳本去出發你的payload,不過沒遇到過
六、混合型
此類題目會結合以上的類型進行難度較大的flag挖掘