Reflection
Reflection이란?
Reflection은 구체적인 클래스 타입을 알지 못해도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있는 java의 API이다.
Java는 컴파일 언어라서 런타임 도중 클래스나 메소드를메서드를 가져오지 못하는데 Reflection을 이용하면 클래스나 메서드를 호출할 수 있다. SSTI CTF를 풀다가 나와서 정리를 해본다.
임의의 클래스 가져오기
"".getClass(); // 임의의 클래스를 가져온다.
클래스 로드
Class.forName("java.util.Scanner");
"".getClass().forName("java.util.Scanner");
생성자 설정
Class.forName('java.util.Scanner').getConstructor(T(Void).TYPE.forName("java.io.InputStream"))
Class.forName('java.util.Scanner').getConstructor(Class.forName("java.util.Scanner"))
인스턴스 생성
Class.forName("java.util.Scanner").getConstructor(Class.forName("java.io.InputStream")).newInstance([Constructor])
메소드 호출
.newInstance([Instance]).getMethod()[Index].invoke(null)
- getMethod()로 해당 클래스의 함수들을 배열로 불러온다.
- 배열의 순서에 따라 인덱스를 정해준다.
- invoke() 함수로 함수를 호출 , invoke()는 함수를 실행시켜주는 함수이다.
❗ 저작권
'Hacking > Web' 카테고리의 다른 글
[Web Hacking] Thymeleaf SSTI (0) | 2022.08.01 |
---|---|
[Web Hacking] URL 구조 (0) | 2022.08.01 |
[Web Hacking] Flask Debugger PIN Exploit (0) | 2022.07.31 |
[Web Hacking] DNS rebinding (0) | 2022.07.30 |
[Web Hacking] Missconfiguration DBMS (0) | 2022.07.26 |