• Email Validation Script

    import re
    import dns.resolver
    
    def is_valid_email(email):
        """Validate the email format and check for MX records."""
        # Regex pattern for validating an Email
        pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
        
        if not re.match(pattern, email):
            return False, "Invalid email format."
    
        domain = email.split('@')[1]
        
        try:
            # Check for MX records
            dns.resolver.resolve(domain, 'MX')
            return True, "Valid email address with a working domain."
        except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
            return False, "Valid format but no MX record found."
    
    if __name__ == "__main__":
        email = input("Enter an email address to validate: ")
        is_valid, message = is_valid_email(email)
        print(message)
  • Password Generator

    import random
    import string
    
    def generate_password(length=12, use_uppercase=True, use_lowercase=True, use_digits=True, use_symbols=True):
        """Generate a secure random password based on user preferences."""
        characters = ''
        
        if use_uppercase:
            characters += string.ascii_uppercase
        if use_lowercase:
            characters += string.ascii_lowercase
        if use_digits:
            characters += string.digits
        if use_symbols:
            characters += string.punctuation
    
        if not characters:
            raise ValueError("At least one character type must be selected!")
    
        password = ''.join(random.choice(characters) for _ in range(length))
        return password
    
    if __name__ == "__main__":
        print("--- Password Generator ---")
        length = int(input("Enter desired password length (default is 12): ") or 12)
        use_uppercase = input("Include uppercase letters? (y/n, default is y): ").strip().lower() != 'n'
        use_lowercase = input("Include lowercase letters? (y/n, default is y): ").strip().lower() != 'n'
        use_digits = input("Include digits? (y/n, default is y): ").strip().lower() != 'n'
        use_symbols = input("Include symbols? (y/n, default is y): ").strip().lower() != 'n'
    
        try:
            generated_password = generate_password(length, use_uppercase, use_lowercase, use_digits, use_symbols)
            print(f"Generated Password: {generated_password}")
        except ValueError as e:
            print(e)
  • Text-Based Adventure Game

    def start_game():
        print("Welcome to the Adventure Game!")
        print("You find yourself in a dark forest. You can go left or right.")
        choice = input("Which way do you want to go? (left/right): ").strip().lower()
        
        if choice == "left":
            encounter_wolf()
        elif choice == "right":
            encounter_river()
        else:
            print("Invalid choice. Please try again.")
            start_game()
    
    def encounter_wolf():
        print("\nYou encounter a wild wolf!")
        print("1. Try to scare it away.")
        print("2. Run away.")
        
        choice = input("What do you want to do? (1/2): ")
        
        if choice == "1":
            print("You bravely try to scare the wolf, and it runs away! You are safe.")
        elif choice == "2":
            print("You run away as fast as you can. The wolf chases you, but you manage to escape!")
        else:
            print("Invalid choice. Please try again.")
            encounter_wolf()
    
    def encounter_river():
        print("\nYou come across a serene river.")
        print("1. Try to swim across.")
        print("2. Look for a bridge.")
        
        choice = input("What do you want to do? (1/2): ")
        
        if choice == "1":
            print("You bravely swim across the river. It's cold, but you make it!")
        elif choice == "2":
            print("You find a bridge and safely cross the river.")
        else:
            print("Invalid choice. Please try again.")
            encounter_river()
    
    if __name__ == "__main__":
        start_game()
  • File Integrity Checker

    import hashlib
    import os
    import json
    
    def calculate_file_hash(file_path):
        """Calculate the SHA-256 hash of a file."""
        if not os.path.isfile(file_path):
            raise FileNotFoundError(f"The file '{file_path}' does not exist.")
    
        sha256_hash = hashlib.sha256()
        with open(file_path, "rb") as f:
            # Read and update hash string value in blocks of 4K
            for byte_block in iter(lambda: f.read(4096), b""):
                sha256_hash.update(byte_block)
        return sha256_hash.hexdigest()
    
    def save_hash(file_path, hash_value):
        """Save the hash value to a .json file."""
        if not os.path.exists("file_hashes.json"):
            with open("file_hashes.json", "w") as f:
                json.dump({}, f)
    
        with open("file_hashes.json", "r+") as f:
            try:
                data = json.load(f)
            except json.JSONDecodeError:
                data = {}
    
            data[file_path] = hash_value
            f.seek(0)
            json.dump(data, f, indent=4)
    
    def check_file_integrity(file_path):
        """Check if a file's hash matches the stored hash."""
        current_hash = calculate_file_hash(file_path)
        
        if os.path.exists("file_hashes.json"):
            with open("file_hashes.json", "r") as f:
                data = json.load(f)
                stored_hash = data.get(file_path)
    
            if stored_hash:
                if current_hash == stored_hash:
                    return "File is intact."
                else:
                    return "File has been modified!"
            else:
                return "No stored hash found for this file."
        else:
            return "No hash records found. Please save the hash first."
    
    if __name__ == "__main__":
        action = input("Enter 'save' to save a file hash or 'check' to check file integrity: ").strip().lower()
        file_path = input("Enter the path of the file: ")
    
        if action == 'save':
            file_hash = calculate_file_hash(file_path)
            save_hash(file_path, file_hash)
            print(f"Hash for '{file_path}' saved.")
        elif action == 'check':
            result = check_file_integrity(file_path)
            print(result)
        else:
            print("Invalid action. Please enter 'save' or 'check'.")
    
  • YALAT (Yet Another Log Analysis Tool)

    import re
    from collections import Counter
    
    # Define patterns for suspicious activities
    SUSPICIOUS_PATTERNS = {
        r"failed password": "Failed login attempt detected.",
        r"authentication failure": "Authentication failure detected.",
        r"root": "Root access attempt detected.",
        r"exec": "Execution of commands detected.",
        r"delete": "Delete operation detected.",
        r"unauthorized access": "Unauthorized access attempt detected.",
    }
    
    def analyze_log(file_path):
        with open(file_path, 'r') as file:
            log_data = file.readlines()
    
        findings = Counter()
    
        for line in log_data:
            for pattern, message in SUSPICIOUS_PATTERNS.items():
                if re.search(pattern, line, re.IGNORECASE):
                    findings[message] += 1
    
        return findings
    
    def display_findings(findings):
        print("\n--- Log Analysis Findings ---")
        if findings:
            for message, count in findings.items():
                print(f"{message}: {count} times")
        else:
            print("No suspicious activities detected.")
    
    if __name__ == "__main__":
        log_file_path = input("Enter the path to the log file: ")
        findings = analyze_log(log_file_path)
        display_findings(findings)
  • Basic WAF (Web Application Firewall)

    from flask import Flask, request, render_template_string
    import re
    
    app = Flask(__name__)
    
    # Define common attack patterns to block with tailored messages
    BLOCKED_PATTERNS = {
        r"' OR '1'='1'": "Detected SQL Injection attempt: This input could manipulate database queries.",
        r"'(.*?)--": "Detected SQL Injection attempt: This input could terminate a query.",
        r"<script.*?>": "Detected XSS attempt: This input could execute malicious scripts in users' browsers.",
        r"(?i)DROP\s+TABLE": "Detected SQL Injection attempt: This input could delete database tables.",
        r"(?i)SELECT\s+\*": "Detected SQL Injection attempt: This input could retrieve sensitive data from the database.",
        r"(?i)INSERT\s+INTO": "Detected SQL Injection attempt: This input could insert data into the database.",
        r"(?i)DELETE\s+FROM": "Detected SQL Injection attempt: This input could delete data from the database.",
        r"(?i)UPDATE\s+\w+\s+SET": "Detected SQL Injection attempt: This input could update database records.",
        r"(?i)UNION\s+SELECT": "Detected SQL Injection attempt: This input could combine results from multiple queries.",
        r"<iframe.*?>": "Detected XSS attempt: This input could embed malicious content.",
        r"(?i)EXEC\s+": "Detected SQL Injection attempt: This input could execute arbitrary commands.",
    }
    
    def check_input(payload):
        for pattern, message in BLOCKED_PATTERNS.items():
            if re.search(pattern, payload):
                return message, False
        return "Input received safely. Thank you!", True
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        payload = request.form.get('input', '')
        message, is_safe = check_input(payload) if payload else (None, False)
        show_refresh = True  # Always show the refresh button
        return render_template_string(render_template(message, payload, show_refresh, is_safe))
    
    def render_template(message, payload, show_refresh, is_safe):
        message_color = "green" if is_safe else "red" if message else "black"
        refresh_button = '<form action="/" method="get"><input type="submit" value="Refresh"></form>' if show_refresh else ''
        return f'''
            <h1>Web Application Firewall</h1>
            <form method="post">
                Input: <input type="text" name="input" value="{payload}">
                <input type="submit" value="Submit">
            </form>
            <h3 style="color: {message_color};">{message if message else ""}</h3>
            {refresh_button}
        '''
    
    if __name__ == "__main__":
        app.run(port=5000)
    
  • Honeypot Script

    import socket
    import logging
    import datetime
    
    # Configure logging
    logging.basicConfig(filename='honeypot.log', level=logging.INFO)
    
    def start_honeypot(port):
        # Create a socket
        honeypot_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        honeypot_socket.bind(('0.0.0.0', port))
        honeypot_socket.listen(5)
        print(f"Honeypot listening on port {port}...")
    
        while True:
            conn, addr = honeypot_socket.accept()
            print(f"Connection from {addr} has been established!")
            log_access_attempt(addr)
            conn.close()
    
    def log_access_attempt(addr):
        timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        logging.info(f"{timestamp} - Unauthorized access attempt from {addr}")
    
    if __name__ == "__main__":
        port = 9999
        start_honeypot(port)
  • Incident Response Playbook Template

    # Incident Response Playbook
    
    ## Objectives
    - Minimize damage and recovery time.
    - Protect sensitive data.
    - Maintain business continuity.
    
    ## Incident Response Team
    - **Incident Response Manager**: [Name]
    - **IT Security Analyst**: [Name]
    - **Legal Advisor**: [Name]
    - **Public Relations**: [Name]
    
    ## Incident Categories
    1. Malware Infections
    2. Unauthorized Access
    3. Data Breaches
    4. Denial of Service Attacks
    5. Insider Threats
    
    ## Incident Response Process
    
    ### 1. Preparation
    - Train IRT members.
    - Establish communication tools.
    
    ### 2. Identification
    - Monitor systems for anomalies.
    
    ### 3. Containment
    - Short-term: Isolate affected systems.
    - Long-term: Secure systems before restoration.
    
    ### 4. Eradication
    - Remove malware and vulnerabilities.
    
    ### 5. Recovery
    - Restore operations and monitor systems.
    
    ### 6. Lessons Learned
    - Document findings and update protocols.
    
    ## Communication Protocols
    - Internal: [Details]
    - External: [Details]
    
    ## Documentation Templates
    - Incident Report
    - Evidence Collection Log
    - Communication Templates
    
    ## Testing and Review
    - Schedule regular tabletop exercises.
    - Update playbook based on tests and incidents.
  • Network Forensics Script

    from scapy.all import rdpcap
    
    def analyze_pcap(file_path):
        packets = rdpcap(file_path)
        print(f"Total packets: {len(packets)}")
        
        for packet in packets:
            if packet.haslayer('IP'):
                print(f"Source: {packet['IP'].src}, Destination: {packet['IP'].dst}")
    
    pcap_file = input("Enter the path to the PCAP file: ")
    analyze_pcap(pcap_file)
  • Log Analysis Tool

    #!/bin/bash
    
    logfile="access.log"
    
    echo "Analyzing $logfile for failed login attempts..."
    grep "401" "$logfile" | awk '{print $1}' | sort | uniq -c | sort -nr > failed_logins.txt
    
    echo "Failed login attempts saved to failed_logins.txt."