
cve-2022-34169에서 파생된 Jdk Xalan의 payload 자동 생성 도구로, 다양한 Jdk에 따라 해당하는 xslt 파일을 생성할 수 있습니다.
이것은 cve-2022-34169 취약점을 기반으로 jdk xalan 오버플로 취약점을 위한 payload를 자동 생성하는 도구입니다. 다양한 JDK 버전에 필요한 오버플로 payload가 다르다는 점을 발견하여 이 자동 생성 도구가 탄생했습니다. 다른 버전의 JDK로 이 프로젝트를 실행하면 서로 다른 xslt 익스플로잇 파일을 생성할 수 있습니다.
select.bak.xslt를 select.xslt로 복사한 후, 실행할 명령어를 수정합니다.

그런 다음 java -jar AutoGenerateXalanPayload.jar를 실행하면 됩니다. 실행 중에 일부 오류가 발생할 수 있지만 무시하십시오. 프로그램 실행이 완료되면 생성된 select.xslt가 해당 JDK 버전에 맞는 xalan 오버플로 명령 실행을 위한 payload입니다.

https://mp.weixin.qq.com/s/xxAtjFvk9RxWiY-pwGf8Ow
JDK 서브 버전이 너무 많기 때문에 이분법을 사용하여 jdk1.6에서 jdk1.8까지의 버전을 비교했습니다. 예를 들어 jdk1.7 버전을 테스트할 때, 먼저 jdk1.7의 가장 높은 서브 버전을 테스트하여 xslt를 얻고, 이 xslt 내용을 A 유형으로 설정합니다. 그런 다음 jdk1.7의 가장 낮은 서브 버전을 테스트하여 xslt를 얻습니다. 만약 이 xslt가 1.7의 가장 높은 서브 버전에서 생성된 내용과 완전히 동일하다면, jdk1.7의 최저에서 최고 사이의 모든 버전이 동일한 A 유형의 payload를 사용한다는 것을 의미합니다. 만약 다르다면, jdk1.7의 중간 버전을 테스트하고, 이렇게 계속 이분법을 진행합니다. 이것이 제가 생각한 가장 빠른 테스트 방법이며, 모든 버전을 설치하지 않고도 전체를 커버할 수 있습니다. 아래 테스트 완료된 예를 들면, Jdk-8u301은 A 유형 payload, Jdk-8u202는 A 유형 payload입니다. 그렇다면 Jdk-8u221은 이 두 버전의 중간 버전인데, B 유형 payload일 리가 없지 않습니까?
아래는 제가 테스트하여 얻은 결과로, jdk1.6에서 1.8 사이에 여섯 가지 payload가 있음을 확인했습니다.
https://blog.noah.360.net/xalan-j-integer-truncation-reproduce-cve-2022-34169/
| jdk 버전 | xsls 유형 |
|---|
| Jdk-8u301 | A |
| Jdk-8u202 | A |
| Jdk-8u162 | A |
| Jdk8u152 | A |
| Jdk8u151 | B |
| Jdk8u144 | B |
| Jdk8u131 | B |
| Jdk8u121 | C |
| Jdk8u111 | C |
| Jdk8u102 | D |
| Jdk8u101 | D |
| Jdk8u91 | D |
| Jdk8u60 | D |
| Jdk8u20 | D |
| Jdk7u40 | D |
| Jdk7u21 | D |
| Jdk7u10 | D |
| Jdk7u05 | D |
| Jdk7u04 | D |
| Jdk7u03 | E |
| Idk7u02 | E |
| Jdk7u0 | E |
| Jdk6u45 | E |
| Jdk6u20 | E |
| Jdk6u17 | F |
| Jdk6u15 | F |
| Jdk6u10 | F |
| Jdk6u0 | F |