⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nasl_http.c

📁 大国补丁后的nessus2.2.8的源代码
💻 C
字号:
/* Nessus Attack Scripting Language  * * Copyright (C) 2002 - 2004 Tenable Network Security * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, * as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <includes.h>#include "nasl_tree.h"#include "nasl_global_ctxt.h"#include "nasl_func.h"#include "nasl_var.h"#include "nasl_lex_ctxt.h"#include "exec.h"#include "nasl_debug.h"#include "nasl_socket.h"#include "nasl_http.h"#include "strutils.h"/*-----------------[ http_* functions ]-------------------------------*/    tree_cell * http_open_socket(lex_ctxt * lexic){  return nasl_open_sock_tcp_bufsz(lexic, 65536);}tree_cell * http_close_socket(lex_ctxt * lexic){  return nasl_close_socket(lexic);}static tree_cell * _http_req(lex_ctxt* lexic, char* keyword){ tree_cell * retc; char * str; char * item = get_str_local_var_by_name(lexic, "item"); char * data = get_str_local_var_by_name(lexic, "data"); int    port = get_int_local_var_by_name(lexic, "port", -1); char *url = NULL; struct arglist * script_infos = lexic->script_infos; char *auth, tmp[32]; int    ver; int	cl; int    al; char	content_l_str[32]; struct kb_item ** kb; if( item == NULL || port < 0) {  nasl_perror(lexic, "Error : http_* functions have the following syntax :\n");  nasl_perror(lexic, "http_*(port:<port>, item:<item> [, data:<data>]\n" );  return NULL; }   if (port <= 0 || port > 65535) {   nasl_perror(lexic, "http_req: invalid value %d for port parameter\n", port);   return NULL; } kb = plug_get_kb(script_infos); snprintf(tmp, sizeof(tmp), "/tmp/http/auth/%d", port); auth = kb_item_get_str(kb, tmp); if (auth == NULL)   auth = kb_item_get_str(kb, "http/auth"); snprintf(tmp, sizeof(tmp), "http/%d", port); ver = kb_item_get_int(kb, tmp); if (data == NULL)   {     cl = 0; *content_l_str = '\0';   } else   {     cl = strlen(data);     snprintf(content_l_str, sizeof(content_l_str), "Content-Length: %d\r\n", cl);   } if( auth != NULL )    al = strlen(auth); else    al = 0;     if( (ver <= 0) || (ver == 11) ) {  char	*hostname, *ua;   hostname = (char*)plug_get_host_fqdn(script_infos);  if( hostname == NULL ) return NULL;  ua = kb_item_get_str(kb, "http/user-agent"); #define NESSUS_USER_AGENT	"Mozilla/4.75 [en] (X11, U; Nessus)"  if (ua == NULL)    ua = NESSUS_USER_AGENT;  else    {      while (isspace(*ua))	ua ++;      if (*ua == '\0')	ua = NESSUS_USER_AGENT;    }  url = build_encode_URL(script_infos, keyword, NULL, item, "HTTP/1.1");  str = emalloc(strlen(url) + strlen(hostname) + al + cl + strlen(ua) + 1024);  /* NIDS evasion */  sprintf(str, "%s\r\n\Connection: Close\r\n\Host: %s\r\n\Pragma: no-cache\r\n\User-Agent: %s\r\n\Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\n\Accept-Language: en\r\n\Accept-Charset: iso-8859-1,*,utf-8\r\n",		url, hostname, ua); } else {   /* NIDS evasion */   url = build_encode_URL(script_infos, keyword, NULL, item, "HTTP/1.0\r\n"); str = emalloc(strlen(url) + al + cl + 120); strcpy(str, url); } efree(&url); if (auth != NULL)   {     strcat(str, auth);     strcat(str, "\r\n");   } if (data != NULL)   strcat(str, content_l_str);  strcat(str, "\r\n"); if (data != NULL)   {     strcat(str, data);   } retc = alloc_tree_cell(0, NULL); retc->type = CONST_DATA; retc->size = strlen(str); retc->x.str_val = str; return retc;}/* * Syntax : * * http_get(port:<port>, item:<item>); * */tree_cell * http_get(lex_ctxt * lexic){ return _http_req(lexic, "GET");}/* * Syntax : * * http_head(port:<port>, item:<item>); * */tree_cell * http_head(lex_ctxt * lexic){ return _http_req(lexic, "HEAD");}/* * Syntax : * http_post(port:<port>, item:<item>) */tree_cell * http_post(lex_ctxt * lexic){ return _http_req(lexic, "POST");}/* * http_delete(port:<port>, item:<item>) */tree_cell * http_delete(lex_ctxt * lexic){  return _http_req(lexic, "DELETE");}/* * http_put(port:<port>, item:<item>, data:<data>) */tree_cell * http_put(lex_ctxt * lexic){  return _http_req(lexic, "PUT");}/*-------------------[ cgibin() ]--------------------------------*/ tree_cell *cgibin(lex_ctxt * lexic){ struct arglist * script_infos = lexic->script_infos; struct arglist * prefs = arg_get_value(script_infos, "preferences"); char * path = prefs == NULL ? NULL : arg_get_value(prefs, "cgi_path"); tree_cell * retc; if(path == NULL) path = "/cgi-bin:/scripts"; retc = alloc_tree_cell(0, NULL); retc->type = CONST_DATA; retc->x.str_val = estrdup(path); retc->size = strlen(path);     return retc;}/*-------------------------------------------------------------------------*/tree_cell * nasl_is_cgi_installed(lex_ctxt * lexic){ nasl_perror(lexic, "is_cgi_installed() is now deprecated. Use is_cgi_installed_ka() instead\n"); return NULL;}/*--------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -