[b01lers2020]Welcome to Earth-1
- 2022 年 8 月 2 日
- 筆記
- BUUCTF刷題記錄, 未分類
1、打開之後介面如下,查看源程式碼資訊,發現chase文件,結果如下:
2、訪問chase文件會一直跳轉到die介面,那就只能抓包進行查看,發現leftt文件,結果如下:
3、訪問leftt文件並查看源程式碼資訊,發現shoot文件,結果如下:
4、訪問shoot文件並查看源程式碼資訊,發現door文件,結果如下:
5、訪問door文件並查看源程式碼資訊,發現check_door()函數和door.js文件,結果如下:
door.js文件內容如下:
6、在door.js文件中發現了open文件,訪問open文件並查看源程式碼資訊,發現open_sesame.js文件,結果如下:
open_sesame.js文件內容如下:
7、在open_sesame.js文件中發現fight文件,訪問fight文件並查看源程式碼資訊,發現fight.js文件,結果如下:
fight.js文件資訊內容如下:
8、到這裡就沒有思路了,原以為是執行scramble函數獲取flag值,但是執行了之後並未成功獲取到flag值,那就只能手動的進行排列組合了,簡單的分析下{hey肯定在第二個位置,ck!}肯定在最後一個位置,pctf應在實在第一個位置的,那就剩_boy、aaaa、s_im、_baa、aaaa五個進行排列組合,5*4*3*2*1=120中,也是無語了,這麼多那肯定不是讓手動組合的,然後就在網上查找了下發現都是採用這個程式碼來實現的,最終成功獲取到flag值,程式碼資訊如下:
from itertools import permutations
import re
flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"]
# 對flag字典里的內容進行排列組合
item = permutations(flag)
# 遍歷
for a in item:
k = ''.join(list(a))
# 匹配
if re.search('^pctf\{hey_boys[a-zA-z_]+ck!\}$', k):
print(k)
可執行的scramble函數(但是未執行出來正確flag),程式碼如下:
var flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"];
var key = "Earth";//自己隨便寫的
function scramble(flag,key) {
for (var i = 0; i < key.length; i++) {
let n = key.charCodeAt(i) % 8;
let temp = flag[i];
flag[i] = flag[n];
flag[n] = temp;
}
return flag;
}
console.log(scramble(flag,key));
document.write(scramble(flag,key));
結果如下: