Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2018-20343 — PoC para CVE-2018-20343 | Kitploit
Herramientas/GitHubGitHub/alexandre-bartel/cve-2018-20343
Análisis de VulnerabilidadesExplotaciónFuzzingPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubalexandre-bartel/cve-2018-20343

CVE-2018-20343

PoC para CVE-2018-20343

Ver Repositorio
62hace 7 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2018-20343

Esta es una PoC para CVE-2018-20343, una vulnerabilidad en el motor Build de Ken Silverman. El archivo .map generado provoca un desbordamiento de búfer y sobrescribe la pila como se muestra a continuación:


Open Watcom bajo DosBox 0.74-2: el analista controla la pila
Bajo FreeDos 1.2: el analista controla EIP

El código vulnerable está en ENGINE.C:

root@kitploit:~
1935   kread(fil,&numsectors,2);
1936   kread(fil,&sector[0],sizeof(sectortype)*numsectors);

La variable sector tiene un tamaño declarado de MAXSECTORS * sizeof(struct sectortype) = 1024 * 40 = 40960 bytes. El analista controla numsectors (porque se lee del archivo de mapa) y, por lo tanto, puede crear un archivo de mapa para inicializar numsectors con un valor mayor que 40960 para provocar el desbordamiento.

Ken Silverman señaló que el código que depende de la función kread, como los siguientes fragmentos de código, también podría ser vulnerable:

En ENGINE.C:

root@kitploit:~
1938  kread(fil,&numwalls,2);
1939  kread(fil,&wall[0],sizeof(walltype)*numwalls);
1940
1941  kread(fil,&numsprites,2);
1942  kread(fil,&sprite[0],sizeof(spritetype)*numsprites);
root@kitploit:~
2033   kread(fil,palette,768);
2034   kread(fil,&numpalookups,2);
[...]
2046   kread(fil,palookup[globalpal],numpalookups<<8);
2047   kread(fil,transluc,65536);
root@kitploit:~
2453       kread(fil,&artversion,4);
2454       if (artversion != 1) return(-1);
2455       kread(fil,&numtiles,4);
2456       kread(fil,&localtilestart,4);
2457       kread(fil,&localtileend,4);
2458       kread(fil,&tilesizx[localtilestart],(localtileend-localtilestart+1)<<1);
2459       kread(fil,&tilesizy[localtilestart],(localtileend-localtilestart+1)<<1);
2460       kread(fil,&picanm[localtilestart],(localtileend-localtilestart+1)<<2);
root@kitploit:~
2520     kread(fil,&dasiz,4);
2521       //Must store filenames to use cacheing system :(
2522     voxlock[voxindex][i] = 200;
2523     allocache(&voxoff[voxindex][i],dasiz,&voxlock[voxindex][i]);
2524     ptr = (char *)voxoff[voxindex][i];
2525     kread(fil,ptr,dasiz);

En KDMENG.C:

root@kitploit:~
1155     kread(fil,&dawaversionum,4);
1156     if (dawaversionum != 0) { kclose(fil); return; }
1157  
1158     kread(fil,&numwaves,4);
1159     for(i=0;i<numwaves;i++)
1160     {
1161       kread(fil,&instname[i][0],16);
1162       kread(fil,&wavleng[i],4);
1163       kread(fil,&repstart[i],4);
1164       kread(fil,&repleng[i],4);
1165       kread(fil,&finetune[i],4);
root@kitploit:~
1194     kread(fil,snd,totsndbytes);
root@kitploit:~
1214   kread(fil,&kdmversionum,4);
1215   if (kdmversionum != 0) return(-2);
1216   kread(fil,&numnotes,4);
1217   kread(fil,&numtracks,4);
1218   kread(fil,trinst,numtracks);
1219   kread(fil,trquant,numtracks);
1220   kread(fil,trvol1,numtracks);
1221   kread(fil,trvol2,numtracks);
1222   kread(fil,nttime,numnotes<<2);
1223   kread(fil,nttrack,numnotes);
1224   kread(fil,ntfreq,numnotes);
1225   kread(fil,ntvol1,numnotes);
1226   kread(fil,ntvol2,numnotes);
1227   kread(fil,ntfrqeff,numnotes);
1228   kread(fil,ntvoleff,numnotes);
1229   kread(fil,ntpaneff,numnotes);

La PoC para esta vulnerabilidad se ha probado en los siguientes entornos:

  • El motor Build de Ken Silverman KENBUILD.ZIP (sha256sum 704a5eee1b722ed5f452d3fb1aff197f0d201ff9737839846268c6b1e07f8e1f)
  • El binario objetivo GAME.EXE (sha256sum 120acdf872af56ac65982a0c21e3aa2fdd06b70bd6203869ba777ce3e6daa5e4) compilado con el compilador Open Watcom 1.9
  • DOSBox 0.74-2 || FreeDOS 1.2 bajo QEMU.

El motor Build se ha utilizado en muchos juegos. A continuación se muestra una lista de juegos basados en el motor Build que se han probado contra la PoC (que desborda la variable sector):

Descargar herramienta
JuegoFecha de lanzamientoVersiónEstado
Duke Nukem 3D19961.5vulnerable
Shadow Warrior19971.2vulnerable
Redneck Rampage19971.01vulnerable
Blood19971.0not vulnerable