Gokul
Gokul
PROJECT REPORT
Submitted by
APRIL 2024
CERTIFICATE
Certified that the candidate was examined by us in the Project work Viva - Voce
examination held o n
ACKNOWLEDGEMENT
We express our deep sense of gratitude and sincere thanks to beloved Principal
Dr. B. Giriraj, for keeping interest in this project work, which has been an Inspiration to
us.
We are grateful to express our performed thanks to our Head in-charge
Mrs. P. Rajeswari, Department of Computer Engineering who has been a source of
encouragement to do our project successfully.
We wish to express our sincere gratitude and heartfelt thanks to our project guide
Mrs. M. Krithika, lecturer, Department of Computer Engineering who has been a source
of encouragement and moral strength from the beginningto the end for the success of
our project.
We express our heartfelt thanks to our tutor Mrs. R. Uma, for her encouragement
throughout the project. We take this opportunity to thank her support.
I
Abstract
ABSTRACT
Ethical hacking tools are pivotal assets in cyber security, enabling professionals to
assess the security of systems, networks, and applications. "VulnScan" is a versatile
ethical hacking tool designed for proactive security evaluation and vulnerability
assessment. This abstract provides a brief insight into the tool's capabilities and its role
in the realm of ethical hacking. VulnScan is a multifaceted utility that equips ethical
hackers with a range of functionalities. It encompasses network reconnaissance,
vulnerability scanning, and security testing. By leveraging VulnScan, cyber security
experts can identify potential weaknesses, exploits, and vulnerabilities in a target system
or network, thereby fortifying defenses and preventing potential threats.
II
Table Of Contents
TABLE OF CONTENTS
CHAPTER PAGE NO
ACKNOWLEDGEMENT…………………………………………………………….……...I
ABSTRACT……………………………………………………………………… ..............II ..
LIST OF FIGURES………………………………………………………………………...V
LIST OF TABLES……………………………………...…………………….…………...VI
1. INTRODUCTION……………………………………………………...………………...1
1.1 OVERVIEW 1
1.2 INTRODUCTION 1
1.3 OBJECTIVES 2
1.4 INTRODUCTION TO EXISTING SYSTEM 2
1.5 DRAWBACKS OF THE EXISTING SYSTEM 2
1.6 PROPOSED METHODOLOGY 3
2. LITERATURE SURVEY……………………………………………………………….. 4
2.1 RELATED WORKS 4
2.2 PROPOSED METHODOLOGY 7
3. SYSTEM REQUIREMENTS…………………………………………………………... 9
3.1 SOFTWARE REQUIREMENTS 9
3.2 HARDWARE REQUIREMENTS 10
4. SYSTEM ANALYSIS AND DESIGN…………………………………………………11
4.1 FEASABILITY STUDY 11
4.2 UML DIAGRAMS 12
5. PROJECT MODULES AND ALGORITHMS….………………...…………………. 14
5.1 PORT SWEEPING, SUBDOMAIN TESTING 14
5.2 HEADER INFORMATION, DATABASE CRACKING 15
5.3 CLIENT SIDE SCRIPT CRACKING, IP INFORMATION GATHERING 16
5.4 CSRF DETECTION, CERTIFICATE DETECTION 17
5.5 LOCATION OF THE SERVER, REPORT GENERATION 19
5.6 ALGORITHM 21
6. TESTING AND IMPLEMENTATION………………………………………………... 23
6.1 INTRODUCTION \ 23
6.2 LEVELS OF TESTING 23
6.3 SYSTEM VERIFICATION 25
6.4 SYSTEM VALIDATION 26
6.5 EVALUATION 27
III
Table Of Contents
CONCLUSION………………………..………………………………………………….. 28
BIBLIOGRAPHY…………………………………………………………………............ 29
APPENDICES…………………………………………...……………………………….. 30
IV
List of Figures
LIST OF FIGURES
Figure No Figure Name Page No
V
List of Tables
LIST OF TABLES
Table No Table Name Page No
VI
Introduction Chapter 1
CHAPTER 1
INTRODUCTION
1.1 OVERVIEW
VulnScan serves as a valuable ally for ethical hackers and security experts,
aiding in the identification and assessment of vulnerabilities within targeted
networks or systems. This multifaceted tool provides an array of scanning and
probing functionalities, encompassing tasks such as port exploration, subdomain
discovery, domain profiling, and the evaluation of SQL injection risks and Cross
Site Scripting (XSS), CSRF vulnerabilities. As a command-line utility, VulnScan
boasts a user-friendly interface, simplifying the complex landscape of vulnerability
assessment and penetration testing.
1.2 INTRODUCTION
Embarking on a captivating voyage through the dynamic domain of cybersecurity,
"VulnScan - A Cybersecurity Companion" unveils the potent fusion of ethical hacking and
network defense, forming an impenetrable barrier against potential cyber threats. This
expedition ventures into the intricate realm of ethical hacking, highlighting its pivotal role
in fortifying and shielding digital networks from malicious intrusions. At the heart of this
exploration lies the versatile tool, "VulnScan," which stands as a formidable asset for
detecting and mitigating vulnerabilities, bolstering network security amidst the eve
revolving digital landscape.
In our pursuit of fortified network security, our team unravels the fundamental
tenets of ethical hacking, contrasting it with malevolent activities. Shedding light on the
ethical hacker's mission to unearth weaknesses, conduct penetration tests, and
collaborate with organizations to bolster the integrity, confidentiality, availability, and
performance of their networks.
Our journey navigates through an array of network management methodologies
and tools, empowering administrators to oversee, regulate, and optimize network
performance. These encompass network monitoring, configuration management, and
incident response, all underpinned by industry best practices and standards.
The expedition into ethical hacking methodologies unveils the strategies and
techniques employed by ethical hackers to expose vulnerabilities within network
infrastructures.
The crux of our exploration lies in the collaborative synergy between network
administrators and ethical hackers, establishing a proactive network security approach.
Emphasizing the significance of continuous monitoring, vulnerability assessments, and
1
Introduction Chapter 1
2
Introduction Chapter 1
the aim of identifying and assessing vulnerabilities within target systems and networks.
1.5 DRAWBACKS OF THE EXISTING SYSTEM
Complexity- SecuProbe may have a steeper learning curve due to its
comprehensive feature set. Security professionals may require significant training to utilize
the system effectively.
Resource Intensive- Running SecuProbe may demand substantial computing
resources, making it less accessible for smaller organizations with limited hardware
capabilities.
Cost- Licensing or subscription costs associated with SecuProbe can be high,
making it less accessible to budget-constrained users or organizations
Limited Customization- The existing system may not offer as much flexibility for
customizing tests and scans, limiting the ability to adapt the tool to specific environments
or unique testing requirements
False Positives and Negatives- Like many security tools, SecuProbe may
generate false positives (incorrectly identifying vulnerabilities) and false negatives (failing
to detect actual vulnerabilities), which can impact the accuracy of assessments
Compatibility- The system may have compatibility issues with certain target
systems or networks, potentially leading to incomplete or inaccurate vulnerability
assessments
Scalability- For large-scale network assessments, the existing system might not
scale efficiently, which can impact the speed and effectiveness of scans.
Documentation- Inadequate or outdated documentation may hinder users' ability
to effectively navigate and utilize the system's features.
Community Support- The level of community support, such as forums and user-
contributed resources, may be limited, making it challenging for users to seek help or
share insights.
Updates and Maintenance- The existing system may have slower updates and
maintenance cycles, which can affect its ability to keep up with emerging threats and
vulnerabilities.
Reporting Flexibility- The system's reporting capabilities may lack customization
options, limiting users in tailoring reports to their specific needs or standards.
1.6 PROPOSED METHODOLOGY
The proposed methodology for Vulnscan, an ethical hacking tool, involves several
key phases. It begins with project initiation, defining goals and assembling a skilled team.
Requirements are analyzed, specifying the type of vulnerabilities and testing methods.
The tool's architecture and user interface are designed to be user-friendly and adaptable
for various scanning techniques. Development includes core functionalities such as port
3
Introduction Chapter 1
scanning, subdomain enumeration, and vulnerability testing. The tool features an intuitive
command-line interface and integration of third-party libraries. Extensive testing is
conducted, and a reporting module is for clear vulnerability reports.
4
Literature Survey Chapter 2
CHAPTER 2
LITERATURE SURVEY
2.1 RELATED WORKS
5
Literature Survey Chapter 2
payload of an HTTP request and entice the victim’s browser to transmit an HTTP request
to the web server. Consequently, the server cannot determine legitimacy of the HTTP
request. This paper presents a light-weight CSRF prevention method by introducing a
quarantine system to inspect suspicious scripts on the server-side. Instead of using script
filtering and rewriting approach, this scheme is based on a new labeling mechanism (we
called it Content Box) which enables the web server to distinguish the malicious requests
from the harmless requests without the need to modify the user created contents (UCCs).
Consequently, a malicious request can be blocked when it attempts to access critical web
services that was defined by the web administrator. To demonstrate the effectiveness of the
proposed scheme, the proposed scheme was implemented and the performance was
evaluated.
6
Literature Survey Chapter 2
2.1.3 Server Location Method for Keeping Shorter Distance from Users to Servers
during Failures
[3] The Server Location Method for Keeping Shorter Distance from Users to Servers
during Failures was developed by Nao Maeda and Hiroyoshi Miwa. Recently, large contents
in the Internet have increased loads of contents servers, networks and data centers, which
may degrade the quality of services. To overcome this problem, some mirror servers
providing the same contents are located on a network and a request is navigated to one of
the mirror servers. A user must access to one of the servers and the hop length of a path
from a user to a server should be short even during link failure. As it affects the performance,
the location of the mirror servers is important.
In this paper, we address the server location problem, which determines the
location of the servers satisfying the following the constraint: any users can access servers
within a small hop count even if some links fail. First, we formulate this problem and prove
that it is NP-hard. Second, we present a polynomial-time algorithm for the case that the
number of simultaneously failed links is restricted to one and the increase of the distance
between a user node and servers during failure is restricted to be the number of nodes.
Furthermore, we also present an approximation algorithm to solve this problem when the
number of servers to be accessed is restricted to one and the number of simultaneously
failed links is a constant positive integer.
7
Literature Survey Chapter 2
9
System Requirements Chapter 3
CHAPTER 3
SYSTEM REQUIRMENTS
3.1 SOFTWARE REQUIREMENTS
3.1.1 Operating System- VulnScan and similar ethical hacking tools are often
compatible with a variety of operating systems, including Windows, Linux, and Mac OS.
The specific OS support should be detailed in the tool's documentation.
3.1.2 Python- Many ethical hacking tools, including those built in Python, may require
a specific version of Python to run. Ensure you have the appropriate Python version
installed.
11
System Analysis and Design Chapter 4
CHAPTER 4
SYSTEM ANALYSIS AND DESIGN
4.1 FEASIBILITY STUDY
4.1.1 TECHNICAL FEASIBILITY
Resource Availability- VulnScan's technical feasibility relies on the availability of
skilled developers and security experts who can design and implement the tool effectively.
It also necessitates access to relevant programming languages and libraries for features
like port scanning, subdomain enumeration, and vulnerability testing.
Compatibility- The tool should be designed to be compatible with various
operating systems, including Windows, Linux, and Mac OS. Ensuring cross-platform
compatibility increases its accessibility and usability.
Tool Functionality- Technical feasibility depends on the tool's capability to
perform core functions accurately and efficiently. The development team needs to ensure
that it can effectively scan for vulnerabilities, identify open ports, and provide reliable
results.
4.1.2 OPERATIONAL FEASIBILITY
User Training- The tool should be user-friendly, minimizing the need for extensive
training. Ethical hackers and security professionals should be able to use VulnScan with
minimal effort and become productive quickly.
Integration- VulnScan should be designed to seamlessly integrate into existing
security assessment processes. It should be capable of working alongside other tools and
methodologies commonly used in ethical hacking and vulnerability testing.
User Acceptance- Gathering feedback from potential users during development
and conducting usability testing can help ensure that the tool meets operational needs and
user expectations. Continuous user feedback is vital for refining the tool.
4.1.3 ECONOMIC FEASIBILITY
Development Costs- Analyze the costs associated with the development of
VulnScan, including personnel salaries, hardware and software purchases, and third-party
tool licenses. It's important to maintain a budget that allows for efficient development
without unnecessary expenses
Maintenance Costs- Consider the ongoing costs of maintaining and updating the
tool, including security patches, bug fixes, and updates to keep it aligned with evolving
security standards. A well-defined maintenance plan is essential for long-term feasibility.
Return on Investment (ROI) - Determine whether the potential benefits of
VulnScan outweigh the development and maintenance costs. Benefits may include
enhanced security assessments, faster vulnerability identification, and time savings for
12
System Analysis and Design Chapter 4
13
System Analysis and Design Chapter 4
14
Project Modules and Algorithm Chapter 5
CHAPTER 5
PROJECT MODULES AND ALGORITHM
5.1 PORT SWEEPING, SUBDOMAIN TESTING
5.1.1 PORT SCAN
Port scanning is a fundamental part of network security assessment. VulnScan's
Port Scan module is designed to identify open and closed ports on a target system. Open
ports may indicate services or applications that could be potential attack vectors, while
closed ports are often considered more secure. By scanning ports, VulnScan helps
security professionals assess a system's exposure to potential vulnerabilities and threats.
15
Project Modules and Algorithm Chapter 5
SQL Injection is a common web application vulnerability that occurs when user
inputs are not properly sanitized, allowing malicious SQL queries to be executed.
VulnScan's SQL Injection Testing module helps ethical hackers and security testers
identify SQL injection vulnerabilities in web applications. By injecting specially crafted SQL
16
Project Modules and Algorithm Chapter 5
queries, the tool can assess whether a web application is susceptible to this type of attack.
5.3.2 IP OF DOMAIN
This module provides the capability to retrieve the IP address of a given domain.
It is a basic but essential function for understanding the network architecture and
connectivity of a target domain. Obtaining the IP address of a domain allows security
professionals to further analyze the domain's infrastructure and identify potential
vulnerabilities or misconfigurations.
Each module in VulnScan serves a distinct purpose in the field of ethical hacking
and security assessment. The tool's capabilities cover a wide range of security testing,
from network-level port scanning to web application vulnerability testing, making it a
valuable asset for security professionals.
17
Project Modules and Algorithm Chapter 5
18
Project Modules and Algorithm Chapter 5
C
Fig 5.7 (b) CSRF Detection
5.4.2 CERTIFICATE DETECTION
SSL/TLS certificates are digital credentials that authenticate the identity of websites
and facilitate secure communication between users' browsers and servers. They play a
pivotal role in safeguarding data confidentiality and integrity across the internet. These
certificates verify a website's identity by containing information such as domain names,
organization details, and location, validated by trusted Certificate Authorities (CAs). By
encrypting data transmitted between users and websites, SSL/TLS certificates prevent
unauthorized access to sensitive information like login credentials and financial data. Trust
in SSL/TLS certificates is established through the inclusion of trusted CAs in web browsers
and operating systems, indicated by visual cues like padlock icons. Different types of
certificates offer varying levels of validation, ranging from domain ownership validation to
extensive organizational checks.
19
Project Modules and Algorithm Chapter 5
The code retrieves location information for a given IP address using the ipapi.co
API. The function attempts to fetch the location data, with the option to retry a specified
number of times in case of network errors. It utilizes the requests library to make HTTP
requests and handle responses. If the location data is successfully obtained, it is parsed
and stored in a dictionary format. Additionally, the function implements error handling to
manage scenarios such as rate limiting (status code 429) by applying exponential backoff
for retries. If the maximum number of retry attempts is reached without success, an
appropriate message is displayed, and the function returns None. Finally, the fetched
location data is appended to a list named locations_data for future use.
20
Project Modules and Algorithm Chapter 5
21
Project Modules and Algorithm Chapter 5
5.6 – ALGORITHM
Step 10. Define a thread worker function to get active subdomains (`get_active()`).
Step 13. Create a session with a User-Agent header and define a list of XSS payloads.
Step 15. Define a function to extract form details from a form element
(`form_details(form)`).
Step 17. Define a function to test for SQL injection vulnerabilities (`test_sql_injection(url)`).
Step 18. Define a function to retrieve all forms from a URL (`get_all_forms(url)`).
22
Project Modules and Algorithm Chapter 5
url, value)`).
Step 21. Define a function to scan for XSS vulnerabilities (`scan_xss(url)`).
- Change Domain
- Port Scanning
- Domain Enumeration
- Domain Fingerprinting
- XSS Testing
- CSRF Detection
- Report Generation
- Exit
c. Depending on the user's choice, execute the corresponding function or exit the tool.
23
Testing and Implementation Chapter 6
CHAPTER 6
TESTING AND IMPLEMENTATION
6.1 INTRODUCTION
This chapter consists of testing report of the project. It is done for evaluating the
functionality of this project to find any bugs and errors. It checks whether the developed
system met the specified requirements and identifies any defects in the system in order to
produce a quality product. It is basically executing a system to identify any gaps, errors,
or missing requirements in contrary to the actual requirements. In this Testing, the system
was tested by applying correct/incorrect data and see how the system reacts to it. This
also check the functionality of each module. Things that will test in this system,
Testing levels are the procedure for finding the missing areas and avoiding
overlapping and repetition between the development life cycle stages. The various phases
such as Requirement collection, designing, coding testing, deployment, and maintenance
of SDLC. In order to test any application, like SDLC. Testing is done in multiple level,
which help us maintain the quality of the software. The levels of software testing involve
the different methodologies, which can be used while performing the software testing. Fig
6.1 shows the levels of testing.
• Unit Testing
• Integration Testing
• System Testing
• Acceptance Testing
24
Testing and Implementation Chapter 6
25
Testing and Implementation Chapter 6
26
Testing and Implementation Chapter 6
Proper registration of
Verification of Carry out the commands
keystrokes and
Command Line given by the User and Pass
execution of the entered
Interface display the options
commands by the User
The command may or
Verification of
Logging in to a database may not bypass the
SQL and XSS Pass
using injection commands system’s database due
attacks
to strong security
27
Testing and Implementation Chapter 6
6.5 EVALUATION
• An Ethical hacking tool that provides a command line interface and helps new
users to understand and learn about the processes that take place.
• Users can choose from the options provided after entering a command which
has sub-options available for execution.
• Makes the process of learning and execution of the available modules more
easier to learn and adapt.
Software testing is a process where every unit or component of a software or
system is tested. The main reason for implementing the levels of testing is to make the
software testing process efficient and easy to find all possible test cases at a specific level.
To check the behavior or performance of software testing, various testing levels have been
performed. The above-described software testing levels are developed to identify missing
areas and understanding between the development life cycle conditions.
28
Conclusion
CONCLUSION
In the journey of developing and testing the "VulnScan" ethical hacking tool, we
have reached a significant milestone. This section summarizes the key takeaways and
reflections from our testing and implementation process.
The "VulnScan" tool has been rigorously tested across multiple levels, ensuring
that it operates effectively and ethically. Our testing encompassed various aspects,
including port scanning, subdomain enumeration, domain fingerprinting, SQL injection
testing, and XSS testing. This tool has proven to be a valuable addition to the arsenal of
ethical hackers and security professionals.
As we move forward, continuous updates and refinements will be made to address
emerging threats and improve the tool's functionality. User feedback and collaboration
with the security community will be invaluable in this ongoing development.
Future scope of this project
• Future versions of VulnScan could focus on integrating advanced vulnerability
detection techniques, leveraging machine learning and artificial intelligence for
more accurate identification of emerging and complex vulnerabilities.
• Enhancing VulnScan's capabilities to address vulnerabilities specific to cloud
environments and containerized applications, ensuring compatibility with modern
DevSecOps practices.
• Adapting the tool to address vulnerabilities specific to cloud environments and
containerized applications.
• Future development could prioritize the improvement of reporting and analytics
features in VulnScan, providing more detailed insights into vulnerability trends,
risk assessments, and real-time updates based on the latest threat intelligence.
28
Bibliography
BIBLIOGRAPHY
REFERENCE PAPER
[1]. Bandung, Y., Subekti, L. B., & Gondokaryono, Y. S. (2015). "A Comprehensive
Literature Review of Penetration Testing & Its Applications." In Proceedings of the
International Conference on Electrical Engineering and Informatics (ICEEI).
[2]. Kocher, J.E.; Gilliam, D.P., “Self port scanning tool: providing a more secure
computing environment through the use of proactive port scanning”, 14th IEEE
International Workshops on Enabling Technologies: Infrastructure for Collaborative
Enterprise, 13-15 June 2005.
[3]. Y. Makino and V. Klyuev, “Evaluation of web vulnerability scanners,” in IEEE 8th
International Conference on Intelligent Data Acquisition and Advanced Computing
Systems: Technology and Applications, IDAACS 2015, Warsaw, Poland, September
24-26, 2015. IEEE, 2015, pp. 399– 402.
REFERENCE BOOKS
[1]. Johnson, C., & Skoudis, E. “The Basics of Hacking and Penetration Testing-
Ethical Hacking and Penetration Testing Made Easy”, 2015
[2]. Engebretson, P.“The Basics of Hacking and Penetration Testing- Ethical
Hacking and Penetration Testing Made Easy (2nd ed.)”, 2016
[3]. Regalado, B. “The Web Application Hacker's Handbook- Finding andExploiting
Security Flaws (2nd ed.)”, 2016
[4]. Pouget, E., Prevost, C., & Heitz, J. “Hands-On Ethical Hacking and Network
Defense”, 2019
[5]. Oriyano, S., & Wiles, J. CEH v10- “EC-Council Certified Ethical Hacker
Complete Training Guide with Practice Labs- Exam 312-50”, 2019
[6]. EC-Council. “Certified Ethical Hacker (CEH) Certification Guide”.
[7]. Dhanjani, N., Rios, B., & Hardin, B. (2011). “Hacking- The Next Generation”,2020
WEB LINKS
• https-//whois.domaintools.com/
• https-//digital.com/who-is-hosting-this/
• https-//builtwith.com/
• https-//www.virustotal.com/gui/home/search
29
Appendices
APPENDICES
Python code
from urllib.parse import urlparse
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from core.utils import extractHeaders, strength, isProtected, stringToBinary,
longestCommonSubstring
from core.requester import requester
from core.zetanize import zetanize
from core.ranger import ranger
from core.evaluate import evaluate
from core.tweaker import tweaker
from core.photon import photon
from core.prompt import prompt
from core.datanize import datanize
from core.entropy import isRandom
from cryptography import x509
from cryptography.hazmat.backends import default_backend
import statistics
import re
import random
import json
import argparse
from core.colors import green, yellow, end, run, good, info, bad, white, red
import requests
import threading
import queue
import optparse
import nmap
import time
30
Appendices
import socket
import ssl
import time
import sys
from progress.bar import Bar
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import os
from pprint import pprint
import colorama
from core.config import headers
import concurrent.futures
from pathlib import Path
from fuzzywuzzy import fuzz, process
import html
def get_ip_address(domain_name):
if not domain_name.startswith(("http://", "https://")):
domain_name = "http://" + domain_name
parsed_url = urlparse(domain_name)
domain_name = parsed_url.netloc # Extracting domain name from the URL
ip_address = socket.gethostbyname(domain_name)
print(f"\nIP Address: {ip_address}")
def get_ip_address(target):
ip_address = socket.gethostbyname(target)
return ip_address
port_scan_results = []
if ip_address in result['scan']:
port_data = result['scan'][ip_address]
if 'tcp' in port_data:
for port, port_info in port_data['tcp'].items():
if port_info['state'] == 'open':
print('\033[32m' + f"\tPort {port} is open" + '\033[0m')
port_scan_results.append(f"\n\tPort {port} is open")
else:
print(
'\033[31m' + f"\tNo open ports found in the specified range." + '\033[0m')
port_scan_results.append(
"\n\tNo open ports found in the specified range.")
else:
print("No scan results found for the target IP.")
port_scan_results.append(
"\n\tNo scan results found for the target IP.")
return port_scan_results
def get_active():
while True:
try:
i = q.get_nowait()
except queue.Empty:
break
append_if_exists(domain_name, i)
bar.next()
34
Appendices
q.task_done()
def get_args():
parser = optparse.OptionParser()
parser.add_option("-i", "--input", dest="input_list", default="subdomains.txt",
help="read the list from INPUT_FILE", metavar="INPUT_FILE")
parser.add_option("-t", "--threads", type=int, dest="n_threads", help="Set the number
of threads",
metavar="N_THREADS", default=12)
return parser.parse_args()
def get_server_info(target_domain):
url = f"http://{target_domain}"
try:
response = requests.get(url)
if response.status_code == 200:
server_header = response.headers.get("Server", "N/A")
x_powered_by_header = response.headers.get("X-Powered-By", "N/A")
35
Appendices
# Create a session with a User-Agent header
s = requests.Session()
s.headers["User-Agent"] = "Mozilla/5.0 (Win64; x64) AppleWebKit/537.36
Chrome/87.0.4280.88"
def form_details(form):
details = {}
action = form.attrs.get("action", "").lower()
method = form.attrs.get("method", "get").lower()
inputs = []
details["action"] = action
36
Appendices
details["method"] = method
details["inputs"] = inputs
return details
def is_vulnerable(response):
# Customize this function to detect SQL injection vulnerabilities in your application's
context
# You may want to check for specific error messages or behaviors indicative of SQL
injection
return False
def test_sql_injection(url):
# Ensure the URL starts with "http://" or "https://"
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url
forms = get_forms(url)
print(f"\n[+] {len(forms)} forms found on {url}.")
sql_test_results.append(f"\n\t[+] {len(forms)} forms found on {url}.")
if (len(forms) == '0'):
print("\n No SQL Injection detected")
37
Appendices
# Create payloads for each input field
for input_tag in form_details_dict["inputs"]:
input_name = input_tag["name"]
input_value = input_tag["value"]
if input_value:
data[input_name] = input_value + payload
elif input_tag["type"] != "submit":
data[input_name] = "test" + payload
if double_quote_detected:
print("\nDouble quote SQL injection detected:", target_url)
sql_test_results.append(
38
Appendices
"\n\tDouble quote SQL injection detected:", target_url)
else:
print("\nNo double quote SQL injection detected")
sql_test_results.append(
"\n\tNo double quote SQL injection detected")
def get_all_forms(url):
soup = BeautifulSoup(requests.get(url).content, "html.parser")
return soup.find_all("form")
def get_form_details(form):
details = {}
action = form.attrs.get("action").lower()
method = form.attrs.get("method", "get").lower()
inputs = []
for input_tag in form.find_all("input"):
input_type = input_tag.attrs.get("type", "text")
input_name = input_tag.attrs.get("name")
inputs.append({"type": input_type, "name": input_name})
details["action"] = action
details["method"] = method
details["inputs"] = inputs
return details
def scan_xss(url):
# Ensure the URL starts with "http://" or "https://"
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url
forms = get_all_forms(url)
print(f"\n[+] Detected {len(forms)} forms on {url}.")
xss_test_results.append(f"\n\t[+] Detected {len(forms)} forms on {url}.")
def banner():
yellow = "\033[93m"
white = "\033[0m"
end = "\033[0m"
print('''
%s %sVuln Scan%s %s
''' % (yellow, white, yellow, end))
def sanitize_url(url):
if not url.startswith("http://") and not url.startswith("https://"):
url = "https://" + url
return url
banner()
def csrf(domain_name):
lightning = '\033[93;5m \033[0m'
try:
import concurrent.futures
from pathlib import Path
except ImportError:
print('%s Vulnscan is not compatible with python 2. Please run it with python 3.' %
bad)
41
Appendices
try:
from fuzzywuzzy import fuzz, process
except ImportError:
import os
print('%s fuzzywuzzy library is not installed, installing now.' % info)
os.system('pip3 install fuzzywuzzy')
print('%s fuzzywuzzy has been installed, please restart Vulnscan.' % info)
quit()
# Additional interactive input for other parameters (you can customize this part)
delay = int(
input('%s Enter the delay between requests (default is 0): ' % info) or 0)
level = int(
input('%s Enter the number of levels to crawl (default is 2): ' % info) or 2)
timeout = int(
input('%s Enter the HTTP request timeout (default is 20): ' % info) or 20)
threadCount = int(
input('%s Enter the number of threads (default is 2): ' % info) or 2)
csrf_results.append((delay_desc, delay))
csrf_results.append((level_desc, level))
csrf_results.append((timeout_desc, timeout))
csrf_results.append((threadCount_desc, threadCount))
allTokens = []
weakTokens = []
tokenDatabase = []
insecureForms = []
if weakTokens:
print('%s Weak token(s) found' % good)
csrf_results.append('%s Weak token(s) found' % good)
for weakToken in weakTokens:
url = list(weakToken.keys())[0]
token = list(weakToken.values())[0]
print('%s %s %s' % (info, url, token))
csrf_results.append('%s %s %s' % (info, url, token))
if insecureForms:
43
Appendices
print('%s Insecure form(s) found' % good)
csrf_results.append('%s Insecure form(s) found' % good)
for insecureForm in insecureForms:
url = list(insecureForm.keys())[0]
action = list(insecureForm.values())[0]['action']
form = action.replace(target, '')
if form:
print('%s %s %s[%s%s%s]%s' %
(bad, url, green, end, form, green, end))
csrf_results.append('%s %s %s[%s%s%s]%s' %
(bad, url, green, end, form, green, end))
uniqueTokens = set(allTokens)
if len(uniqueTokens) < len(allTokens):
print('%s Potential Replay Attack condition found' % good)
csrf_results.append(
'%s Potential Replay Attack condition found' % good)
print('%s Verifying and looking for the cause' % run)
csrf_results.append('%s Verifying and looking for the cause' % run)
replay = False
for each in tokenDatabase:
url, token = next(iter(each.keys())), next(iter(each.values()))
for each2 in tokenDatabase:
url2, token2 = next(iter(each2.keys())), next(
iter(each2.values()))
if token == token2 and url != url2:
print('%s The same token was used on %s%s%s and %s%s%s' %
(good, green, url, end, green, url2, end))
csrf_results.append('%s The same token was used on %s%s%s and
%s%s%s' %
(good, green, url, end, green, url2, end))
replay = True
if not replay:
print('%s Further investigation shows that it was a false positive.')
44
Appendices
csrf_results.append(
'%s Further investigation shows that it was a false positive.')
p = Path(__file__).parent.joinpath('db/hashes.json')
with p.open('r') as f:
hashPatterns = json.load(f)
if not allTokens:
print('%s No CSRF protection to test, NO CSRF TOKENS AVAILABLE' % bad)
csrf_results.append(
'%s No CSRF protection to test, NO CSRF TOKENS AVAILABLE' % bad)
return
if len(allTokens) > 0:
print("Length of first sublist in allTokens:", len(allTokens[0]))
csrf_results.append([
"Length of first sublist in allTokens:", len(allTokens[0])])
else:
print("Error: allTokens is empty.")
csrf_results.append("Error: allTokens is empty.")
return
if len(allTokens[0]) == 0:
print("Error: First sublist in allTokens is empty.")
csrf_results.append("Error: First sublist in allTokens is empty.")
return
def fuzzy(tokens):
averages = []
for token in tokens:
sameTokenRemoved = False
result = process.extract(
token, tokens, scorer=fuzz.partial_ratio)
scores = []
for each in result:
score = each[1]
if score == 100 and not sameTokenRemoved:
sameTokenRemoved = True
continue
scores.append(score)
average = statistics.mean(scores)
averages.append(average)
return statistics.mean(averages)
try:
similarity = fuzzy(allTokens)
print('%s Tokens are %s%i%%%s similar to each other on average' %
(info, green, similarity, end))
csrf_results.append('%s Tokens are %s%i%%%s similar to each other on
average' %
(info, green, similarity, end))
except statistics.StatisticsError:
print(
'%s No CSRF protection to test, CSRF vulnerability not found' % bad)
csrf_results.append(
46
Appendices
'%s No CSRF protection to test, CSRF vulnerability not found' % bad)
else:
print("The first element of allTokens is an empty list.")
csrf_results.append(
"The first element of allTokens is an empty list.")
else:
print("No CSRF tokens available.")
csrf_results.append("No CSRF tokens available.")
def staticParts(allTokens):
strings = list(set(allTokens.copy()))
commonSubstrings = {}
for theString in strings:
strings.remove(theString)
for string in strings:
commonSubstring = longestCommonSubstring(theString, string)
if commonSubstring not in commonSubstrings:
commonSubstrings[commonSubstring] = []
if len(commonSubstring) > 2:
if theString not in commonSubstrings[commonSubstring]:
commonSubstrings[commonSubstring].append(theString)
if string not in commonSubstrings[commonSubstring]:
commonSubstrings[commonSubstring].append(string)
return commonSubstrings
if result:
print('%s Common substring found' % info)
csrf_results.append('%s Common substring found' % info)
print(json.dumps(result, indent=4))
csrf_results.append(json.dumps(result, indent=4))
simTokens = []
print(' %s \n Phase: Observing %s[%s4/6%s]%s' %
(lightning, green, end, green, end))
csrf_results.append('Phase: Observing [4/6]')
print('%s 100 simultaneous requests are being made, please wait.' % info)
47
Appendices
csrf_results.append(
'%s 100 simultaneous requests are being made, please wait.' % info)
def extractForms(url):
response = requester(url, {}, headers, True, 0).text
forms = zetanize(url, response)
for each in forms.values():
localTokens = set()
inputs = each['inputs']
for inp in inputs:
value = inp['value']
if value and re.match(r'^[\w\-_]+$', value):
if strength(value) > 10:
simTokens.append(value)
if simTokens:
if len(set(simTokens)) < len(simTokens):
print('%s Same tokens were issued for simultaneous requests.' % good)
csrf_results.append(
'%s Same tokens were issued for simultaneous requests.' % good)
else:
print(simTokens)
csrf_results.append(simTokens)
else:
print('%s Different tokens were issued for simultaneous requests.' % info)
csrf_results.append(
'%s Different tokens were issued for simultaneous requests.' % info)
parsed = ''
found = False
print('%s Finding a suitable form for further testing. It may take a while.' % run)
csrf_results.append(
'%s Finding a suitable form for further testing. It may take a while.' % run)
for form_dict in allForms:
for url, forms in form_dict.items():
parsed = datanize(forms, tolerate=True)
if parsed:
found = True
break
if found:
break
if not parsed:
49
Appendices
quit('%s No suitable form found for testing.' % bad)
origGET = parsed[0]
origUrl = parsed[1]
origData = parsed[2]
seeds = ranger(allTokens)
52
Appendices
response = requester(origUrl, data, headers, origGET, 0)
if response.status_code == originalCode:
if str(originalCode)[0] in ['4', '5']:
print('%s It didn\'t work' % bad)
csrf_results.append('%s It didn\'t work' % bad)
else:
difference = abs(originalLength - len(response.text))
if difference <= tolerableDifference:
print('%s It worked!' % good)
csrf_results.append('%s It worked!' % good)
else:
print('%s It didn\'t work' % bad)
csrf_results.append('%s It didn\'t work' % bad)
binary = stringToBinary(''.join(allTokens))
result = isRandom(binary)
for name, result in result.items():
if not result:
print('%s %s : %s%s%s' % (good, name, green, 'non-random', end))
csrf_results.append('%s %s : %s%s%s' %
(good, name, green, 'non-random', end))
else:
print('%s %s : %s%s%s' % (bad, name, red, 'random', end))
csrf_results.append('%s %s : %s%s%s' %
(bad, name, red, 'random', end))
def certificate(url):
try:
hostname = domain_name
context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
chain = ssock.getpeercert()
53
Appendices
print(chain)
print("\n")
print(f"SSL certificate for {domain_name} is valid.")
except ssl.SSLError as e:
# The certificate validation failed
print(f"SSL certificate validation for {domain_name} failed: {e}")
return False
except socket.error as e:
# Failed to connect to the specified domain
print(f"Failed to connect to {domain_name}: {e}")
return False
54
Appendices
certificate_results.append(
f"[+] SSL/TLS Certificate Analysis for {domain}:{port}")
certificate_results.append(
f"Common Name (CN): {x509_cert.subject.rfc4514_string()}")
certificate_results.append(
f"Issuer: {x509_cert.issuer.rfc4514_string()}")
certificate_results.append(
f"Serial Number: {x509_cert.serial_number}")
certificate_results.append(
f"Not Valid Before: {x509_cert.not_valid_before}")
certificate_results.append(
f"Not Valid After: {x509_cert.not_valid_after}")
certificate_results.append(
f"Signature Algorithm: {x509_cert.signature_algorithm_oid._name}")
certificate_results.append(
f"Version: {x509_cert.version.name}")
except socket.timeout:
print(f"[-] Connection to {domain}:{port} timed out.")
certificate_results(f"[-] Connection to {domain}:{port} timed out.")
except socket.error as e:
print(
f"[-] Error occurred while connecting to {domain}:{port}: {str(e)}")
certificate_results(
f"[-] Error occurred while connecting to {domain}:{port}: {str(e)}")
except ssl.SSLError as e:
print(f"[-] SSL/TLS Error occurred: {str(e)}")
certificate_results(f"[-] SSL/TLS Error occurred: {str(e)}")
except x509.CertificateError as e:
print(f"[-] Certificate Error occurred: {str(e)}")
certificate_results(f"[-] Certificate Error occurred: {str(e)}")
except Exception as e:
print(f"[-] An unexpected error occurred: {str(e)}")
certificate_results(f"[-] An unexpected error occurred: {str(e)}")
55
Appendices
location_cache = {}
location_cache = {}
except requests.exceptions.RequestException as e:
print(f"Error fetching location data for {ip_address}: {e}")
if response.status_code == 200:
# Parse the JSON data
json_data = response.json()
# Print the JSON data
print(json_data)
elif response.status_code == 429:
print("Too many requests. Retrying after waiting...")
time.sleep(2 ** attempt) # Exponential backoff
else:
print("Unknown error. Exiting...")
break
except requests.exceptions.HTTPError as err:
print(f"HTTP error occurred: {err}")
except requests.exceptions.RequestException as err:
print(f"An error occurred: {err}")
def sanitize_html(html_content):
# Remove HTML tags
stripped_content = html_content.replace("<", "").replace(">", "")
return escaped_content
57
Appendices
active_domains = []
location_cache = []
port_scan_results = []
server_info = []
sql_test_results = []
xss_test_results = []
csrf_results = []
certificate_results = []
locations_data = []
content.append(Paragraph(
f"<u>VulnScan Report - {time.strftime('%Y-%m-%d %H:%M:%S')}</u>",
styles['Title']))
content.append(Spacer(1, 12))
content.append(
Paragraph(f"<b>Target Domain:</b> {domain_name}", styles['Normal']))
content.append(
Paragraph(f"<b>IP Address:</b> {ip_address}", styles['Normal']))
content.append(Paragraph(f"<b>Scan Options:</b> {args}", styles['Normal']))
content.append(Spacer(1, 12))
if port_scan_results:
content.append(
Paragraph("<b>Port Scanning Results:</b>", styles['Heading2']))
port_scan_results.extend([
"<br />"+"<b>Suggestions for Open Ports :</b><br/>"
""
58
Appendices
"<br />"+"<b> - Evaluate Each Open Port :</b>
Determine whether each open port is necessary for the functioning of your website or if
it's potentially a security risk.",
"<b> - Close Unnecessary Ports :</b> For any open
ports that aren't needed for your website's operation, consider closing them through
your server's firewall configuration or network settings.",
"<b> - Secure Necessary Ports :</b> For ports that
are required for your website to function (such as port 80 for HTTP or port 443 for
HTTPS), ensure they are properly secured with strong encryption protocols, secure
configurations, and up-to-date software."
])
for result in port_scan_results:
content.append(Paragraph(result, styles['Normal']))
content.append(Spacer(1, 12))
if active_domains:
content.append(
Paragraph("<b>Active Subdomains:</b>", styles['Heading2']))
active_domains.extend([
"<br />"+"<b>Suggestions for Domain Enumeration and Active Sub Domains
:</b><br/>"
""
"<br />"+"<b> - Remove DNS Entries :</b> If you
want to completely disable access to certain subdomains, you can remove or modify
the DNS records for those subdomains. This prevents users from resolving the IP
address associated with those subdomains.",
"<b> - Redirect Subdomains :</b> Instead of
completely removing the subdomains, you can set up redirection rules on your server
to redirect requests from certain subdomains to the main domain or to a specific page.
This way, users won't see the content of the subdomains, but they will be redirected to
another location.",
"<b> - Configure Virtual Hosts :</b> If you're using a
web server like Apache or Nginx, you can configure virtual hosts to only serve content
for specific domains and subdomains. By configuring the virtual hosts appropriately,
you can prevent access to certain subdomains.",
"<b> - Use Robots.txt :</b> You can use a robots.txt
file to instruct search engines not to index certain subdomains or to exclude them from
search results. This won't prevent direct access to the subdomains, but it can help
59
Appendices
prevent them from appearing in search engine results.",
"<b> - Authentication and Authorization :</b>
Implement authentication and authorization mechanisms to restrict access to certain
subdomains. This way, even if users know the URL of a subdomain, they won't be able
to access it without proper credentials.",
])
for subdomain in active_domains:
content.append(Paragraph(subdomain, styles['Normal']))
content.append(Spacer(1, 12))
if server_info:
content.append(
Paragraph("<b>Domain Fingerprinting:</b>", styles['Heading2']))
server_info.extend([
"<br />"+"<b>Suggestions for Domain Fingerprinting :</b><br/>"
""
"<br />" +
"<b> - Apache :</b> Edit your Apache configuration
file (httpd.conf) and ensure that the following directives are set <b>{ 'ServerSignature
Off' , 'ServerTokens Prod' }</b> for hiding your apache information",
"<b> - Nginx :</b> In your Nginx configuration file
(nginx.conf), make sure the following directives are set" +
"<br/>" +
"<b>{ 'server_tokens off;' }</b> for hiding your HTTP Header information",
"<b> - PHP :</b> To hide the PHP version
information, you can adjust the expose_php directive in your PHP configuration file
(php.ini). Set it to Off using <b>{ 'expose_php = Off' }</b>",
])
for info in server_info: # Iterate over the elements of server_info list
content.append(Paragraph(str(info), styles['Normal']))
content.append(Spacer(1, 12))
if sql_test_results:
content.append(
Paragraph("<b>SQL Injection Test Results:</b>", styles['Heading2']))
sql_test_results.extend([
"<br />"+"<b>Suggestions for SQL Injection :</b><br/>"
""
60
Appendices
"<br />"+"<b> - Don't Use HTML forms :</b> HTMl
forms is directly linked with database so use some other options for survey or form
related uses ",
"<b> - Use modern languages :</b> Instead of
using normal HTML, CSS, JS use react, php and use NO SQL for Database "])
for info in sql_test_results: # Iterate over the elements of sql_test_results list
content.append(Paragraph(str(info), styles['Normal']))
content.append(Spacer(1, 12))
if xss_test_results:
content.append(
Paragraph("<b>XSS Testing Results:</b>", styles['Heading2']))
xss_test_results.extend([
"<br />"+"<b>Suggestions for SQL Injection :</b><br/>"
""
"<br />"+"<b> - Don't Trust User Input :</b> Always
validate and sanitize user input to prevent malicious scripts from executing.",
"<b> - Use Content Security Policy (CSP) :</b>
Implement CSP headers to restrict the sources from which content can be loaded,
mitigating XSS attacks.",
"<b> - Encode Output :</b> Encode output data
using appropriate encoding methods (such as HTML escaping) to prevent script
injection.",
"<b> - Educate Developers :</b> Train developers
on secure coding practices to reduce the likelihood of introducing XSS vulnerabilities."
])
for info in xss_test_results:
sanitized_info = sanitize_html(info)
content.append(Paragraph(str(sanitized_info), styles['Normal']))
content.append(Spacer(1, 12))
if csrf_results:
content.append(
Paragraph("<b>CSRF Test Results:</b>", styles['Heading2']))
csrf_results.extend([
"<br />"+"<b>Suggestions for CSRF Protection :</b><br/>"
""
"<br />"+"<b> - Secure Configuration :</b> You can
61
Appendices
enable or disable this protection in the central-wrapper.conf file.",
"<b> - 1. </b> Stop the Central server.",
"<b> - 2. </b> Open the
<installation_folder>/central/conf/central-wrapper.conf file.",
"<b> - 3. </b> Locate the Dcsrf.enabled property
and change it to true, to enable CSRF protection.",
"<b> - 4. </b> Start the Central server."
])
for info in csrf_results:
# Ensure info is converted to strings
content.append(Paragraph(str(info), styles['Normal']))
content.append(Spacer(1, 12))
if certificate_results:
content.append(
Paragraph("<b>Certificate Detection Results:</b>", styles['Heading2']))
certificate_results.extend([
"<br /><b>Suggestions for SSL/TLS Configuration :</b>",
"<br/>"+"<b> - Disable Certificate Transparency
(CT) :</b> Certificate Transparency is a mechanism for publicly logging SSL
certificates. If you have control over your certificate issuance process, you may be able
to disable CT logging for your certificates. However, note that this may not be feasible
for all certificate authorities (CAs) or certificate types.",
"<b> - Limit OCSP Stapling :</b> Online Certificate
Status Protocol (OCSP) stapling is a feature that allows the web server to provide the
OCSP response along with the SSL certificate during the SSL handshake. By limiting
OCSP stapling, you may reduce the amount of certificate-related information exposed
during the handshake.",
"<b> - Custom Error Pages :</b> Customize error
pages for SSL/TLS handshake failures. Instead of displaying detailed error messages
that may expose certificate details, provide generic error messages to users.<br />",
"<b> - Web Application Firewall (WAF) :</b> Use a
WAF to filter and sanitize HTTP responses from your web server. This can help
prevent leaking sensitive certificate details in error messages or responses.<br />",
"<b> - Load Balancer Configuration :</b> If your
website is behind a load balancer or reverse proxy, ensure that the load balancer does
not expose sensitive SSL certificate details in headers or error responses.",
"<b> - Security Headers: </b> Implement security
62
Appendices
headers such as Content Security Policy (CSP) to mitigate the impact of successful
attacks that may expose certificate details."
])
if locations_data:
content.append(
Paragraph("<b>Location Information:</b>", styles['Heading2']))
for info in locations_data:
content.append(Paragraph(str(info), styles['Normal']))
content.append(Spacer(1, 12))
doc.build(content)
print(f"\nReport generated: {report_filename}")
if __name__ == "__main__":
while True:
domain_name = input("\nEnter the target domain : ")
options, args = get_args() # Ensure get_args is defined properly in your script
# Call get_ip_address function to get IP address
ip_address = get_ip_address(domain_name)
get_ip_address(domain_name)
print('IP Address : ', ip_address)
while True:
print("\n1. Change Domain")
print("2. Port Scan")
print("3. Domain enumeration")
print("4. Domain Fingerprinting")
print("5. SQL Injection Testing")
print("6. XSS Testing")
print("7. CSRF Detection")
print("8. SSL / TLS Certificate Detection")
print("9. Location of the Server")
print("10. Report Generation")
63
Appendices
print("11. Exit\n")
choice = input(
"Enter a choice from the given options (1, 2, 3, 4, 5, 6, 7 , 8 , 9 , 10 or 11): ")
if choice == '1':
break # Change Domain
threads = []
65
Appendices
for i in range(options.n_threads):
t = threading.Thread(target=get_active)
t.daemon = True
t.start()
threads.append(t)
for t in threads:
t.join()
67
Appendices
content s domainm
control design anageme
controller desktop nt
controlp dev domains
controlpa dev01 download
nel dev1 download
corp dev2 s
corporate devel drupal
correo develope e
correowe rs eaccess
b developm echo
cp ent ecommer
cpanel dialin ce
crm diana edu
cs direct ektron
css directory elearning
customer dl email
s dmz en
cvs dns eng
d dns1 english
da dns2 enterpris
data dns3 eenrollm
database dns4 ent
db doc enterpris
db1 docs eregistrat
db2 domain ion
dbadmin domain- erp
dbs controller es
dc domaina event
de dmin events
default domainco ex
demo ntrol example
demo2 domainco examples
demon ntroller exchange
demostra domainco external
tion ntrolpane extranet
descarga l f
69
Appendices
is live mailserve
isa lms r
it local main
j localhost manage
ja log manager
jabber loghost mantis
jboss login map
jboss2 logon maps
jira logs market
job london marketin
jobs loopback g
jp love mars
js lp master
jupiter lync math
k lyncdisco mb
kb ver mc
kerberos m mdm
l m1 media
la m2 meet
lab magento member
laboratori mail members
es mail01 mercury
laboratori mail1 meta
o mail2 meta01
laborator mail3 meta02
y mail4 meta03
labs mail5 meta1
ldap mailadmi meta2
legacy n meta3
lib mailback miembro
library up s
link mailbox mijn
links mailer minerva
linux mailgate mirror
lisa mailhost ml
list mailing mm
lists mailman mob
71
Appendices
mobil ip oldmail
mobile networks oldsite
monitor new oldwww
monitorin newmail on
g news online
moodle newsgrou op
movil ps openbsd
mrtg newsite operation
ms newslette operation
msoid r s
mssql nl ops
munin noc ora
music novell oracle
mx ns origin
mx-a ns0 orion
mx-b ns01 os
mx0 ns02 osx
mx01 ns03 ou
mx02 ns1 outgoing
mx03 ns10 outlook
mx1 ns11 owa
mx2 ns12 ox
mx3 ns2 p
my ns3 painel
mysql ns4 panel
mysql2 ns5 partner
n ns6 partners
nagios ns7 pay
nas ns8 payment
nat nt payments
nelson ntp pbx
neon ntp1 pcanywh
net o ere
netmail oa pda
netscaler office pegasus
network office2 pendrell
network- old personal
72
Appendices
vps2 windows
w wordpres
w3 s
wap work
wc wp
web ws
web0 wsus
web01 ww
web02 ww0
web03 ww01
web1 ww02
web2 ww03
web3 ww1
web4 ww2
web5 ww3
webadmi www
n www-test
webcam www0
webconf www01
webct www02
webdb www03
webdisk www1
weblog www2
webmail www3
webmail2 www4
webmast www5
er www6
webmin www7
webservi wwwm
ces wwwold
webstats wwww
webstore x
whm xml
wifi zabbix
wiki zeus
win zimbra
win32
75