更新ruby
首先卸载已有的ruby、onegadget:
sudo gem uninstall one_gadget
sudo apt remove gem ruby
下载ruby-install安装,由他来安装或升级ruby
wget -O ruby-install-0.8.1.tar.gz https://github.com/postmodern/ruby-install/archive/v0.8.1.tar.gz
tar -xzvf ruby-install-0.8.1.tar.gz
cd ruby-install-0.8.1/
sudo make install
安装指定版本ruby:
ruby-install ruby 3.0
编译时间有点长。
把路径加到path中:
export PATH="/home/lushan/.rubies/ruby-3.0/bin:$PATH"
此操作自会在当前shell起作用,关掉就不行了,所以要在/etc/profile末尾添加以上path,然后source 检查是否起作用,当前操作目前也只对该shell起作用,需要logout后重新登陆用户后方可生效。给出以下linux配置文件生效时机:
/etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量。
~/.profile : 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
/etc/bashrc : 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bashrc : 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
检查ruby版本:
##ruby --version
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
更新onegadget
按照github上说的,一条命令:gem install one_gadget
安装成之后,发现还是之前的版本,说明这次安装路径和上次不一样,系统首先找之前的路径,将之前的删掉:one_gadget -V
会输出onegadget在哪,之后再one_gadget -v
就是新装的版本了:
➜ /usr/local/bin$ one_gadget -v
OneGadget Version 1.7.4
可以使用libc2.31以上的onegadget了:
➜ /usr/local/bin$ one_gadget /glibc/2.31/64/lib/libc-2.31.so
0xe6aee execve("/bin/sh", r15, r12)
constraints:
[r15] == NULL || r15 == NULL
[r12] == NULL || r12 == NULL
0xe6af1 execve("/bin/sh", r15, rdx)
constraints:
[r15] == NULL || r15 == NULL
[rdx] == NULL || rdx == NULL
0xe6af4 execve("/bin/sh", rsi, rdx)
constraints:
[rsi] == NULL || rsi == NULL
[rdx] == NULL || rdx == NULL
注:一般one_gadget不能用是版本太低了,one_gadget版本跟新比较快,直接sudo gem install gem
即可,发现glibc最新版都能使用了。