<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Nader Elgezawy 🥷]]></title><description><![CDATA[Nader Elgezawy 🥷]]></description><link>https://naderelgezawy1.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 20 Jun 2026 00:11:35 GMT</lastBuildDate><atom:link href="https://naderelgezawy1.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[ELK Setup, Log Ingestion & Attack Detection]]></title><description><![CDATA[Required Tasks

Installing & configuring Elasticsearch

Installing & configuring Kibana

Connecting Elasticsearch with Kibana

Installing & configuring Fluentbit

Installing & Configuring Winlogbeat

Writing detection rules & simulating a suspicious ...]]></description><link>https://naderelgezawy1.hashnode.dev/elk-setup-log-ingestion-and-attack-detection</link><guid isPermaLink="true">https://naderelgezawy1.hashnode.dev/elk-setup-log-ingestion-and-attack-detection</guid><dc:creator><![CDATA[Nader Ibrahim]]></dc:creator><pubDate>Wed, 08 Oct 2025 01:10:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759880605230/4c482621-3fcb-448a-9dc0-38d48472abf1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-required-tasks">Required Tasks</h2>
<ul>
<li><p>Installing &amp; configuring Elasticsearch</p>
</li>
<li><p>Installing &amp; configuring Kibana</p>
</li>
<li><p>Connecting Elasticsearch with Kibana</p>
</li>
<li><p>Installing &amp; configuring Fluentbit</p>
</li>
<li><p>Installing &amp; Configuring Winlogbeat</p>
</li>
<li><p>Writing detection rules &amp; simulating a suspicious activity  </p>
</li>
</ul>
<h2 id="heading-requirements">Requirements</h2>
<ul>
<li><p>VMware / Virtual Box</p>
</li>
<li><p>Windows 10/11 ISO – Ubuntu (20.0/22.0/24.0) ISO</p>
</li>
<li><p>16 GB RAM – 60 GB Disk Space</p>
</li>
<li><p>4 CPU Cores</p>
</li>
</ul>
<hr />
<h2 id="heading-phase-1-installing-amp-configuring-elasticsearch"><mark>PHASE 1 : Installing &amp; configuring Elasticsearch</mark></h2>
<ol>
<li><h3 id="heading-updating-ubuntu-packages">Updating Ubuntu packages</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo apt update
sudo apt upgrade -y
</code></pre>
<ol start="2">
<li><h3 id="heading-installing-required-packages-amp-dependencies">Installing required packages &amp; dependencies</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo apt update &amp;&amp; sudo apt upgrade -y
sudo apt install -y apt-transport-https gnupg wget curl

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

<span class="hljs-built_in">echo</span> <span class="hljs-string">"deb https://artifacts.elastic.co/packages/8.x/apt stable main"</span> | \
  sudo tee /etc/apt/sources.list.d/elastic-8.x.list
