File Manager
Upload
Current Directory: /home/lartcid/public_html/journal.lartc.id
[Back]
..
[Open]
Hapus
Rename
.htaccess
[Edit]
Hapus
Rename
.well-known
[Open]
Hapus
Rename
README.md
[Edit]
Hapus
Rename
api
[Open]
Hapus
Rename
cache
[Open]
Hapus
Rename
cgi-bin
[Open]
Hapus
Rename
classes
[Open]
Hapus
Rename
config.TEMPLATE.inc.php
[Edit]
Hapus
Rename
config.inc.php
[Edit]
Hapus
Rename
controllers
[Open]
Hapus
Rename
cypress.json
[Edit]
Hapus
Rename
dbscripts
[Open]
Hapus
Rename
docs
[Open]
Hapus
Rename
error_log
[Edit]
Hapus
Rename
favicon.ico
[Edit]
Hapus
Rename
index.php
[Edit]
Hapus
Rename
js
[Open]
Hapus
Rename
lib
[Open]
Hapus
Rename
locale
[Open]
Hapus
Rename
mini.php
[Edit]
Hapus
Rename
pages
[Open]
Hapus
Rename
php.ini
[Edit]
Hapus
Rename
plugins
[Open]
Hapus
Rename
public
[Open]
Hapus
Rename
registry
[Open]
Hapus
Rename
scheduledTaskLogs
[Open]
Hapus
Rename
schemas
[Open]
Hapus
Rename
styles
[Open]
Hapus
Rename
templates
[Open]
Hapus
Rename
tools
[Open]
Hapus
Rename
Edit File
#include "common.h" int lock_file(char *filename) { int fd; if (!filename) return -1; if ((fd = open(filename,O_RDONLY | O_CREAT , S_IRWXU)) < 0) { print_error("lock_file","open",modsec_rpc_log_file,errno); return -1; } flock(fd,LOCK_EX); return fd; } int unlock_file(int fd) { flock(fd,LOCK_UN); return 0; } int print_request(char* url,char *command,parameter_t *parameters, int num_of_parameters, int mask) { char time_str[64], line[1024*1024]; time_t t; int fd; int i; switch (atoi(modsec_rpc_log_level)) { case DEBUG: time(&t); ctime_r(&t,time_str); time_str[strlen(time_str)-1] = '\0'; if ((fd = open(modsec_rpc_log_file,O_WRONLY | O_CREAT | O_APPEND | O_SYNC , S_IRWXU)) < 0) { print_error("print_request","open",modsec_rpc_log_file,errno); fd=2; } flock(fd,LOCK_EX); sprintf(line,"%s:REQUEST-BEGIN:======================================\n",time_str); line[1024*1024-1]='\0'; write(fd,line,strlen(line)); snprintf(line,1024*1024,"URL:%s\nCommand:%s\n",url,command); line[1024*1024-1]='\0'; write(fd,line,strlen(line)); for (i=0; i<num_of_parameters; i++) { snprintf(line,1024*1024,"%s=",parameters[i].name); line[1024*1024-1]='\0'; write(fd,line,strlen(line)); if (i == mask) { sprintf(line,"XXXXXXX\n"); write(fd,line,strlen(line)); } else { if (parameters[i].value) { snprintf(line,1024*1024,"%s\n",parameters[i].value); line[1024*1024-1]='\0'; } else sprintf(line,"\n"); write(fd,line,strlen(line)); } } sprintf(line,"%s:REQUEST-END:========================================\n",time_str); write(fd,line,strlen(line)); flock(fd,LOCK_UN); if (fd!=2) close(fd); break; } return 0; } int print_request_force(char* url,char *command,parameter_t *parameters, int num_of_parameters, int mask) { char real_level[1024]; strcpy(real_level,modsec_rpc_log_level); strcpy(modsec_rpc_log_level,"1"); print_request(url,command,parameters,num_of_parameters,mask); strcpy(modsec_rpc_log_level,real_level); return 0; } int print_reply(char *reply) { char time_str[64]; time_t t; int fd; printf("%s",reply); switch (atoi(modsec_rpc_log_level)) { case DEBUG: time(&t); ctime_r(&t,time_str); time_str[strlen(time_str)-1] = '\0'; if ((fd = open(modsec_rpc_log_file,O_WRONLY | O_CREAT | O_APPEND | O_SYNC , S_IRWXU)) < 0) { print_error("print_request","open",modsec_rpc_log_file,errno); fd=2; } flock(fd,LOCK_EX); write(fd,reply,strlen(reply)); flock(fd,LOCK_UN); if (fd!=2) close(fd); break; } return 0; } int print_error(char *func1, char* func2, char* str, int err) { char out[1024], time_str[64], line[1024*1024]; char str1[1024], str2[1024], str3[1024]; time_t t; int fd; time(&t); ctime_r(&t,time_str); time_str[strlen(time_str)-1] = '\0'; if (err) strcpy(out,strerror(err)); else strcpy(out,""); if (!func1) strcpy(str1,""); else { strncpy(str1,func1,1024); str1[1023]='\0'; } if (!func2) strcpy(str2,""); else { strncpy(str2,func2,1024); str2[1023]='\0'; } if (!str) strcpy(str3,""); else { strncpy(str3,str,1024); str3[1023]='\0'; } if ((fd = open(modsec_rpc_log_file,O_WRONLY | O_CREAT | O_APPEND | O_SYNC , S_IRWXU)) < 0) { fprintf(stderr,"%s:ERROR:print_error:open:%s:%s\n",time_str,strerror(errno),modsec_rpc_log_file); fd=2; } snprintf(line,1024*1024,"%s:ERROR:%s:%s:%s:%s\n",time_str,str1,str2,out,str3); line[1024*1024-1]='\0'; flock(fd,LOCK_EX); write(fd,line,strlen(line)); flock(fd,LOCK_UN); if (fd!=2) close(fd); return 0; } int is_proxy_up() { int pid; FILE *fp; if ((fp = fopen(modsec_proxy_pid,"r")) == NULL ) return 0; if (fscanf(fp,"%d",&pid) == 0) { print_error("is_proxy_up","fscanf","missing PID",0); fclose(fp); return 0; } fclose(fp); if (!pid || kill(pid,0)) return 0; return 1; } int run_cmd(char *command, char *output, int output_size) { char line[1024]; FILE *fp; if (output_size > 0 && output) output[0]='\0'; if (!(fp=popen(command,"r"))) { print_error("run_cmd","popen",command,errno); return -1; } while (output_size && fgets(line,output_size>1024?1024:output_size,fp)) { strcat(output, line); output_size -= strlen(line); } if (!output_size) while (fgets(line,1024,fp)); pclose(fp); return 0; } int find_param_idx(char *parameter_name, parameter_t *parameters, int max_parameters) { int i, idx=-1; for (i = 0; (i < max_parameters) && (idx < 0); i++) if ( strstr(parameters[i].name,parameter_name) ) idx=i; return idx; } int parse_file(char *filename, parameter_t *parameters, int max_parameters) { char line[1024], *ptr; int i; FILE *fp; if (!max_parameters || (parameters == NULL) || (filename == NULL)) { print_error("parse_file","invalid input parameters","none",0); return 0; } if ((fp = fopen(filename,"r")) == NULL ) { print_error("parse_file","fopen",filename,errno); return 0; } i=0; while ( i < max_parameters && fgets(line,1024,fp)) { if (ptr = strstr(line,"#")) *ptr='\0'; if (sscanf(line,"%[^=]=%s",parameters[i].name,parameters[i].value) != 2) continue; i++; } fclose(fp); return i; } int change_file(char *filename, parameter_t parameter) { char line[1024], *name, *value; int i, found=0; FILE *fp; if (filename == NULL) return 0; if ((fp = fopen(filename,"r+")) == NULL ) return 0; i=0; while ( fgets(line,1024,fp)) { sscanf(line,"%[^=]=%s",name,value); if (name && !strcmp(name,parameter.name)) { fprintf(fp,"%s=%s\n",name,parameter.value); found=1; continue; } else fprintf(fp,"%s",line); } fclose(fp); return found; } int copy_file(char *src_file, char *dst_file) { char line[1024]; FILE *sfp, *dfp; if (src_file == NULL || dst_file == NULL) return 0; if ((sfp = fopen(src_file,"r")) == NULL ) return 0; if ((dfp = fopen(dst_file,"w")) == NULL ) { fclose(sfp); return 0; } while ( fgets(line,1024,sfp)) fprintf(dfp,"%s",line); fclose(sfp); fclose(dfp); return 1; } int parse_query(char *query, parameter_t *parameters, int max_parameters) { char *ptr, *dst_ptr, num[3]; int i, len; if (!max_parameters || (parameters == NULL) || (query == NULL)) return 0; ptr=query; i=0; while ((i < max_parameters) && *ptr) { parameters[i].name[0] = '\0'; dst_ptr = parameters[i].name; len=0; while (*ptr && (*ptr != '=') && (len++ < MAX_NAME_LENGTH)) { if (*ptr == '%' && *(ptr+1) && *(ptr+2)) { num[0]=*(ptr+1); num[1]=*(ptr+2); num[2]='\0'; ptr += 3; *dst_ptr=(char)strtol(num,NULL,16); if (*dst_ptr) dst_ptr++; } else *dst_ptr++ = *ptr++; } if (len >= MAX_NAME_LENGTH) while (*ptr && (*ptr != '=')) *ptr++; if (*ptr) ptr++; *dst_ptr = '\0'; parameters[i].value[0] = '\0'; dst_ptr = parameters[i].value; len=0; while (*ptr && (*ptr != '&') && (len++ < MAX_VALUE_LENGTH)) { if (*ptr == '%' && *(ptr+1) && *(ptr+2)) { num[0]=*(ptr+1); num[1]=*(ptr+2); num[2]='\0'; ptr += 3; *dst_ptr=(char)strtol(num,NULL,16); if (*dst_ptr) dst_ptr++; } else *dst_ptr++ = *ptr++; } if (len >= MAX_VALUE_LENGTH) while (*ptr && (*ptr != '&')) *ptr++; if (*ptr) ptr++; *dst_ptr = '\0'; i++; } return i; } int parse_query_and_body (parameter_t *parameters, int max_parameters) { char *query, *content_length_env; int i, num_of_params, body_len, content_length; query = getenv("QUERY_STRING"); if (query && *query) return(parse_query(query,parameters,max_parameters)); else { content_length_env = getenv("CONTENT_LENGTH"); if (!content_length_env) return 0; if (! *content_length_env) return 0; content_length=atol(content_length_env); if (!(query=malloc(content_length+1))) return 0; i = 1; body_len=0; while ( (body_len < content_length) && (i>0) ) { i = read(0,query+body_len,(content_length-body_len)<1024?(content_length-body_len):1024); if (i > 0 ) body_len+=i; } query[body_len] = '\0'; num_of_params = parse_query(query,parameters,max_parameters); free(query); return num_of_params; } } int parse_cli (parameter_t *parameters, int max_parameters, int num_of_args, char *args[]) { char name[MAX_NAME_LENGTH], value[MAX_VALUE_LENGTH]; int i, num_of_params=0; if (num_of_args > 0) for (i=0; i<num_of_args && i<max_parameters; i++) { if (sscanf(args[i],"%[^=]=%s",name,value) < 2) continue; if (strlen(name) < MAX_NAME_LENGTH) strcpy(parameters[num_of_params].name,name); else continue; if (strlen(value) < MAX_VALUE_LENGTH) { strcpy(parameters[num_of_params].value,value); num_of_params++; } } return num_of_params; } int send_request(char *request,char *ip,char *port,char *reply,int max_reply_size) { int sock, i, reply_len; struct sockaddr_in servaddr; reply[0]='\0'; reply_len=0; if (!request || !*request || !ip || !port || !reply || !max_reply_size) return -1; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons((short)atol(port)); if ( inet_aton(ip, &servaddr.sin_addr) <= 0 ) return -1; if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { print_error("send_request","socket",ip,errno); return -1; } if ( connect(sock, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 ) { print_error("send_request","connect",ip,errno); close(sock); return -1; } i = strlen(request); if ( write(sock,request,i) < i ) { print_error("send_request","write",ip,errno); shutdown(sock,SHUT_RDWR); close(sock); return -1; } i = 1; reply_len=0; while ( (reply_len < max_reply_size) && (i>0) ) { i = read(sock,reply+reply_len,(max_reply_size-reply_len)<1024?(max_reply_size-reply_len):1024); if (i > 0 ) reply_len+=i; } reply[reply_len] = '\0'; shutdown(sock,SHUT_RDWR); close(sock); return reply_len; } int find_ip_idx(char *ip, blocklist_t *blocklist, int num_of_ips) { int i, idx=-1; for (i = 0; (i < num_of_ips) && (idx < 0); i++) if ( strstr(blocklist[i].ip,ip) ) idx=i; return idx; } int remove_ip_idx(char *ip, blocklist_t *blocklist, int num_of_ips) { int i, j, idx=-1; time_t t; time(&t); for (i = 0; i < num_of_ips; i++) if ( (ip && strstr(blocklist[i].ip,ip)) || (!ip && (t > blocklist[i].end)) ) { idx=i; for (j=i; j<(num_of_ips-1); j++) { strcpy(blocklist[j].ip,blocklist[j+1].ip); blocklist[j].start = blocklist[j+1].start; blocklist[j].duration = blocklist[j+1].duration; blocklist[j].end = blocklist[j+1].end; strcpy(blocklist[j].token,blocklist[j+1].token); } num_of_ips--; } return idx; } int read_conf_file (char *filename) { int idx, num_of_params; parameter_t parameters[MAX_PARAMS]; num_of_params=parse_file(filename,parameters,MAX_PARAMS); if ((idx = find_param_idx("MODSEC_CLI_HOME",parameters,num_of_params)) >= 0) strcpy(modsec_cli_home,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_HOME",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_home,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_LOG_FILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_log_file,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_LOG_LEVEL",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_log_level,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_SSL_LOCKFILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_ssl_lockfile,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_SENSOR_LOCKFILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_sensor_lockfile,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_REVERSEPROXY_LOCKFILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_reverseproxy_lockfile,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_EXTERNALNIC_LOCKFILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_externalnic_lockfile,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_MUI_LOCKFILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_mui_lockfile,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_LOG_LEVEL",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_log_level,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_HOME",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_home,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_IP",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_ip,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_PORT",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_port,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_NETWORK_PREFIX",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_network_prefix,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_BIN",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_bin,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_CONF",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_conf,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_EXT_NIC",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_ext_nic,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_PID",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_pid,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_WHITELIST",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_whitelist,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_BLACKLIST",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_blacklist,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_TIMEOUT",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_timeout,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_EXCHANGE",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_exchange,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_EXT_IPS",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_ext_ips,parameters[idx].value); if ((idx = find_param_idx("MODSEC_MUI_UI_ADMIN",parameters,num_of_params)) >= 0) strcpy(modsec_mui_ui_admin,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC_PASSWORD_FILE",parameters,num_of_params)) >= 0) strcpy(modsec_rpc_password_file,parameters[idx].value); if ((idx = find_param_idx("MODSEC_MUI_UI_IPADDRESS",parameters,num_of_params)) >= 0) strcpy(modsec_mui_ui_ipaddress,parameters[idx].value); if ((idx = find_param_idx("MODSEC_MUI_UI_PORT",parameters,num_of_params)) >= 0) strcpy(modsec_mui_ui_port,parameters[idx].value); if ((idx = find_param_idx("SENSOR_ID",parameters,num_of_params)) >= 0) strcpy(sensor_id,parameters[idx].value); if ((idx = find_param_idx("SERIAL",parameters,num_of_params)) >= 0) strcpy(serial,parameters[idx].value); if ((idx = find_param_idx("VERSION_NUMBER",parameters,num_of_params)) >= 0) strcpy(version_number,parameters[idx].value); if ((idx = find_param_idx("RELEASE_DATE",parameters,num_of_params)) >= 0) strcpy(release_date,parameters[idx].value); if ((idx = find_param_idx("BRIDGE_MODE",parameters,num_of_params)) >= 0) strcpy(bridge_mode,parameters[idx].value); if ((idx = find_param_idx("DATA_DISK_SPACE",parameters,num_of_params)) >= 0) strcpy(data_disk_space,parameters[idx].value); if ((idx = find_param_idx("CONN_RATE",parameters,num_of_params)) >= 0) strcpy(conn_rate,parameters[idx].value); if ((idx = find_param_idx("CONN_RATE_PER_ADDR",parameters,num_of_params)) >= 0) strcpy(conn_rate_per_addr,parameters[idx].value); if ((idx = find_param_idx("CONNS",parameters,num_of_params)) >= 0) strcpy(conns,parameters[idx].value); if ((idx = find_param_idx("CONNS_PER_ADDR",parameters,num_of_params)) >= 0) strcpy(conns_per_addr,parameters[idx].value); if ((idx = find_param_idx("MODSEC_RPC",parameters,num_of_params)) >= 0) strcpy(modsec_rpc,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY",parameters,num_of_params)) >= 0) strcpy(modsec_proxy,parameters[idx].value); if ((idx = find_param_idx("MODSEC_PROXY_SCRIPT",parameters,num_of_params)) >= 0) strcpy(modsec_proxy_script,parameters[idx].value); return num_of_params; } int init_cgi() { char *modsec; setresuid(0,0,0); setresgid(0,0,0); strcpy(modsec_cli_home,"/opt/modsecurity-cli"); strcpy(modsec_rpc_home,"/opt/modsecurity-rpc"); strcpy(modsec_rpc_log_file,"/opt/modsecurity-rpc/var/logs/rpc.log"); strcpy(modsec_rpc_log_level,"0"); strcpy(modsec_rpc_ssl_lockfile,"/opt/modsecurity-rpc/var/run/ssl.lock"); strcpy(modsec_rpc_sensor_lockfile,"/opt/modsecurity-rpc/var/run/sensor.lock"); strcpy(modsec_rpc_externalnic_lockfile,"/opt/modsecurity-rpc/var/run/externalnic.lock"); strcpy(modsec_rpc_reverseproxy_lockfile,"/opt/modsecurity-rpc/var/run/reverseproxy.lock"); strcpy(modsec_rpc_mui_lockfile,"/opt/modsecurity-rpc/var/run/mui.lock"); strcpy(modsec_proxy_home,"/opt/modsecurity-proxy"); strcpy(modsec_proxy_ip,"127.0.0.2"); strcpy(modsec_proxy_port,"80"); strcpy(modsec_proxy_bin,"/bin/modsec-proxyd"); strcpy(modsec_proxy_script,"/etc/init.d/modsec-proxy"); strcpy(modsec_proxy_conf,"/etc/httpd.conf"); strcpy(modsec_proxy_ext_nic,"eth0"); strcpy(modsec_proxy_network_prefix,"172.16.0.0/12"); strcpy(modsec_proxy_pid,"/opt/modsecurity-proxy/var/run/httpd.pid"); strcpy(modsec_proxy_whitelist,"/opt/breach/etc/modsec_whitelist.conf"); strcpy(modsec_proxy_blacklist,"/opt/breach/etc/modsec_blacklist.conf"); strcpy(modsec_proxy_timeout,"120"); strcpy(modsec_proxy_exchange,"/opt/modsecurity-proxy/var/exchange"); strcpy(modsec_proxy_ext_ips,"/opt/breach/etc/modsec_ips.conf"); strcpy(modsec_mui_ui_ipaddress,"127.0.0.1"); strcpy(modsec_mui_ui_port,"443"); strcpy(modsec_rpc_password_file,"/opt/modsecurity-rpc/etc/.htpasswd"); strcpy(modsec_mui_ui_admin,"admin"); strcpy(sensor_id,"1"); strcpy(serial,"1"); strcpy(version_number,"2.0"); strcpy(bridge_mode,"off"); strcpy(data_disk_space,"60"); strcpy(release_date,"11-15-2006"); strcpy(conn_rate,"0"); strcpy(conn_rate_per_addr,"0"); strcpy(conns,"0"); strcpy(conns_per_addr,"0"); if (modsec = getenv("MODSEC")) read_conf_file(modsec); else { if (!read_conf_file("/opt/breach/etc/modsec.conf")) read_conf_file("/etc/modsec.conf"); } return 0; }
Simpan