題目來源:https://ctflearn.com/index.php?action=find_problem_details&problem_id=541
原題:
admin gate first
Flag?is safe in the admin account info
http://ec2-54-187-57-106.us-west-2.compute.amazonaws.com/admingatefirst/
honestly?i?don't know the flag and?i?want to know how to get it .. if you figured out comment the way below (i will leave the flag blank) help :*
點(diǎn)開題目給出的網(wǎng)站攒盈,我們可以看到一個登入界面勺三。頁面上給出了一個test用戶的用戶名和密碼仇哆。根據(jù)題目的提示树灶,我們的目標(biāo)是以admin身份登入這個頁面趟妥,網(wǎng)頁應(yīng)該就會返回flag僻他。
首先我們嘗試用SQL注入繞過驗證椿每,但是并不能繞過驗證而登入admin用戶。輸入頁面給出的test用戶名和密碼進(jìn)入頁面仔役,頁面結(jié)果如下:
可以看到頁面返回了一列JSon信息,其中包括了test用戶的角色是己。用Burp Suite進(jìn)行抓包又兵,刷新頁面:
我們可以看到刷新頁面后網(wǎng)頁用token來識別用戶的身份∽浞希可以看到"Authorization: Bearer"沛厨,說明這個token是JWT(JSON WEB Token)。利用JWT解碼器來解碼這個token(https://jwt.io/):
可以看到前兩部分是編碼的格式和token中的數(shù)據(jù)摔认。但是最后的簽名驗證卻失敗了逆皮。這是因為JWT的HS256格式會接收一個密鑰來簽名。如果我們不知道密鑰我們就不能構(gòu)造出自己的token参袱。
接下來我們就要對JWT進(jìn)行攻擊电谣,參考了這篇文章:https://www.sjoerdlangkemper.nl/2016/09/28/attacking-jwt-authentication/
首先我嘗試了將JWT第一個字段中的加密模式改為none,最后的簽名字段留為空白抹蚀。將這個token傳遞給了頁面剿牺。但是頁面返回了500,說明我們的token不能被驗證环壤。
接著我嘗試用Brute force來破解HS256的密鑰晒来。利用了這個工具:https://github.com/Sjord/jwtcrack
以rockyou為字典進(jìn)行破解:
程序很快返回了結(jié)果,密鑰是123456郑现。
知道了密鑰后我們就可以構(gòu)造出自己的token湃崩。將這個密鑰輸入到JWT解碼器中,并修改data中的用戶信息:
再將這個token傳遞給網(wǎng)頁:
可以看到網(wǎng)頁返回了flag值:
{"username":"admin","role":"admin","flag":"J!W!T#S3cr3T@2018"}