Análisis lógico de detección de vulnerabilidades de carga de archivos AWVS14.7

Análisis de File_Upload.script

iniciarPrueba().png

startTesting() -> prepareUploadURLs() = true -> finalizar la ejecución del complemento

startTesting() -> prepareUploadURLs() == false -> TestXXEFileUpload() se usa para juzgar si existe una vulnerabilidad alertXXE() y continuar ejecutándose independientemente de si existe una vulnerabilidad -> obtener la ruta ( this.scheme. path ), y la ruta tiene un nombre de sufijo, y el sufijo es cgi o pl -> **TestPerlJam2() se usa para juzgar si existe una vulnerabilidad alertPerljam2()**, y continúa ejecutándose independientemente de si hay es una vulnerabilidad -> Continuar ejecutando

startTesting() -> prepareUploadURLs() == false -> TestXXEFileUpload() se usa para juzgar si existe una vulnerabilidad alertXXE() y continuar ejecutándose independientemente de si existe una vulnerabilidad -> la ruta ( this.scheme.path ) no se obtiene , o la ruta no es Hay un sufijo, o el sufijo no es cgi o pl -> **TestZipSymlinkUpload() se usa para determinar si existe una vulnerabilidad alertZipSymlink()**, y lo hará continuar ejecutándose independientemente de si existe una vulnerabilidad -> **TestImageUploadExifXSS()** se usa para determinar si existe una vulnerabilidad **alertEXIFXSS()**, continuar ejecutándose independientemente de si existe una vulnerabilidad -> esto . existFileUpload() == false -> finaliza la operación del complemento

startTesting() -> prepareUploadURLs() == false -> TestXXEFileUpload() se usa para juzgar si existe una vulnerabilidad alertXXE() y continuar ejecutándose independientemente de si existe una vulnerabilidad -> la ruta ( this.scheme.path ) no se obtiene , o la ruta no es Hay un sufijo, o el sufijo no es cgi o pl -> **TestZipSymlinkUpload() se usa para determinar si existe una vulnerabilidad alertZipSymlink()**, y lo hará continuar ejecutándose independientemente de si existe una vulnerabilidad -> **TestImageUploadExifXSS()** se usa para determinar si existe una vulnerabilidad **alertEXIFXSS()**, continuar ejecutándose independientemente de si existe una vulnerabilidad -> esto . existFileUpload() == verdadero -> llamar a TestFileUpload() por primera vez -> this.foundOneUploadURL == falso -> finalizar la ejecución del complemento

startTesting() -> prepareUploadURLs() == false -> TestXXEFileUpload() se usa para juzgar si existe una vulnerabilidad alertXXE() y continuar ejecutándose independientemente de si existe una vulnerabilidad -> la ruta ( this.scheme.path ) no se obtiene , o la ruta no es Hay un sufijo, o el sufijo no es cgi o pl -> **TestZipSymlinkUpload() se usa para determinar si existe una vulnerabilidad alertZipSymlink()**, y lo hará continuar ejecutándose independientemente de si existe una vulnerabilidad -> **TestImageUploadExifXSS()** se usa para determinar si existe una vulnerabilidad **alertEXIFXSS(), continuar ejecutándose independientemente de si existe una vulnerabilidad -> this.existFileUpload( ) == verdadero -> llame a TestFileUpload() por primera vez -> this.foundOneUploadURL == verdadero -> llame a TestFileUpload() a su vez 19 veces, cada vez que se crea un archivo diferente para la prueba de paso largo, si se detecta una vulnerabilidad , llame a alert()** y finalice la operación de complemento

empezar a probar()

1.0 si se detecta como entrada de archivo ( this.scheme.hasFileInput )

Luego llame a prepareUploadURLs()

2.1 Si prepareUploadURLs() devuelve true , finalice la operación de complemento

2.2 Si prepareUploadURLs() devuelve falso , el complemento continúa ejecutándose

3.0 Si llama a la interfaz aws s3, llame a TestXXEFileUpload() (consulte la descripción detallada de esta función para conocer el método de llamada)

Independientemente de si TestXXEFileUpload() informa un agujero ( alertXXE() ), la función continúa ejecutándose