</code></pre>
<ol start="3">
<li><h3 id="heading-installing-elastic">Installing Elastic</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo apt install -y elasticsearch
</code></pre>
<ol start="4">
<li><h3 id="heading-configuring-elasticsearchyml">Configuring elasticsearch.yml</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo nano /etc/elasticsearch/elasticsearch.yml
</code></pre>
<p>Lines to be uncommented : <em>Network.host &amp; http.port</em></p>
<p>Lines to be added : <em>discovery.type: single-node</em></p>
<pre><code class="lang-bash">network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
</code></pre>
<ol start="5">
<li><h3 id="heading-enabling-amp-starting-the-elasticsearch-service">Enabling &amp; starting the Elasticsearch service</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo systemctl <span class="hljs-built_in">enable</span> elasticsearch
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
</code></pre>
<ol start="6">
<li><h3 id="heading-elasticsearch-reset-password"><strong>Elasticsearch-reset-password</strong></h3>
</li>
</ol>
<pre><code class="lang-bash">sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
</code></pre>
<p>Then you can save your password in a txt file for later use</p>
<h2 id="heading-phase-2-installing-amp-configuring-kibana"><mark>PHASE 2 : Installing &amp; configuring Kibana</mark></h2>
<ol>
<li><h3 id="heading-installing-kibana">Installing Kibana</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo apt install kibana -y
</code></pre>
<ol start="2">
<li><h3 id="heading-configuring-kibana">configuring Kibana</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo nano /etc/kibana/kibana.yml
</code></pre>
<ol start="3">
<li><h3 id="heading-only-uncomment-the-serverport-amp-serverhosthttpserverhost">Only uncomment the server.port &amp; <a target="_blank" href="http://server.host">server.host</a></h3>
</li>
</ol>
<pre><code class="lang-bash">server.port: 5601
server.host: <span class="hljs-string">"0.0.0.0"</span>
</code></pre>
<ol start="4">
<li><h3 id="heading-enabling-amp-starting-the-kibanaservice">Enabling &amp; starting the kibana.service</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo systemctl <span class="hljs-built_in">enable</span> kibana
sudo systemctl start kibana
sudo systemctl status kibana
</code></pre>
<ol start="5">
<li><h3 id="heading-to-check-connectivity-go-to-httpltyour-ipgt5601http1270015601-and-your-will-then-be-asked-for-an-enrollment-token">To check connectivity go to <a target="_blank" href="http://127.0.0.1:5601">http://&lt;your ip&gt;:5601</a> , and your will then be asked for an enrollment token</h3>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759881724279/350f1a21-80e1-4d3f-b217-d7fb55271513.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-phase-3-connecting-elasticsearch-with-kibana"><mark>PHASE 3 : Connecting elasticsearch with kibana</mark></h2>
<ol>
<li><h3 id="heading-generate-token">Generate Token</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollmenttoken -s kibana
</code></pre>
<ol start="2">
<li><h3 id="heading-after-getting-your-token-and-inserting-it-into-kibana-a-verification-code-will-be-created">After getting your token and inserting it into Kibana, a verification code will be created</h3>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759881734157/646e0d8f-556e-4b42-9038-71670e4e64f5.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><h3 id="heading-getting-verification-code">Getting verification code</h3>
</li>
</ol>
<pre><code class="lang-bash">sudo <span class="hljs-built_in">cd</span> /usr/share/kibana
sudo ./kibana-verification-code
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759881771767/ea438553-620d-4365-8d6c-0c0259e6ccd2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759881854683/d2597c6d-a611-42c0-83cd-c53b60fdfddc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759881781086/5f67629f-84dd-45da-917e-b924eb8eccfc.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-phase-4-installing-amp-configuring-fluentbit-amp-sending-logs"><mark>PHASE 4 : Installing &amp; Configuring Fluentbit &amp; sending logs</mark></h2>
<pre><code class="lang-bash">sudo apt-get update
sudo apt-get install fluent-bit
sudo systemctl <span class="hljs-built_in">enable</span> fluent-bit
sudo systemctl start fluent-bit
</code></pre>
<p>For a simple simulation of logs</p>
<p>Create a .log file for example firewall.log and add a few logs to that file and then save it.</p>
<pre><code class="lang-bash">2025-09-15 21:19:10 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'service_account_1'</span> from IP <span class="hljs-string">'172.16.2.20'</span>. Reason: Incorrect password.
2025-09-15 21:19:11 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'root'</span> from IP <span class="hljs-string">'172.16.2.20'</span>. Reason: User does not exist.
2025-09-15 21:19:12 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'backup_user'</span> from IP <span class="hljs-string">'172.16.2.20'</span>. Reason: Incorrect password.
2025-09-15 21:19:10 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'backup_user'</span> from IP <span class="hljs-string">'172.16.5.25'</span>. Reason: Too many attempts.
2025-09-15 21:19:11 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'sysadmin'</span> from IP <span class="hljs-string">'172.16.43.36'</span>. Reason: User does not exist.
2025-09-15 21:19:12 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'service_account_2'</span> from IP <span class="hljs-string">'172.16.209.170'</span>. Reason: User does not exist.
2025-09-15 21:19:13 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'service_account_1'</span> from IP <span class="hljs-string">'172.16.39.72'</span>. Reason: User does not exist.
2025-09-15 21:19:14 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'guest'</span> from IP <span class="hljs-string">'172.16.210.88'</span>. Reason: Incorrect password.
2025-09-15 21:19:15 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'guest'</span> from IP <span class="hljs-string">'172.16.77.96'</span>. Reason: Incorrect password.
2025-09-15 21:19:16 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'db_admin'</span> from IP <span class="hljs-string">'172.16.24.146'</span>. Reason: User does not exist.
2025-09-15 21:19:17 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'web_user'</span> from IP <span class="hljs-string">'172.16.136.135'</span>. Reason: Account locked.
2025-09-15 21:19:18 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'service_account_1'</span> from IP <span class="hljs-string">'172.16.24.89'</span>. Reason: Too many attempts.
2025-09-15 21:19:19 - AUTH: Failed login attempt <span class="hljs-keyword">for</span> user <span class="hljs-string">'db_admin'</span> from IP <span class="hljs-string">'172.16.181.30'</span>. Reason: Too many attempts.
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Detection Rules Using Snort]]></title><description><![CDATA[Task :

Writing 3 different detection rules for detecting any executable download (IDS MODE)


Snort Installation :


Writing rules in Snort :
nano /etc/snort/rules/local.rules

and paste
alert tcp any any -> any 80 (msg:"Executable Download Detected...]]></description><link>https://naderelgezawy1.hashnode.dev/detection-rules-using-snort</link><guid isPermaLink="true">https://naderelgezawy1.hashnode.dev/detection-rules-using-snort</guid><dc:creator><![CDATA[Nader Ibrahim]]></dc:creator><pubDate>Tue, 07 Oct 2025 23:01:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759877967018/5dc8bfa2-8f4e-491c-8720-9884a8fc3907.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-task"><mark>Task :</mark></h2>
<ul>
<li>Writing 3 different detection rules for detecting any executable download (IDS MODE)</li>
</ul>
<hr />
<h2 id="heading-snort-installation"><mark>Snort Installation :</mark></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759877462383/39be8c68-d6f3-401d-a6d4-1f727cfd6f85.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-writing-rules-in-snort"><mark>Writing rules in Snort :</mark></h2>
<pre><code class="lang-bash">nano /etc/snort/rules/local.rules
</code></pre>
<p>and paste</p>
<pre><code class="lang-bash">alert tcp any any -&gt; any 80 (msg:<span class="hljs-string">"Executable Download Detected (.exe)"</span>; flow:to_client,established; content:<span class="hljs-string">".exe"</span>; nocase; http_uri; sid:1000001; rev:1;)
alert tcp any any -&gt; any 80 (msg:<span class="hljs-string">"Executable MIME Download Detected"</span>; flow:to_client,established; content:<span class="hljs-string">"application/x-msdownload"</span>; http_header; nocase; sid:1000002; rev:1;)
alert tcp any any -&gt; any 80 (msg:<span class="hljs-string">"Executable Binary Payload Detected (MZ header)"</span>; flow:to_client,established; content:<span class="hljs-string">"MZ"</span>; offset:0; depth:2; sid:1000003; rev:1;)
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759877585570/65d23129-36f4-4fbf-a4be-f332f861b8e2.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-testing"><mark>Testing :</mark></h2>
<p>Run Snort in a terminal:</p>
<pre><code class="lang-bash">sudo snort -c /etc/snort/snort.conf -r Downloads/1.pcap -A fast
</code></pre>
<p>Link of the pcap file <a target="_blank" href="https://drive.google.com/drive/folders/12w5fqP91V4tr1BWOSFf9yTjR7FC9Ka4I?usp=sharing">Download</a></p>
<p>Sheet Cheat Link <a target="_blank" href="https://assets.tryhackme.com/cheatsheets/Snort%20Cheatsheet%20-%20TryHackMe.pdf">Download</a></p>
]]></content:encoded></item><item><title><![CDATA[block all traffic to/from a domain by Bash Script]]></title><description><![CDATA[Target:

Create a Bash script to block all traffic to/from a domain Youtube by resolving its IPs , then save the info to a file.


Setup Environment

First of all I create a directory for the task and create the script file with the extension .sh
 

...]]></description><link>https://naderelgezawy1.hashnode.dev/block-all-traffic-tofrom-a-domain-by-bash-script</link><guid isPermaLink="true">https://naderelgezawy1.hashnode.dev/block-all-traffic-tofrom-a-domain-by-bash-script</guid><category><![CDATA[Bash]]></category><category><![CDATA[#cybersecurity]]></category><dc:creator><![CDATA[Nader Ibrahim]]></dc:creator><pubDate>Mon, 06 Oct 2025 00:05:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759708122686/b51d04c3-a33f-4b6f-a34f-58e053694963.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-target"><mark>Target:</mark></h2>
<ul>
<li>Create a Bash script to block all traffic to/from a domain Youtube by resolving its IPs , then save the info to a file.</li>
</ul>
<hr />
<h2 id="heading-setup-environment"><mark>Setup Environment</mark></h2>
<ol>
<li><p>First of all I create a directory for the task and create the script file with the extension .sh</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759708443814/49ce62c3-e12f-4248-a9f6-906ae690f85a.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<hr />
<h2 id="heading-write-script"><mark>Write Script</mark></h2>
<pre><code class="lang-bash"><span class="hljs-meta">#!/bin/bash</span>

DOMAIN=<span class="hljs-string">"youtube.com"</span>
OUTPUT_FILE=<span class="hljs-string">"blocked_domains.txt"</span>


IPs=$(dig +short <span class="hljs-string">"<span class="hljs-variable">$DOMAIN</span>"</span> | grep -Eo <span class="hljs-string">'([0-9]{1,3}\.){3}[0-9]{1,3}'</span>)

<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">$IPs</span>"</span> ]; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"Failed to resolve <span class="hljs-variable">$DOMAIN</span>"</span>
    <span class="hljs-built_in">exit</span> 1
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">for</span> IP <span class="hljs-keyword">in</span> <span class="hljs-variable">$IPs</span>; <span class="hljs-keyword">do</span>
    sudo iptables -A OUTPUT -d <span class="hljs-string">"<span class="hljs-variable">$IP</span>"</span> -j REJECT
    sudo iptables -A INPUT -s <span class="hljs-string">"<span class="hljs-variable">$IP</span>"</span> -j REJECT
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$DOMAIN</span> (<span class="hljs-variable">$IP</span>) has been blocked"</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-subst">$(date)</span>: <span class="hljs-variable">$DOMAIN</span> (<span class="hljs-variable">$IP</span>) blocked"</span> &gt;&gt; <span class="hljs-string">"<span class="hljs-variable">$OUTPUT_FILE</span>"</span>
<span class="hljs-keyword">done</span>

