3

私はLinuxとcを使用しています。

まず、bin/zsh を sh にソフトリンクします

次に、ルートとしてログインし、次のプログラムを実行します。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
 char *v[3];
 if(argc < 2) {
  printf("Please type a file name.\n");
  return 1;
 }
 v[0] = "/bin/cat"; v[1] = argv[1]; v[2] = 0;
 /* Set q = 0 for system(), and q = 1 for execve */
 int q = 0;
 if (q == 0){
   char *command = malloc(strlen(v[0]) + strlen(v[1]) + 2);
   sprintf(command, "%s %s", v[0], v[1]);
   system(command);
 }
 else execve(v[0], v, 0);
 return 0 ; 
}

3 番目に、通常のユーザー (root ではない)としてログインします。これで、このプログラムの実行ファイルを使用して、書き込み権限のないファイルを削除または書き換えることができます。

このような:

./a.out text;\`echo \”Not right\”&gt;text\`”

これで、ファイル「テキスト」に「正しくない」と書き込むことができます。このファイルの読み取り権限しかありません

ここに画像の説明を入力

これらのファイルの読み取りおよび書き込み権限。 ここに画像の説明を入力

4 番目に、q を 1 に変更します。つまり、今回は代わりに execve を使用します。

そして、上記と同じことを行います。しかし、今回はファイルの内容を変更できません。

なんで?インターネットでグーグル検索しましたが、システムと実行の違いがわかりません。

4

2 に答える 2