4.0 Si se obtiene la ruta ( this.scheme.path ) , y la ruta tiene un nombre de sufijo, y el nombre de sufijo es cgi (secuencia de comandos de interfaz de red pública) o pl (compilada y ejecutada por secuencia de comandos Perl), llame a TestPerlJam2()

5.0 Llame a TestZipSymlinkUpload() , el método de llamada es this.TestZipSymlinkUpload(“SanTest” + random(maxRandomNumber) + “.zip”, “application/octet-stream”)

6.0 Llame a TestImageUploadExifXSS() , el método de llamada es este.TestImageUploadExifXSS(“SanTestEXIF” + random(maxRandomNumber) + “.jpg”, “image/jpeg”)

7.0 Llame a **this.existFileUpload()** para determinar si el archivo cargado es visible o no, y ya no pruebe si no es visible

8.0调用TestFileUpload(),调用方法为this.TestFileUpload(“SanTest” + random(maxRandomNumber) + “.jpg”, “image/jpeg”, b642plain(“/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/ EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), detectURLstr)

Aquí, la carga útil base64 se decodifica como la siguiente imagen, con una oración generada por php

imagen.png

9.1 this.foundOneUploadURL == false , finalizar la ejecución del complemento

9.2 this.foundOneUploadURL == verdadero

Llame a **TestFileUpload() 19 veces, cada vez que construya un archivo diferente para la prueba de paso largo, si se detecta una vulnerabilidad, llame a alert()** y finalice la operación del complemento