<span class="hljs-built_in">echo</span> <span class="hljs-string">"Blocking complete. Details saved in <span class="hljs-variable">$OUTPUT_FILE</span>."</span>
</code></pre>
<pre><code class="lang-bash">chmod 777 script.sh
sudo ./script.sh
</code></pre>
<ol>
<li><p>First I specify the domain I want to block , in this case I will choose <a target="_blank" href="http://facebook.com">youtube.com</a></p>
</li>
<li><p>Then I assign an IP variable and use the regex to extract the IP</p>
</li>
<li><p>If the domain couldn't be resolved, the script exits with a message</p>
</li>
<li><p>Then I block the outgoing &amp; the ingoing traffic from this domain using iptables</p>
</li>
</ol>
<hr />
<h2 id="heading-test"><mark>Test</mark></h2>
<pre><code class="lang-bash">cat blocked_domains.txt 
Sun Oct  5 07:41:17 PM EDT 2025: youtube.com (172.217.21.14) blocked
</code></pre>
<p>go to youtube.com</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759708808706/0ed888ee-4776-4357-b558-a41b8fcef46f.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Step-by-Step: Kali Attacks vs (WAF) on Ubuntu using Nginx & ModSecurity with OWASP Core Rule Set (CRS)]]></title><description><![CDATA[sa
sudo apt install -y git gcc g++ make automake autoconf libtool libpcre3 libpcre3-dev \
libxml2 libxml2-dev libyajl-dev pkgconf zlib1g zlib1g-dev libcurl4-openssl-dev \
libgeoip-dev liblmdb-dev libfuzzy-dev liblua5.3-dev libpcre2-dev nginx wget cur...]]></description><link>https://naderelgezawy1.hashnode.dev/step-by-step-kali-attacks-vs-waf-on-ubuntu-using-nginx-and-modsecurity-with-owasp-core-rule-set-crs</link><guid isPermaLink="true">https://naderelgezawy1.hashnode.dev/step-by-step-kali-attacks-vs-waf-on-ubuntu-using-nginx-and-modsecurity-with-owasp-core-rule-set-crs</guid><category><![CDATA[hacking]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Python]]></category><category><![CDATA[firewall]]></category><category><![CDATA[pentesting]]></category><dc:creator><![CDATA[Nader Ibrahim]]></dc:creator><pubDate>Fri, 03 Oct 2025 22:57:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759516500035/497ab4db-e257-4c9e-9b62-224db9ddf0b8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>sa</p>
<pre><code class="lang-bash">sudo apt install -y git gcc g++ make automake autoconf libtool libpcre3 libpcre3-dev \
libxml2 libxml2-dev libyajl-dev pkgconf zlib1g zlib1g-dev libcurl4-openssl-dev \
libgeoip-dev liblmdb-dev libfuzzy-dev liblua5.3-dev libpcre2-dev nginx wget curl
</code></pre>
<p>sa</p>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> --depth 1 -b v3/master https://github.com/SpiderLabs/ModSecurity
<span class="hljs-built_in">cd</span> ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
sudo make install
<span class="hljs-built_in">cd</span> ..
</code></pre>
<p>as</p>
<p>a</p>
<p>s</p>
<p>as</p>
<p>a</p>
]]></content:encoded></item><item><title><![CDATA[MAC Spoofing]]></title><description><![CDATA[Target :
Change the Logical MAC Address Every 3 Minutes on Windows

MAC Spoofing With Python
import ctypes, sys, subprocess, random, time

INTERFACE = "Wi-Fi"

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
...]]></description><link>https://naderelgezawy1.hashnode.dev/mac-spoofing</link><guid isPermaLink="true">https://naderelgezawy1.hashnode.dev/mac-spoofing</guid><category><![CDATA[Python]]></category><category><![CDATA[hacking]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Nader Ibrahim]]></dc:creator><pubDate>Fri, 03 Oct 2025 15:22:11 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759506814712/aae6fba1-bff1-4c4e-8b9f-9cc1d85825d9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-target"><mark>Target :</mark></h2>
<p>Change the Logical MAC Address Every 3 Minutes on Windows</p>
<hr />
<h2 id="heading-mac-spoofing-with-python"><mark>MAC Spoofing With Python</mark></h2>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> ctypes, sys, subprocess, random, time

