天天看點

ctf web個人總結CTF web個人總結

CTF web個人總結

僅供個人參考
從0開始接觸到了CTF,算是入門了,為了友善自己做題,現在記錄一下web類型題目的解題思路。

工具

  1. 中國菜刀
  2. burpsuite
  3. 谷歌浏覽器或火狐浏覽器
  4. postman(總感覺還是這個用着爽)
  5. sqlmap
  6. dirb

解題思路

一、普通思路

  1. 拿到題目首先檢視源代碼,在源代碼中特别注意js或者css檔案中是否透露着某些資訊
  2. 檢視meta标簽,如type為author的,這個标簽表示作者,後面很有可能會用到這些資訊
  3. 檢視根目錄下是否有robots.txt,建議任何網站,開始做題的時候都先扔到dirb中進行路徑爆破
  4. 注意審題,題目中往往會透露一些關鍵資訊,例如:網站備份,諸如此類,那麼建議根據路徑搜尋相關的www.zip或xxx.bak等備份檔案
  5. 使用者認證僞造,注意檢視網絡資料包,可以通過修改cookie,或者爆破jwt的方式僞造認證
  6. ip僞造,通常用于頁面需要本地或指定ip通路的題目,利用

    X-Forwarded-For

    X-Client-IP

    X-Real-IP

    CDN-Src-IP

    head頭,來僞造通路用戶端的ip,前提是服務端利用這兩個參數進行使用者驗證
  7. git洩露,網站下存在.git且可以通路,用

    GitHack

    工具,還原代碼,檢視漏洞

二、注入思路

  1. 時刻注意項目中是否有可送出的輸入框,後者頁面參數為

    id=1

    ,諸如此類,建議嘗試sql注入,sql注入有很多分類,簡單的可以使用sqlmap做基礎探測,如果一直半會兒試不出來可以先尋找其他突破口。
  2. sql注入先使用錯誤的參數進行頁面報錯判斷,因為有時候也有可能是作為檔案包含的參數。
  3. 使用

    '

    或者

    "

    進行sql探測,使用

    --+

    #

    (注意轉換成

    %23

    ,因為#在url中代表hash),如果有報錯是最好的。
  4. 使用一些固定的payload進行嘗試,例如:

    and 1=2

    ,

    and 1='1

    或者其他複雜的payload
  5. 使用

    extractvalue

    報錯函數進行注入,如:
?id=1" and extractvalue('~', concat(',', (select f4ag from f1ag limit 2,1)))%23
           
  1. 利用時間函數進行判斷, 如:
select 1,IF(1=1, sleep(3), 'goodbye'),3
           

确認可以時間盲注的話,就可以編寫腳本進行爆破

  1. 很多時候再服務端往往會進行字元串過濾,這時候你要根據一定的資訊去猜測服務端可能存在的過濾方法,然後篩選出可能可以使用的注入方法,可能存在的情況有:字元串空替換,小寫關鍵字判斷,那麼關鍵字就可以寫成這樣:

    selselectect

    ,

    sElEct

  2. 超長字元截斷,例如: 題目需要你以admin賬号登入,但是系統中已經存在admin賬号,此時,你注冊一個類似

    admin空格*n 1

    的賬号,利用mysql的截斷,成功注冊使用者名為admin 的賬号
  3. 使用16進制注入,MySQL中會将16進制自動解析成字元串,同時,16進制也可以用于繞過is_numeric。
  4. 寬位元組注入,一般遇到addslashes函數來過濾

    '

    "

    時,可能會出現寬位元組注入,使用

    %df

    來與轉義引号的

    \

    進行合并,進而達到閉合輸入的目的。
  5. group by rollup

    文法,試關鍵字段出現一個null的結果,配合limit擷取null值,最後通過與null比較,繞過邏輯判斷。

三、檔案包含漏洞

  1. 檔案包含漏洞有時候是跟檔案上傳漏洞同時存在的,在上傳的時候注意僞裝檔案資訊,上傳小馬,然後使用檔案包含漏洞執行webshell,可以使用菜刀工具。
  2. 檔案包含漏洞往往可以讓你擷取頁面的源代碼,但是php檔案會被伺服器解析,是以你看不到,這裡就要用到php的僞協定,例如:

    php://filter/read=convert.base64-encode/resource=xxxx.php

    ,使用僞協定來講源碼轉換成base64後輸出,然後用base64解碼成源碼。
  3. 當然,在檔案包含漏洞中往往也為設定字元串過濾,但是還是有可以利用的函數漏洞,例如:使用

    %2570

    來替換

    p

    ,當代碼中判斷你的字元串是否包含php時,可以使用這個方法,但是注意,在浏覽器中似乎不管用,你可以再bash環境中使用curl測試。
  4. 如果你上傳的檔案可以直接覆寫.htaccess檔案,那麼你可以在.htaccess中聲明,以php檔案去解析某一些比對的圖檔。
AddType   application/x-httpd-php     .jpg
           
  1. include

    函數,以字元’/‘分隔(而且不計個數),若是在前面的字元串所代表的檔案無法被PHP找到,則PHP會自動包含‘/’後面的檔案——注意是最後一個’/’

    例如

include $_REQUEST['file'];
#payload
?file=hint.php?../../../../../../../../ffffllllaaaagggg
           
  1. file://

    協定支援以

    file://localhost/etc/hosts

    的方式通路伺服器檔案,來繞過

    file:///

    的過濾

四、顯示源碼類型

  1. 這個就比較考驗你的邏輯思維了,一般吧目前檔案的源碼放出來給你,讓你找漏洞,其中也包括檔案包含的漏洞。
  2. 可利用的php函數的一些特性,比如在做字元串比較的時候,如:

    0==$_GET['a']

    , 首先帶那種過濾了

    $_GET

    ,讓你無法送出數字,但是根據php的一些特性,你送出字元串時,在判斷時會被強轉成數字。
  3. md5利用,一般會判斷兩個不同輸入值的md5值是否相等,這時要利用php的特性,

    0e

    開頭表示科學計數法,讓兩個MD5值為

    0e

    開頭的字元串進行md5比較,我也收藏了相關的部落格如下:

    https://blog.csdn.net/qq449736038/article/details/80843914

  4. 反序列化漏洞,通過修改序列化字元串繞過反串行化的漏洞

    例如序列化後為:

    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

  1. 在近期的奪旗賽中,有一道題目,通過層層挖掘,找到了一個一句話木馬的頁面,但是系統禁用了很多執行函數,但是開放了一個叫PCNTL 函數,可以利用這個函數進行腳本執行,利用執行到的反彈shell進行伺服器shell執行

五、xss和csrf

會有專門的機器人來跑腳本去出發你的payload,不過沒遇到過

六、混合型

此類題目會結合以上的類型進行難度較大的flag挖掘

PS:思路我會不定期整理與更新