ctf web基本步驟

2021-09-24 18:57:06 字數 3820 閱讀 8468

1. 看原始碼

可以右鍵->【檢視網頁源**】,也可以用火狐和谷歌瀏覽器的按f12鍵,按f12鍵可以修改html源**方便構造一些值提交,但如果不需要的話直接右鍵檢視源**更直觀,看網頁裡面的注釋之類的都很方便。

2. 抓包

這幾天接觸到的抓包一般是用burpsuite,如果要多次嘗試可以右鍵->【send to repeater】,如果要對某個字段爆破可以右鍵->【send to intruder】,這是我比較常用的兩種burpsuite的功能。

今天還接觸到谷歌瀏覽器:f12->network->勾選【preserve log】,也可以方便檢視請求包和響應包的資料(包頭欄位和網頁資料等)。

3. 關注的幾個地方

有時候開啟網頁後感覺沒有可疑的地方,首先檢視下源**,看有沒有注釋之類的提示資訊,之後重新開啟網頁,抓抓包看下請求包響應包的包頭資料有沒有可疑的地方。

4. include漏洞

遇到php**中有include($file)的,一般和 php://input或者php://filter有關,$file值如果是php://input,就要用post表單構造資料,如果是php://filter,就用下面的payload讀取檔案base64加密後的源**,解密後檢視源**。

php://filter/read=convert.base64-encode/resource=檔名(如index.php)
5. **審計

需要多次動態除錯來嘗試,以及要關注裡面出現的函式,出現在關鍵位置的函式一般都是有用的,搜尋一下有沒有相關的漏洞。

還有get引數構造的時候如果傳入的是陣列要記得加,?txt=[1,2,3],如果填?txt=[1,2,3]似乎不會被當做array處理。

6.編碼

js的幾種編碼(如js****)都可以在瀏覽器f12之後的控制台執行,這樣可以省去找解密**的時間。

html編碼,base64編碼,url編碼等等都可以在burpsuite上的decoder欄解決,但是發現burpsuite有一點不好就是中文不能顯示,不知道是不是字元編碼沒有配置好,找到乙個**:

可以解好幾種,介面也很簡潔。

7.sql注入

最近搞清楚了布林注入,盲注之類的意思,布林注入就像乙個只會告訴你對或錯的機械人,然後你去問他問題從而解決問題,盲注是說不會有提示資訊,雖然對資料庫的操作依然存在,但是不論是否操作成功都不會告訴你。

a>對乙個注入語句記個筆記:

%df' union select 1,database() %23 %df' union select 1,string from sql5.key %23

%df是在編碼為gbk的時候用於寬位元組注入的;%23就是#,但是用#不能通過;還有可以直接用 union select 欄位名 from 資料庫名.表名 的方式獲取欄位的值。

b>對用sqlmap進行手工注入的一些步驟記個筆記首先找到可以注入的點,比如找到網頁的某個動態頁面是可以注入用來顯示資訊的,然後將這個url用sqlmap來暴庫爆表。

python sqlmap.py -u "url" --level 3 --batch --dbs python sqlmap.py -u "url" --level 3 --batch -d ctf --tables python sqlmap.py -u "url" --level 3 --batch -d ctf -t flag --columns --dump

–batch sqlmap不會詢問你輸入 全部預設確定

–level 3 指定等級,大於等於3的時候會涉及到http頭注入的referer欄位

–(兩個-)符號用於查詢,比如–dbs用於查詢所有的資料庫,–tables用於查詢所有的表,-(乙個-)符號用於指定,比如-d ctf用於指定查詢的是ctf資料庫,-t flag用於指定查詢的是flag表,–dump可以用來將表中字段的值顯示出來。

c>還有一些用union select來獲得資料庫資訊的,鏈結

講得很全面。

1. @@version() mysql版本 

2. @@database() 當前資料庫

3. @@user() 當前使用者

4. @@datadir 當前資料庫路徑

5. @@version_compile_os 作業系統版本

1. concat(str1,str2,...) 沒有分隔符地連線字串

2. concat_ws(separator,str1,str2,...) 用分隔符連線字串

3. group_concat(str1,str2,...) 用逗號分隔字串

1. 查資料庫名,使用者名稱

union select 1,2,concat(user(),database(),version()),4,……,n --

(最後--用於注釋掉後面sql語句避免出錯)得到資料庫名

2. 查表名: union select group_concat(0x0a,table_name),2

from information_schema.tables

where table_schema=庫名十六進製制#

(庫名十六進製制可以用database()代替)

3. 查列名 union select group_concat(0x0a,column_name)

,2 from information_schema.columns

where table_schema=database() and table_name=』users』# (

也可以把表名改為十六進製制編碼0x7573657273)

4. 查需要的資訊(使用者名稱和密碼)

union select group_concat(distinct 0x0a,user_id,0x0a,first_name,0x0a,

last_name,0x0a,user,0x0a,password,0x0a),

2 from users #

總結的都比較散碎也比較基礎,以後積累的多了一些之後再來繼續補充。

<  用這個表示\u003c     >用這個表示 \u003e 

序列化

1、當在乙個網頁上找不到任何資訊時,要檢視他有沒有robots.txt 或者前面的備份檔案

2、extract() 函式從陣列中將變數匯入到當前的符號表。通俗的講 就是可以將鍵變成變數名,鍵值可以變成變數名的值

sha1()和md5()都可以用陣列繞過 而md5加密後判斷相等時只要是0e字串都會返回true

qnkcdzo 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904

3、file_get_contents() 可以使用php://input傳過去 再用post構建其裡面的內容

include() 可以使用

php://filter/read=convert.base64-encode/resource=檔名(如index.php) 也可以使用上述的方法。

sql md5

看到這裡的提交引數被md5再組合進sql查詢語句,導致常規的注入手段幾乎都失效了

但是注意到,md5之後是hex格式,轉化到字串時如果出現'or'***x的形式,就會導致注入

這裡提供乙個抄來的字串:ffifdyop

md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c

轉成字串為'or'6�]��!r,��b

從而完成了注入

CTF web方向思路

這段時間在刷ctf題目,在做到web方向的時候,一開始面對題目的時候,總有一種束手無策的感覺,在做了一些web題目後,寫一下總結希望以後做的時候可供參考 ctf不同於真實實戰,有很多題解出來需要繞很多彎,有時候我都懷疑很多題目是為了出題而出題.這樣有不好也有好,就是ctf的題目無論多難解,都會給你承...

CTF web命令執行漏洞

命令執行漏洞概念 當應用需要呼叫一些外部程式去處理內容的情況下,就會用到一些執行系統命令的函式。如php中的system,exec,shell exec等,當使用者可以控制命令執行函式中的引數時,將可注入惡意系統命令到正常命令中,造成命令執行攻擊。漏洞成因 指令碼語言優點是簡潔,方便,但也伴隨著一些...

CTF Web 安全學習 20 07 11

題目表述 x老師告訴小寧同學http通常使用兩種請求方法,你知道是哪兩種嗎?一種是get,一種是post。get在url中可以看到,形式為?a 1 post不會修改url,因此我們需要工具。我學習到了max hack bar工具。writeup如下 題目描述 x老師忘記刪除備份檔案,他派小寧同學去把...