y氏からのネタ
#!/usr/bin/perl $<=$>; $ENV{PATH}=""; print("$ARGV[0]\n"); $command="/bin/echo"; if ($ARGV[0] =~ /^(.*)$/) { $data = $1; } else { $data = ''; } $line = "$command $data"; print("$line\n"); system($line);
これをsetsuidする
# chown root.root wk1.pl
# chmod a+x,u+s wk1.pl
-r-sr-xr-x 1 root root 219 2006-10-22 22:44 wk1.pl
で、
$ perl wk1.pl '; /usr/bin/vi'
すると、
(かつperl-suidがインストールされていると)
root権限でviが上がる。
素敵すぎ...
修正版
#!/usr/bin/perl $<=$>; $ENV{PATH}=""; print("$ARGV[0]\n"); $command="/bin/echo"; if ($ARGV[0] =~ /^(.*)$/) { $data = $1; } else { $data = ''; } $line = "$command $data"; print("$line\n"); system($command,$data);
これは問題ない(らしい)。
詳細はman 1 perlfunc のsystemを参照
ちなみにシェルスクリプトにはsetsuidが効かないようだ。
perlはperl-suid(sperl)ががんばってエミュレーションしているようだ。
#なのでperl-suidは実験後アンインストールした