INTERFACE = <span class="hljs-string">"Wi-Fi"</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_admin</span>():</span>
    <span class="hljs-keyword">try</span>:
        <span class="hljs-keyword">return</span> ctypes.windll.shell32.IsUserAnAdmin()
    <span class="hljs-keyword">except</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">generate_mac</span>():</span>
    mac = [<span class="hljs-number">0x02</span>, random.randint(<span class="hljs-number">0x00</span>, <span class="hljs-number">0x7f</span>),
           random.randint(<span class="hljs-number">0x00</span>, <span class="hljs-number">0xff</span>),
           random.randint(<span class="hljs-number">0x00</span>, <span class="hljs-number">0xff</span>),
           random.randint(<span class="hljs-number">0x00</span>, <span class="hljs-number">0xff</span>),
           random.randint(<span class="hljs-number">0x00</span>, <span class="hljs-number">0xff</span>)]
    <span class="hljs-keyword">return</span> <span class="hljs-string">""</span>.join(<span class="hljs-string">f"<span class="hljs-subst">{b:<span class="hljs-number">02</span>X}</span>"</span> <span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> mac)


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">change_mac</span>(<span class="hljs-params">interface, mac</span>):</span>
    print(<span class="hljs-string">f"[+] Changing <span class="hljs-subst">{interface}</span> MAC to <span class="hljs-subst">{mac}</span>"</span>)
    <span class="hljs-keyword">try</span>:
        subprocess.run([
            <span class="hljs-string">"powershell"</span>, <span class="hljs-string">"-Command"</span>,
            <span class="hljs-string">f'Set-NetAdapterAdvancedProperty -Name "<span class="hljs-subst">{interface}</span>" -DisplayName "Network Address" -DisplayValue "<span class="hljs-subst">{mac}</span>"'</span>
        ], check=<span class="hljs-literal">True</span>)

        subprocess.run([
            <span class="hljs-string">"powershell"</span>, <span class="hljs-string">"-Command"</span>,
            <span class="hljs-string">f'Restart-NetAdapter -Name "<span class="hljs-subst">{interface}</span>" -Confirm:$false'</span>
        ], check=<span class="hljs-literal">True</span>)

    <span class="hljs-keyword">except</span> subprocess.CalledProcessError <span class="hljs-keyword">as</span> e:
        print(<span class="hljs-string">"[-] Failed to change MAC:"</span>, e)

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span>():</span>
    <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
        new_mac = generate_mac()
        change_mac(INTERFACE, new_mac)
        print(<span class="hljs-string">"[*] Waiting 3 minutes before next change...\n"</span>)
        time.sleep(<span class="hljs-number">180</span>)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> is_admin():
        print(<span class="hljs-string">"[!] Restarting script as Administrator..."</span>)
        ctypes.windll.shell32.ShellExecuteW(
            <span class="hljs-literal">None</span>, <span class="hljs-string">"runas"</span>, sys.executable, <span class="hljs-string">" "</span>.join(sys.argv), <span class="hljs-literal">None</span>, <span class="hljs-number">1</span>
        )
    <span class="hljs-keyword">else</span>:
        main()
