-3

このプログラムの脆弱性は何ですか?

私は現在、ハッキングの演習で立ち往生しており、何をすべきかわかりません!

「道」って何だと思いますか?大事だと思うから。

#include <fcntl.h>
#include <limits.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
  char buf[1024], path[PATH_MAX + 1];
  int fd, i;

  strcpy(path, getpwuid(getuid())->pw_dir);
  strcat(path, "/script.sh");

  strcpy(buf, "#!/bin/bash\necho Hello.\ndate\nrm \"$0\"\n");

  umask(0);
  if ((fd = open(path, O_CREAT | O_EXCL | O_WRONLY, 02760)) < 0) {
        perror("open");
        return 1;
  }
  write(fd, buf, strlen(buf));  
  close(fd);

  printf("please wait for us to run your script");  
  fflush(stdout);
  for (i = 0; i < 5; i++) {
        printf(".");
        fflush(stdout);
        sleep(1);
  }
  printf(" starting script\n");

  execl("/bin/sh", "/bin/sh", path, (char *) 0); 
  perror("execl");
  return 0;
}
4

1 に答える 1

1

良い。

プログラムは、後でユーザーの権限で実行するスクリプトを作成します。

umask (0) システムコールは、実際にそのファイルを誰でも書き込み可能にします (暗黙のうちに - open 呼び出しによりグループ書き込み可能になります - これを指摘してくれた Daniel Jour に感謝します - しかし、あなたのグループの誰かがそのファイルに挿入する最初のコマンドがファイルは chmod になり、エスカレートされる可能性があります)。

コメントで指摘されているように、あなたのグループの誰でも、ユーザーの権限で実行したいものを、ユーザーに代わって、その名前付きファイルにすべてのコマンドを書き込むだけで、プログラムが非常に素晴らしく、5 秒間待機している間に注入することができます。彼にそうすること。

そして、「人々のハッキングを助けないでください」に関する短いコメント - コメント: OP が行っていることは、プログラムの潜在的な脆弱性について学習しようとしていることであり、ここではまだかなり基本的なレベルにあります。プログラマーは、自分のコードにそのような落とし穴があり得ることに気付いた場合、感謝する必要があります。そのようなものをボンネットの下に保持しようとすることは、ハッカーを助けるだけであり、安全性を高めることは何もありません.

于 2016-02-23T20:04:03.320 に答える