
Strumento di generazione automatica di payload per Xalan Jdk derivato da cve-2022-34169, in grado di generare il file xslt corrispondente in base ai diversi Jdk.
Questo è uno strumento di generazione automatica di payload per la vulnerabilità di overflow di Xalan in JDK, derivato dalla CVE-2022-34169. Poiché è emerso che diverse versioni di JDK richiedono payload di overflow diversi, è nato questo strumento di generazione automatica: basta eseguire il progetto con diverse versioni di JDK per generare diversi file XSLT di sfruttamento.
Copiare select.bak.xslt come select.xslt e modificare il comando che si desidera eseguire.

Quindi eseguire java -jar AutoGenerateXalanPayload.jar; durante il processo verranno lanciati alcuni errori, è sufficiente ignorarli. Al termine dell'esecuzione, il file select.xslt ottenuto è il payload per l'esecuzione del comando overflow di Xalan compatibile con quella versione di JDK.

https://mp.weixin.qq.com/s/xxAtjFvk9RxWiY-pwGf8Ow
Dato che ci sono troppe versioni minori di JDK, ho usato il metodo della bisezione per confrontare le versioni da JDK 1.6 a JDK 1.8. Prendendo come esempio il test della versione 1.7: prima ho testato la versione minore più alta di JDK 1.7, ottenendo un XSLT, e ho impostato il suo contenuto come tipo A. Poi ho testato la versione minore più bassa di JDK 1.7, ottenendo un XSLT. Se questo XSLT è esattamente identico a quello generato dalla versione minore più alta di 1.7, significa che tutte le versioni dalla più bassa alla più alta di JDK 1.7 condividono un payload di tipo A. Se invece è diverso, prendo la versione intermedia di JDK 1.7 e la testo, continuando così con la bisezione. Questo è il metodo di test più veloce che mi è venuto in mente: non serve installare e testare tutte le versioni e allo stesso tempo si copre l'intero intervallo. Faccio un esempio con i risultati già testati qui sotto: Jdk-8u301 è payload di tipo A, Jdk-8u202 è payload di tipo A, quindi Jdk-8u221 è la versione intermedia tra questi due; non può certo essere un payload di tipo B, no?
Di seguito i risultati dei miei test: ho rilevato che tra JDK 1.6 e 1.8 esistono sei tipi di 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 |