</code></pre>
<ol>
<li><p><strong>Choose Interface</strong></p>
</li>
<li><p><strong>make function to check Admin or not</strong></p>
</li>
<li><p><strong>Generate MAC</strong></p>
</li>
<li><p><strong>Change MAC by running PowerShell command</strong></p>
</li>
</ol>
<hr />
<h2 id="heading-mac-spoofing-with-registry"><mark>MAC Spoofing With Registry</mark></h2>
<pre><code class="lang-powershell"><span class="hljs-comment"># Run this script as Administrator</span>

<span class="hljs-comment"># Adapter name you want to change (Wi-Fi)</span>
<span class="hljs-variable">$AdapterName</span> = <span class="hljs-string">"Wi-Fi"</span>

<span class="hljs-comment"># New MAC address (12 hex characters, no separators)</span>
<span class="hljs-variable">$NewMAC</span> = <span class="hljs-string">"02AB4C90D3F1"</span>

<span class="hljs-comment"># Registry base path for all network adapters</span>
<span class="hljs-variable">$BasePath</span> = <span class="hljs-string">"HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}"</span>

<span class="hljs-comment"># Find the registry key for the adapter</span>
<span class="hljs-variable">$Adapter</span> = <span class="hljs-built_in">Get-NetAdapter</span> <span class="hljs-literal">-Name</span> <span class="hljs-variable">$AdapterName</span>
<span class="hljs-keyword">if</span> (<span class="hljs-operator">-not</span> <span class="hljs-variable">$Adapter</span>) {
    <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"[-] Adapter <span class="hljs-variable">$AdapterName</span> not found."</span>
    <span class="hljs-keyword">exit</span>
}