if (!await this.TestFileUpload("Applet" + random(maxRandomNumber) + ".class", "image/jpeg", appletPayload, appletPayload))
                    await this.TestFileUpload("Applet" + random(maxRandomNumber) + ".jar", "image/jpeg", appletPayload, appletPayload);
                // test xss via svg
                await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".svg", "application/xml", b642plain("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4NCjx1c2UgeGxpbms6aHJlZj0iZGF0YTphcHBsaWNhdGlvbi94bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzYVc1cklqNE5DanhrWldaelBnMEtQR05wY21Oc1pTQnBaRDBpZEdWemRDSWdjajBpTlRBaUlHTjRQU0l4TURBaUlHTjVQU0l4TURBaUlITjBlV3hsUFNKbWFXeHNPaUFqUmpBd0lqNE5Danh6WlhRZ1lYUjBjbWxpZFhSbFRtRnRaVDBpWm1sc2JDSWdZWFIwY21saWRYUmxWSGx3WlQwaVExTlRJaUJ2Ym1KbFoybHVQU2RoYkdWeWRDZ3hLU2NnYjI1bGJtUTlKMkZzWlhKMEtESXBKeUIwYnowaUl6QXdSaUlnWW1WbmFXNDlJakZ6SWlCa2RYSTlJalZ6SWlBdlBnMEtQQzlqYVhKamJHVStEUW84TDJSbFpuTStEUW84ZFhObElIaHNhVzVyT21oeVpXWTlJaU4wWlhOMElpOCtEUW84TDNOMlp6NGcjdGVzdCIvPg0KPC9zdmc+ICAg"), '<use xlink:href="data:application/xml;base64,', 0, 'svg');
                // test xsscanonUrl
                if (!await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".htm", "text/html", b642plain("PHNjcmlwdD5hbGVydCgnc2FuZ2ZvciB4c3MgdGVzdCcpOzwvc2NyaXB0Pg=="), "<script>alert('sangfor xss test');</script>", 0, 'html'))
                    await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".htm", "image/jpeg", b642plain("PHNjcmlwdD5hbGVydCgnc2FuZ2ZvciB4c3MgdGVzdCcpOzwvc2NyaXB0Pg=="), "<script>alert('sangfor xss test');</script>", 0, 'html');
                // test shell upload
                ScriptProgress(ComputeProgress(2, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(3, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php.php.rar	", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(4, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php3", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(5, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php\x00.jpg", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEARwBHAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAEAAQAwEiAAIRAQMRAf/EABYAAQEBAAAAAAAAAAAAAAAAAAQAAf/EACIQAAEEAgEEAwAAAAAAAAAAAAIBAwQFBhEHABITMSFBYf/EABUBAQEAAAAAAAAAAAAAAAAAAAQH/8QAIhEBAAECBAcAAAAAAAAAAAAAERIAEwMEFUEiJTJCYqGx/9oADAMBAAIRAxEAPwB1CxxdV8a01pk9Lb3OQ2kmajcaHZymyMQlutivaDqCKIIiKaT5169r1t9H4utONLm1xelt6bIauTCRyNMs5ThNi5LabJe03VEkUSIV2nxv16XovHzvH7IVFhkmT2tfMhx7CG/EYqZZkPklSDbcbeBshRex7e039fvVyA7x+63cWGN5Ra2EybHr4jEN+plgReKVHNxxx420FV7Gd7XX3+dI5vqvfC55BL5VPhlmLiXVeIZ9IAb+9q//2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(6, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".phtml", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(7, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php", "text/plain", b642plain("PD9waHAgZWNobyhtZDUoJ2FjdW5ldGl4LWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+"), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(8, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php.jpg", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(9, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php.123", "image/png", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(10, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php::$DATA", "image/png", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(11, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".htaccess", "image/jpeg", b642plain("I1Nhbmdmb3IgLmh0YWNjZXNzIEZpbGUgVXBsb2FkIHRlc3QNCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1waHAgLmpwZyAucG5nIC5naWYgLmh0bSAuaHRtbCA="), "# .htaccess File Upload test")) return;
                ScriptProgress(ComputeProgress(12, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".php.ajpg", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEARwBHAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAEAAQAwEiAAIRAQMRAf/EABYAAQEBAAAAAAAAAAAAAAAAAAQAAf/EACIQAAEEAgEEAwAAAAAAAAAAAAIBAwQFBhEHABITMSFBYf/EABUBAQEAAAAAAAAAAAAAAAAAAAQH/8QAIhEBAAECBAcAAAAAAAAAAAAAERIAEwMEFUEiJTJCYqGx/9oADAMBAAIRAxEAPwB1CxxdV8a01pk9Lb3OQ2kmajcaHZymyMQlutivaDqCKIIiKaT5169r1t9H4utONLm1xelt6bIauTCRyNMs5ThNi5LabJe03VEkUSIV2nxv16XovHzvH7IVFhkmT2tfMhx7CG/EYqZZkPklSDbcbeBshRex7e039fvVyA7x+63cWGN5Ra2EybHr4jEN+plgReKVHNxxx420FV7Gd7XX3+dI5vqvfC55BL5VPhlmLiXVeIZ9IAb+9q//2Q=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(13, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".asp", "image/jpeg", b642plain("PCUgUmVzcG9uc2UuV3JpdGUoIjRkMDIwNzBlZmZkZDdlMzE5IiArICJjYTU2MWJjNjY2MTdhOGEiKSAlPg=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(14, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".aspx", "image/png", b642plain("PHNjcmlwdCBydW5hdD0ic2VydmVyIiBsYW5ndWFnZT0iQyMiPg0Kdm9pZCBQYWdlX0xvYWQob2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGUpew0KICBSZXNwb25zZS5Xcml0ZSgiNGQwMjA3MGVmZmRkN2UzMTkiICsgImNhNTYxYmM2NjYxN2E4YSIpOw0KfQ0KPC9zY3JpcHQ+DQo="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(15, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".asp", "text/plain", b642plain("PCUgUmVzcG9uc2UuV3JpdGUoIjRkMDIwNzBlZmZkZDdlMzE5IiArICJjYTU2MWJjNjY2MTdhOGEiKSAlPg=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(16, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".asp;.jpg", "image/jpeg", b642plain("PCUgUmVzcG9uc2UuV3JpdGUoIjRkMDIwNzBlZmZkZDdlMzE5IiArICJjYTU2MWJjNjY2MTdhOGEiKSAlPg=="), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(17, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".jsp", "image/jpeg", b642plain("PCUgb3V0LnByaW50KCI0ZDAyMDcwZWZmZGQ3ZTMxOSIgKyAiY2E1NjFiYzY2NjE3YThhIik7ICU+"), "963151c21d0fe4a98606a053e7cc9208")) return;
                ScriptProgress(ComputeProgress(18, numberTests));
                if (await this.TestFileUpload("SanTest" + random(maxRandomNumber) + ".jpg", "image/jpeg", b642plain("/9j/4AAQSkZJRgABAQEASABIAAD//gAyPD9waHAgZWNobyhtZDUoJ3Nhbmdmb3JyLWZpbGUtdXBsb2FkLXRlc3QnKSk7ID8+/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=="), "963151c21d0fe4a98606a053e7cc9208", 1)) return;

prepararSubirURLs()

Cree una matriz fileInputList para todas las entradas de archivos

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la matriz fileInputList

Si la longitud de fileInputList es 0, significa que no hay vulnerabilidad de carga de archivos y devuelve verdadero

Si la longitud de fileInputList no es 0

Luego envíe la matriz a la función del marco selectVariationsForInputList para su procesamiento.La función de esta función es cargar la matriz en el marco y declararla como variaciones de la matriz.

Defina una matriz de URL de vulnerabilidad de carga de archivos (this.uploadURLs) cuyo número sea la longitud de las variaciones de la matriz y asigne valores en la matriz this.uploadURLs a **{TO_BE_DETECTED}**

fin de operación

PruebaXXEFileUpload()

Primero cree un valor aleatorio rndToken con una longitud de 10 y escriba el rndToken en una carga útil en formato xml

Crear una clase TList fileInputList para todas las entradas de archivos

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la clase fileInputList

Devuelve verdadero si no hay ningún valor en la clase fileInputList

Si la matriz en la clase fileInputList no está vacía, envíe la matriz a la función del marco selectVariationsForInputList para su procesamiento. La función de esta función es cargar la matriz en el marco y asignar el valor de la matriz en la clase fileInputList a las variaciones de la matriz.

Cargue los valores en las variaciones del arreglo secuencialmente ( loadVariation() ),

Luego use setInputFileName() , setInputContentType() , **setInputValue()** para crear el nombre del archivo (pasado al llamar a la función), el tipo de archivo (pasado al llamar a la función) y el valor en el archivo ( payload ) (cadena aleatoria está aquí)

Envíe este archivo con dnslog, si el paquete de respuesta no informa un error o el código de error es 983043 , y dnslog puede monitorear números aleatorios, llame a alertXXE()

alertXXE() declara la vulnerabilidad XML_External_Entity_Injection_And_XML_Injection2.xml . (vulnerabilidad xx)


método de llamada startTesting():

Primero llame a **this.TestXXEFileUpload(“SanTest” + random(maxRandomNumber) + “.xml”, “text/xml”)**, si devuelve false,

Luego use **this.TestXXEFileUpload(“SanTest” + random(maxRandomNumber) + “.jpg”, “image/jpeg”)** para llamar.

Independientemente de los resultados de las dos llamadas anteriores, vuelva a llamarlo con **this.TestXSLTFileUpload(“SanTest” + random(maxRandomNumber) + “.xml”, “text/xml”)**

TestPerlJam2()

Inicialice la variable fileInputName para que coincida con el punto de entrada cuyo tipo de entrada es FILE en el punto de entrada. Si coincide, salga del ciclo y asígnelo a fileInputName

Construya un cuerpo de paquete con fileInputName

Envíe un paquete de datos con datos de tipo de formulario en el cuerpo del paquete de datos y llame a alertPerljam2() si hay algunas cadenas especiales (root, bin, etc.) en el paquete de respuesta .

alertPerljam2() declara que existe una vulnerabilidad Directory_Traversal.xml . (vulnerabilidad de cruce de directorio)

TestZipSymlinkUpload()

Cree una carga útil variable como una cadena de resultados de descifrado de base64, y no entiendo el contenido decodificado de base64. . . ? Se dice en Internet que es un enlace blando que contiene una referencia a otros archivos o directorios en forma de ruta absoluta (ruta_(informática)) o ruta relativa.

imagen.png

Crear una clase TList fileInputList para todas las entradas de archivos

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la clase fileInputList

Devuelve verdadero si no hay ningún valor en la clase fileInputList

Si la matriz en la clase fileInputList no está vacía, envíe la matriz a la función del marco selectVariationsForInputList para su procesamiento. La función de esta función es cargar la matriz en el marco y asignar el valor de la matriz en la clase fileInputList a las variaciones de la matriz.

Cargue los valores en las variaciones del arreglo secuencialmente ( loadVariation() ),

Luego use setInputFileName() , setInputContentType() , **setInputValue()** a su vez para crear el nombre del archivo (pasado al llamar a la función), el tipo de archivo (pasado al llamar a la función) y el valor en el archivo ( carga útil )

Luego envíe el paquete, si el paquete de respuesta no informa un error

Primero juzgue si hay cadenas especiales (raíz, bin, etc.) en el paquete de respuesta y, de ser así, llame a alertZipSymlink() y devuelva verdadero

De lo contrario, base64 descifra los datos del paquete de respuesta una vez. Si el contenido descifrado contiene cadenas especiales (raíz, contenedor, etc.), llame a alertZipSymlink() y devuelva verdadero

alertZipSymlink() declara que existe una vulnerabilidad File_Upload_ZIP_symlink.xml . (Vulnerabilidad de carga de archivo de enlace suave de paquete comprimido)

TestImageUploadExifXSS()

Cree una carga útil variable como una cadena de resultados de descifrado en base 64. El contenido decodificado en base 64 debe ser un caballo de imágenes y hay muchos comandos emergentes.

imagen.png

Crear una clase TList fileInputList para todas las entradas de archivos

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la clase fileInputList

Devuelve verdadero si no hay ningún valor en la clase fileInputList

Si la matriz en la clase fileInputList no está vacía, envíe la matriz a la función del marco selectVariationsForInputList para su procesamiento. La función de esta función es cargar la matriz en el marco y asignar el valor de la matriz en la clase fileInputList a las variaciones de la matriz.

Cargue los valores en las variaciones del arreglo secuencialmente ( loadVariation() ),

Luego use setInputFileName() , setInputContentType() , **setInputValue()** a su vez para crear el nombre del archivo (pasado al llamar a la función), el tipo de archivo (pasado al llamar a la función) y el valor en el archivo ( carga útil )

Luego envíe el paquete, si el paquete de respuesta no informa un error y se reconoce la etiqueta = svg | onlοad = alerta (7346763) después del análisis html, llame a alerta EXIFXSS ()

alertEXIFXSS() declara que existe una vulnerabilidad File_Upload_XSS.xml . (La carga de archivos activa la vulnerabilidad XSS)

TestFileUpload()

1.0 Crear fileInputList de clase TList para todos los archivos de entrada

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la clase fileInputList

Devuelve verdadero si no hay ningún valor en la clase fileInputList

Si la matriz en la clase fileInputList no está vacía, envíe la matriz a la función del marco selectVariationsForInputList para su procesamiento. La función de esta función es cargar la matriz en el marco y asignar el valor de la matriz en la clase fileInputList a las variaciones de la matriz.

Cargue los valores en las variaciones del arreglo secuencialmente ( loadVariation() ),

Luego use setInputFileName() , setInputContentType() , **setInputValue()** a su vez para crear el nombre del archivo (pasado al llamar a la función), el tipo de archivo (pasado al llamar a la función) y el valor en el archivo ( carga útil )

Luego envíe el paquete.

Si hay " \x00.jpg " en el nombre del archivo, elimine su " \x00.jpg "

Si el paquete de respuesta no informa de un error

2.1 Determine el valor de **this.uploadURLs[varIndex], si this.uploadURLs[varIndex] == {NOT_FOUND}**, salga de esta función directamente

2.2 Si this.uploadURLs[varIndex] == {TO_BE_DETECTED} o {BRUTEFORCE}

Primero pruebe el directorio de carga de archivos previamente determinado, construya url = ruta de escaneo + nombre de archivo

2.2.1 Llame a la función TestUploadedFileOnUrl() , si TestUploadedFileOnUrl() == true , luego defina la variable this.foundOneUploadURL = true , intercepte la URL desde el último " / " de la ruta del archivo escaneado y asígnela a this.uploadURLs [varIndex] , si busca (se pasa al llamar a la función) = detectURLstr(sangforr-file-upload-test) , llame a alerta() y devuelva verdadero para salir de esta función

2.2.2 Llame a la función TestUploadedFileOnUrl() , si TestUploadedFileOnUrl() == false , luego cree una clase pd = getParserData(this.lastJob.response.body, this.lastJob.response.headerValue('content-type')) , if pd Si existe .getLinks() y el valor existe en el nombre del archivo, cree una matriz links = pd.getLinks() Si la url se pasa a través de http y hay un nombre de dominio ( baseDomain ), intercepte la url desde el último " / " de la ruta del archivo escaneado y asígnelo a this.uploadURLs[varIndex] , y deje que this.foundOneUploadURL = true if lookFor (pasado al llamar a la función) = detectURLstr(sangforr-file-upload-test) , luego llame a alert () y devuelva verdadero para salir de esta ejecución de función

2.2.3 Si los juicios en 2.2.1 y 2.2.2 no tienen éxito, cree una variable fileExt = getFileExt(filename) que es el sufijo del nombre del archivo, si hay una variable fileExt y una matriz de enlaces (esto array se creó en 3.2), cree un nuevo array newLinks = new TStringList() , si el final de un valor en los enlaces del array es "." + fileExt , agregue un valor en los enlaces del array al array newLinks

Si la longitud en la matriz newLinks no es 0, asigne esta longitud a la variable linksCount .La longitud de la variable linksCount no puede exceder 5. Si es mayor que 5, se reasignará a 5. Si el método de transmisión de la url es http y hay un nombre de dominio ( baseDomain ), intercepte la URL desde el último " / y asígnela a this.uploadURLs[varIndex] , y deje que this.foundOneUploadURL = true if lookFor (ingresar cuando llamando a la función) = detectURLstr(sangforr-file-upload-test) call alert() y devuelve true para salir de esta función

2.2.4 Si el juicio en 2.2.3 no tiene éxito, cambie el valor de la variable this.uploadURLs[varIndex] == '{TO_BE_DETECTED}' a this.uploadURLs[varIndex] = '{NOT_FOUND}'

2.3 El valor de la variable this.uploadURLs[varIndex] no pertenece a {NOT_FOUND} o {TO_BE_DETECTED} o {BRUTEFORCE}

Si la variable this.uploadURLs[varIndex] != '' , crea la clase canonUrl

Si appendPHPFilename (pasado al llamar a la función) == 1 entonces canonUrl = new TURL(this.uploadURLs[varIndex] + nombre de archivo + '/sangfort.php') , de lo contrario canonUrl = new TURL(this.uploadURLs[varIndex] + nombre de archivo )

Luego llame a la función **TestUploadedFileOnUrl()** Si el resultado es verdadero y busque (pasado al llamar a la función) = detectURLstr(sangforr-file-upload-test) , llame a alert() y devuelva verdadero para salir de esto función

3.0 No se cumple ninguna de las condiciones anteriores, lo que indica que no hay vulnerabilidad de carga de archivos, devuelve falso

TestUploadedFileOnUrl()

Envíe el paquete directamente (la información del paquete se pasa cuando se llama a la función), si hay una variable searchStr en el paquete de respuesta (se pasa cuando se llama a la función) y el tipo de archivo es la variable addedContentType (se pasa cuando se llama a la función). se llama a la función), devuelve verdadero, de lo contrario devuelve falso

existFileUpload()

Crear una clase TList fileInputList para todas las entradas de archivos

Determine si el tipo de entrada es un archivo y, de ser así, agréguelo a la clase fileInputList

Si la matriz en la clase fileInputList no está vacía y luego envía la matriz a la función del marco selectVariationsForInputList para su procesamiento, la función de esta función es cargar la matriz en el marco

Luego use setInputFileName, setInputContentType y setInputValue para crear el nombre de archivo, el tipo de archivo y el valor en el archivo desde fileInputList a su vez (la cadena aleatoria está aquí)

Luego envíe un paquete de datos con una cadena aleatoria. Si el paquete de respuesta no informa un error o el código de error es 0xF0003, y el paquete de respuesta contiene la cadena aleatoria enviada anteriormente, llame a alertXSLT ( )

La instrucción alertXSLT() tiene una vulnerabilidad XSLT_injection.xml

Supongo que te gusta

Origin blog.csdn.net/weixin_46706771/article/details/125682422
Recomendado
Clasificación