間違いだらけの備忘録

このページの内容は無保証でありこのページの内容によって直接、または間接に損害を受けられたとしても私は責任を取りません。

suidの使い方

y氏からのネタ


以下のperlスクリプトは穴がある。

#!/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が効かないようだ。
perlperl-suid(sperl)ががんばってエミュレーションしているようだ。
#なのでperl-suidは実験後アンインストールした

このページにはhatena以外のサービスからのコンテンツが埋め込まれています。 hatenaによりGoogle AdSense 広告が埋め込まれています。