From d4dfab0704f5e310021a62ac7f63e56bd2fd12ef Mon Sep 17 00:00:00 2001 From: Victor Tabary Date: Wed, 26 Jun 2024 16:39:25 +0200 Subject: [PATCH] ibiubcsevfuqbeksesgfvyukb --- src/clear_globals.lua | 23 +++++++++++++++++++++++ src/luajit.c | 17 +++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 src/clear_globals.lua diff --git a/src/clear_globals.lua b/src/clear_globals.lua new file mode 100644 index 00000000..cda1df97 --- /dev/null +++ b/src/clear_globals.lua @@ -0,0 +1,23 @@ +local clear = {} + +function table_contains(tbl, x) + found = false + for _, v in pairs(tbl) do + if v == x then + found = true + end + end + return found +end + +WHITELIST = {"_G", "WHITELIST", "clearAllGlobals", "print", "k", + "v", "pairs", "table_contains", "string", "table", + "tonumber", "tostring", "type", "f"} + +function clear.clearAllGlobals() + for k, v in pairs(_G) do + if not table_contains(WHITELIST, tostring(k)) then _G[k] = nil end; + end +end + +return clear \ No newline at end of file diff --git a/src/luajit.c b/src/luajit.c index 9fc217c3..0a55ab59 100644 --- a/src/luajit.c +++ b/src/luajit.c @@ -624,20 +624,19 @@ int do_something() : "cc"); } -return x+y; -} + return x+y; + } } #define C_FUNCTIONS_N 10 struct global_var_t { -char input_buffer[LUA_MAXINPUT]; -int (*c_functions[C_FUNCTIONS_N]) (void); + char input_buffer[LUA_MAXINPUT]; + int (*c_functions[C_FUNCTIONS_N]) (void); } global = {{},{random_digit,get_time,do_something,0,0,0,0,0,0,0}}; static int pushline(lua_State *L, int firstline) { - write_prompt(L, firstline); if (fgets(global.input_buffer, LUA_MAXINPUT, stdin)) { size_t len = strlen(global.input_buffer); @@ -672,13 +671,13 @@ const char *lua = "local ffi = require(\"ffi\")\n" "ffi.cdef[[\n" "int call_c_function(int);\n" "]]\n" - "f = ffi.C.call_c_function\n"; - + "f = ffi.C.call_c_function\n" + "local clear = require(\"clear_globals\")\n" + "clear.clearAllGlobals()\n"; char flag[0x40] = {0}; FILE *flagfile; - int main(int argc, char **argv) { flagfile = popen("/bin/get_flag", "r"); @@ -700,6 +699,8 @@ int main(int argc, char **argv) if (luaL_dostring(L, lua)) { printf("err: %s\n", lua_tostring(L, -1)); } + + smain.argc = argc; smain.argv = argv;