<span class="hljs-variable">$RegKey</span> = <span class="hljs-built_in">Get-ChildItem</span> <span class="hljs-variable">$BasePath</span> | <span class="hljs-built_in">Where-Object</span> {
    (<span class="hljs-built_in">Get-ItemProperty</span> <span class="hljs-variable">$_</span>.PSPath).NetCfgInstanceId <span class="hljs-operator">-eq</span> <span class="hljs-variable">$Adapter</span>.InterfaceGuid
}

<span class="hljs-keyword">if</span> (<span class="hljs-operator">-not</span> <span class="hljs-variable">$RegKey</span>) {
    <span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"[-] Could not locate registry key for <span class="hljs-variable">$AdapterName</span>"</span>
    <span class="hljs-keyword">exit</span>
}

<span class="hljs-comment"># Set or update the NetworkAddress value</span>
<span class="hljs-built_in">Set-ItemProperty</span> <span class="hljs-literal">-Path</span> <span class="hljs-variable">$RegKey</span>.PSPath <span class="hljs-literal">-Name</span> <span class="hljs-string">"NetworkAddress"</span> <span class="hljs-literal">-Value</span> <span class="hljs-variable">$NewMAC</span>
<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"[+] MAC Address for <span class="hljs-variable">$AdapterName</span> set to <span class="hljs-variable">$NewMAC</span> in registry."</span>

<span class="hljs-comment"># Restart adapter to apply changes</span>
<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"[*] Restarting adapter..."</span>
<span class="hljs-built_in">Disable-NetAdapter</span> <span class="hljs-literal">-Name</span> <span class="hljs-variable">$AdapterName</span> <span class="hljs-literal">-Confirm</span>:<span class="hljs-variable">$false</span>
<span class="hljs-built_in">Start-Sleep</span> <span class="hljs-literal">-Seconds</span> <span class="hljs-number">2</span>
<span class="hljs-built_in">Enable-NetAdapter</span> <span class="hljs-literal">-Name</span> <span class="hljs-variable">$AdapterName</span> <span class="hljs-literal">-Confirm</span>:<span class="hljs-variable">$false</span>

<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"[+] Done! New MAC should be active."</span>
</code></pre>
<pre><code class="lang-plaintext">.\Change-MAC.ps1
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759506037199/ace05b6f-1d0a-41f0-9c55-cbec3441817b.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item></channel></rss>