;=============================================================================================================================================
; cgi_2.asm
;This program shows the environment variables
; Algorithm
;C1: Configure the page properties
;C2: Show all present variables
;(C)I don't take any responsibility for the use of this program
; Zedr0n -- connection closed
;=============================================================================================================================================
;=============================================================================================================================================
; Options/Declarations
;=============================================================================================================================================
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib \masm32\lib\kernel32.lib
CR equ 0Dh
LF equ 0Ah
;=============================================================================================================================================
; Data segment
;=============================================================================================================================================
.data
HTML db "Content-type: text/html",CR,LF,CR,LF
db ""
db ""
db "
"
db ""
db ""
db ""
db "CGI variables"
db ""
db ""
HTML_size equ $-HTML
end_html db ""
db "",0
end_size equ $-end_html
var_name_1 db "REQUEST_METHOD",0
var_size_1 equ $-var_name_1
var_name_2 db "QUERY_STRING",0
var_size_2 equ $-var_name_2
var_name_3 db "CONTENT_LENGTH",0
var_size_3 equ $-var_name_3
var_name_4 db "CONTENT_TYPE",0
var_size_4 equ $-var_name_4
var_name_5 db "GATEWAY_INTERFACE",0
var_size_5 equ $-var_name_5
var_name_6 db "REMOTE_ADDR",0
var_size_6 equ $-var_name_6
var_name_7 db "REMOTE_HOST",0
var_size_7 equ $-var_name_7
var_name_8 db "SCRIPT_NAME",0
var_size_8 equ $-var_name_8
var_name_9 db "SCRIPT_FILENAME",0
var_size_9 equ $-var_name_9
var_name_10 db "SERVER_NAME",0
var_size_10 equ $-var_name_10
var_name_11 db "SERVER_PORT",0
var_size_11 equ $-var_name_11
var_name_12 db "SERVER_PROTOCOL",0
var_size_12 equ $-var_name_12
var_name_13 db "SERVER_SOFTWARE",0
var_size_13 equ $-var_name_13
var_name_14 db "HTTP_ACCEPT",0
var_size_14 equ $-var_name_14
var_name_15 db "HTTP_USER_AGENT",0
var_size_15 equ $-var_name_15
var_name_16 db "HTTP_HOST",0
var_size_16 equ $-var_name_16
br db " ",0
br_size equ $-br
buf_var dd offset var_name_1,offset var_name_2,offset var_name_3,offset var_name_4,offset var_name_5,offset var_name_6
dd offset var_name_7,offset var_name_8,offset var_name_9,offset var_name_10,offset var_name_11,offset var_name_12
dd offset var_name_13,offset var_name_14,offset var_name_15,offset var_name_16,0
bufv_size equ $-buf_var
bufvar_size dd var_size_1,var_size_2,var_size_3,var_size_4, var_size_5, var_size_6
dd var_size_7,var_size_8,var_size_9,var_size_10,var_size_11,var_size_12
dd var_size_13,var_size_14,var_size_15,var_size_16,0
bufvar equ $-bufvar_size
space db "     ",0
space_size equ $-space
;============================================================================================================================================
; Variables segment
;============================================================================================================================================
.data?
OutHandle dd ?
Written dd ?
buffer db 256 dup(?)
buf_size equ $-buffer
i dd ?
temp dd ?
funt dd ?
;=============================================================================================================================================
; Code segment
;=============================================================================================================================================
.code
start:
pusha
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov OutHandle,eax
cmp eax,INVALID_HANDLE_VALUE
jz Exit
C1:
invoke WriteFile,OutHandle,offset HTML,HTML_size,offset Written,NULL
C2:
mov i,0
mov temp,1
.while temp!=0
mov ebx,i
lea ebx,[ebx*4]
mov eax,buf_var[ebx]
mov temp,eax
invoke GetEnvironmentVariable,temp,offset buffer,buf_size
.if eax==0
jmp Go
.endif
mov funt,eax
mov ecx,bufvar_size[ebx]
invoke WriteFile,OutHandle,temp,ecx,offset Written,NULL
invoke WriteFile,OutHandle,offset space,space_size,offset Written,NULL
invoke WriteFile,OutHandle,offset buffer,funt,offset Written,NULL
invoke WriteFile,OutHandle,offset br,br_size,offset Written,NULL
Go:
inc i
.endw
Exit:
invoke WriteFile,OutHandle,offset end_html,end_size,offset Written,NULL
popa
invoke ExitProcess,NULL
end start