私の攻撃マシンは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/
に正常に書き込むために、この状況にどのように対処できますか?
このエラーは、MySQLがこのディレクトリ/var/www/html/dvwa/
への書き込み権限を持っていないために発生します。
最近のほとんどのLinuxディストリビューションでは、AppArmorまたはSELinuxを使用してデーモンプロセスを分離しています。 MySQLで/var/www/
に書き込むことができない可能性があります。ただし、MySQLがこのディレクトリから読み取ることができる場合があります。このステートメントは、この投稿の時点でのUbuntuのAppArmorルールセットにも当てはまります。
PHPペイロードを/tmp
に書き込むことでUbuntuでこの制限を回避し、ローカルファイルインクルードの脆弱性を使用してペイロードを実行しました。これにより PHP-Nukeのリモートコード実行の悪用 。
理想的には(サーバー管理者の場合)MySQLでアクセスできるファイルの場所とApacheでアクセスできるファイルの場所とPHPは交差しません。通常、/tmp
はすべてのユーザーがアクセスできますが、 -designedシステムは、/tmp
へのアクセスを明示的に拒否するすべてのサービスに対して個別の一時ディレクトリを使用します。
言い換えれば、理想的にはそのようなエクスプロイトは不可能です(それが「理想的」に意味することです)が、実際には、通過できる穴や見落としがいくつか見つかります。これは、システムごとに行う必要がある場合があります。