<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kenny Cipher</title>
    <description>The latest articles on DEV Community by Kenny Cipher (@kenny-cipher).</description>
    <link>https://dev.to/kenny-cipher</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3811025%2Fdf21cf8c-0bba-410a-92fc-a870fe7cddbd.jpg</url>
      <title>DEV Community: Kenny Cipher</title>
      <link>https://dev.to/kenny-cipher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kenny-cipher"/>
    <language>en</language>
    <item>
      <title>Cross-site scripting – Reflected XSS | PortSwigger Lab Note #3</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Thu, 19 Mar 2026 09:43:50 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/cross-site-scripting-reflected-xss-portswigger-lab-note-3-1p1e</link>
      <guid>https://dev.to/kenny-cipher/cross-site-scripting-reflected-xss-portswigger-lab-note-3-1p1e</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-some-svg-markup-allowed" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/cross-site-scripting/contexts/lab-some-svg-markup-allowed&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reflected XSS&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description:&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Determine that this is a reflected XSS vulnerability because the input appears directly in the HTML response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqaydlhx8zouzw4l59w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqaydlhx8zouzw4l59w3.png" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Submit the payload alert(1) to test whether script execution is possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1wgqgan9ny38a1u0ml0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1wgqgan9ny38a1u0ml0.png" alt=" " width="800" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Observe that the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag is blocked, then use Burp Intruder to analyze the filtering mechanism &lt;/p&gt;

&lt;p&gt;4.Observe that most payloads return a 400 response, while payloads using tags such as &lt;code&gt;&amp;lt;svg&amp;gt;, &amp;lt;animatetransform&amp;gt;, &amp;lt;title&amp;gt;, and &amp;lt;image&amp;gt;&lt;/code&gt; return a 200 response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3zy3w1zqfuvetsz1ywr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3zy3w1zqfuvetsz1ywr.png" alt=" " width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select one allowed tag and use Intruder to test which attributes are permitted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxs77qda54v913h84ktq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxs77qda54v913h84ktq0.png" alt=" " width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Construct a working payload based on the allowed tags and attributes to trigger the XSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;p&gt;The application should implement proper context-aware output encoding to prevent user-supplied data from being interpreted as executable code. All inputs must be safely encoded before being rendered in the browser.&lt;/p&gt;

&lt;p&gt;Additionally, input validation should be enforced to block dangerous patterns such as "javascript:" URLs. The use of secure frameworks with built-in XSS protection and the implementation of a Content Security Policy (CSP) are recommended to further reduce risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;This lab demonstrates that even when common tags like &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; are blocked, XSS can still be achieved by leveraging less restricted tags such as SVG. By systematically analyzing the filtering behavior with tools like Burp Intruder, attackers can identify allowed tags and attributes and craft a payload that bypasses the filter. Effective defense requires proper output encoding and avoiding reliance on blacklist-based filtering.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>javascript</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cross-site scripting – Stored XSS into anchor href attribute with double quotes HTML-encoded | PortSwigger Lab Note #2</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Thu, 19 Mar 2026 09:24:41 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/cross-site-scripting-stored-xss-into-anchor-href-attribute-with-double-quotes-html-encoded--3cca</link>
      <guid>https://dev.to/kenny-cipher/cross-site-scripting-stored-xss-into-anchor-href-attribute-with-double-quotes-html-encoded--3cca</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab URL: &lt;br&gt;
&lt;a href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-href-attribute-double-quotes-html-encoded" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/cross-site-scripting/contexts/lab-href-attribute-double-quotes-html-encoded&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools Used:  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stored XSS &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description:&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Determine that this is a stored XSS vulnerability because the input does not appear directly in the response.&lt;/p&gt;

&lt;p&gt;2.Check the page source and find that the user-supplied website value is reflected inside the href attribute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9upyngrzxirv41erqkya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9upyngrzxirv41erqkya.png" alt=" " width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Inject a payload such as javascript:alert(1) into the href attribute to trigger the XSS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr1rn6h968oadwlnsywr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr1rn6h968oadwlnsywr.png" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;p&gt;The application should implement proper context-aware output encoding to prevent user-supplied data from being interpreted as executable code. All inputs must be safely encoded before being rendered in the browser.&lt;/p&gt;

&lt;p&gt;Additionally, input validation should be enforced to block dangerous patterns such as "javascript:" URLs. The use of secure frameworks with built-in XSS protection and the implementation of a Content Security Policy (CSP) are recommended to further reduce risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;This lab shows that XSS can occur in attribute contexts such as href, even when double quotes are HTML-encoded. By analyzing where user input is placed in the HTML structure, attackers can craft context-specific payloads like javascript: URLs to trigger execution. Proper defenses should include context-aware output encoding and validation of dangerous URI schemes.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>javascript</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cross-site scripting – Reflected XSS into HTML context with most tags and attributes blocked | PortSwigger Lab Note #1</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Tue, 17 Mar 2026 11:14:44 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/cross-site-scripting-reflected-xss-into-html-context-with-most-tags-and-attributes-blocked--13pi</link>
      <guid>https://dev.to/kenny-cipher/cross-site-scripting-reflected-xss-into-html-context-with-most-tags-and-attributes-blocked--13pi</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab URL: &lt;br&gt;
&lt;a href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools Used:  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reflected Cross-site scripting&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description:&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Input &amp;lt;&amp;gt; to determine whether angle brackets are filtered by the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfpgobmx0qrmcczg1ity.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfpgobmx0qrmcczg1ity.png" alt=" " width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Input&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; to check whether this tag is filtered by the WAF.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11275jp3adnd82j9ll6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11275jp3adnd82j9ll6j.png" alt=" " width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsb5v678agydwkj7jm82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsb5v678agydwkj7jm82.png" alt=" " width="374" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Use the XSS cheat sheet and Burp Intruder to identify which HTML tags are allowed by the filter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjgdzbdpnjveniqod0m0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjgdzbdpnjveniqod0m0.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Use Intruder again to test which attributes can be used with the allowed tags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jdwy57yxuh29ix9e4gv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jdwy57yxuh29ix9e4gv.png" alt=" " width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Find a way to exploit the XSS vulnerability using the permitted tags and attributes, and craft a working payload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr724s4sro55mqmjjlaut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr724s4sro55mqmjjlaut.png" alt=" " width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Create a malicious URL and send it to the victim so that the server responds with a hidden script that triggers the exploit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixt9ysxpf5vtf6bbxsse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixt9ysxpf5vtf6bbxsse.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;This lab demonstrates that even when most HTML tags and attributes are blocked by a WAF, XSS may still be possible by enumerating which tags and event handlers are allowed. By systematically testing inputs with Burp Intruder and using an XSS cheat sheet, attackers can discover permitted combinations of tags and attributes and craft a payload that bypasses the filter. Proper defenses should rely on strict output encoding rather than blacklist-based filtering. &lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>javascript</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – with filter bypass via XML encoding | PortSwigger Lab Note #11</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Mon, 16 Mar 2026 01:06:20 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-with-filter-bypass-via-xml-encoding-portswigger-lab-note-11-2khh</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-with-filter-bypass-via-xml-encoding-portswigger-lab-note-11-2khh</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-in-different-contexts/sql-injection/lab-sql-injection-with-filter-bypass-via-xml-encoding#" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-in-different-contexts/sql-injection/lab-sql-injection-with-filter-bypass-via-xml-encoding#&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lab demonstrates a SQL injection vulnerability inside XML input.&lt;br&gt;
The application performs a database query using user-supplied XML data without proper sanitization.&lt;/p&gt;

&lt;p&gt;However, a weak WAF (Web Application Firewall) attempts to block common SQL injection payloads. The goal is to bypass the filter using XML encoding, extract the administrator credentials, and log in as the administrator. &lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Check the lab scenario and identify two possible injection points in the XML request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzld2xh8vyo6c8fwiiik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzld2xh8vyo6c8fwiiik.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Test the XML structure by submitting some special or sensitive characters to see whether a weak WAF or input filter exists.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7vijtlkphbc2z42yujo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7vijtlkphbc2z42yujo.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.After confirming that character filtering is present, attempt to bypass the filter and determine the number of columns in the SQL query using a UNION-based payload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mvo9k3hlgii19orfmzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mvo9k3hlgii19orfmzi.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Once the column count is identified, use the SQL concatenation operator &lt;code&gt;||&lt;/code&gt; to combine the &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt; fields in order to extract credentials from the &lt;code&gt;users&lt;/code&gt; table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd2g3x5askgeoad8uyfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd2g3x5askgeoad8uyfr.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;This lab demonstrates that SQL injection can occur in XML input contexts and that weak WAF filters can often be bypassed using encoding techniques. Even if certain characters or keywords are blocked, attackers may still exploit the vulnerability by modifying the payload format. Proper defenses should rely on parameterized queries and secure query construction rather than simple input filtering.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – time delays and information retrieval| PortSwigger Lab Note #10</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Fri, 13 Mar 2026 01:16:15 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-time-delays-and-information-retrieval-portswigger-lab-note-10-2ima</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-time-delays-and-information-retrieval-portswigger-lab-note-10-2ima</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-exploiting-blind-sql-injection-by-triggering-time-delays/sql-injection/blind/lab-time-delays-info-retrieval" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-exploiting-blind-sql-injection-by-triggering-time-delays/sql-injection/blind/lab-time-delays-info-retrieval&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  Blind SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The results of the SQL query are not returned, and the application does not respond any differently based on whether the query returns any rows or causes an error. However, since the query is executed synchronously, it is possible to trigger conditional time delays to infer information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Verify that the application responds  with no time delay or time delay&lt;/p&gt;

&lt;p&gt;2.confirming that there is a user called administrator.&lt;/p&gt;

&lt;p&gt;3.determine how many characters are in the password of the administrator user&lt;/p&gt;

&lt;p&gt;4.Determine the password&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6ouy3xovwrsd5z430qt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6ouy3xovwrsd5z430qt.png" alt=" " width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – Blind SQL injection with conditional errors | PortSwigger Lab Note #9</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Thu, 12 Mar 2026 03:31:40 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-blind-sql-injection-with-conditional-errors-portswigger-lab-note-9-528b</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-blind-sql-injection-with-conditional-errors-portswigger-lab-note-9-528b</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab URL: &lt;br&gt;
&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-error-based-sql-injection/sql-injection/blind/lab-conditional-errors#" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-error-based-sql-injection/sql-injection/blind/lab-conditional-errors#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools Used:  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.confirm that the server is interpreting the injection as a SQL query&lt;/p&gt;

&lt;p&gt;2.try submitting an invalid query while still preserving valid SQL syntax&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wu3vyij4i5rbe0u51fd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wu3vyij4i5rbe0u51fd.png" alt=" " width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.verify that the users table exists&lt;/p&gt;

&lt;p&gt;4.test whether specific entries exist in a table&lt;/p&gt;

&lt;p&gt;5.determine how many characters are in the password of the administrator user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fye0pgd9im46azb9br3hi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fye0pgd9im46azb9br3hi.png" alt=" " width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.determine the password&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm6p719m1ekbd2lx5oce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm6p719m1ekbd2lx5oce.png" alt=" " width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdegmtdd70u9hgv9s6nlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdegmtdd70u9hgv9s6nlu.png" alt=" " width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – Blind SQL injection with conditional responses | PortSwigger Lab Note #8</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Wed, 11 Mar 2026 08:18:28 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-blind-sql-injection-with-conditional-responses-portswigger-lab-note-8-33lj</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-blind-sql-injection-with-conditional-responses-portswigger-lab-note-8-33lj</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab URL: &lt;br&gt;
&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-exploiting-blind-sql-injection-by-triggering-conditional-responses/sql-injection/blind/lab-conditional-responses" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-exploiting-blind-sql-injection-by-triggering-conditional-responses/sql-injection/blind/lab-conditional-responses&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools Used:  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Trigger conditional responses and check whether the word “Welcome” appears.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffee853yo0o00az2z2as.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffee853yo0o00az2z2as.png" alt=" " width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmvnbh3bk629w9tfb8sdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmvnbh3bk629w9tfb8sdk.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Verify that the condition is true, confirming that there is a table called users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rsehel3mr4cyjho9383.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rsehel3mr4cyjho9383.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Verify that the condition is true, confirming that there is a user called administrator&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3iwvhrnb8tw2ovvjcg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3iwvhrnb8tw2ovvjcg3.png" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Determine how many characters are in the password of the administrator user and send a series of follow-up values to test different password lengths&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0eys5i030if624ur6692.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0eys5i030if624ur6692.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuc7p1kg3xg4clodnfgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuc7p1kg3xg4clodnfgy.png" alt=" " width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.determine the password&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8kc4b77a5os2ce401nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8kc4b77a5os2ce401nf.png" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fja0mtolbws6ydc89p7q6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fja0mtolbws6ydc89p7q6.png" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fledbfkhmv07oggqixkc8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fledbfkhmv07oggqixkc8.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – listing the database contents on non-Oracle databases | PortSwigger Lab Note #7</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Tue, 10 Mar 2026 02:51:09 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-listing-the-database-contents-on-non-oracle-databases-portswigger-lab-note-7-28fe</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-listing-the-database-contents-on-non-oracle-databases-portswigger-lab-note-7-28fe</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab URL: &lt;br&gt;
&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-examining-the-database-in-sql-injection-attacks/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle#" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-examining-the-database-in-sql-injection-attacks/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle#&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools Used:  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SQL Injection&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application has a login function, and the database contains a table that holds usernames and passwords. You need to determine the name of this table and the columns it contains, then retrieve the contents of the table to obtain the username and password of all users.&lt;/p&gt;

&lt;p&gt;To solve the lab, log in as the administrator user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Determine the number of columns and which columns contain string data.&lt;/p&gt;

&lt;p&gt;2.retrieve the list of tables in the database&lt;/p&gt;

&lt;p&gt;3.Find the name of the table containing user credentials.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feis6irfg9isg3mwy6zey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feis6irfg9isg3mwy6zey.png" alt=" " width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.retrieve the details of the columns in the  table  vulnerable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl6lueoqooxsju9i38ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl6lueoqooxsju9i38ju.png" alt=" " width="800" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Find the names of the columns containing usernames and passwords&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1erc1qoul2lc52i98ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1erc1qoul2lc52i98ui.png" alt=" " width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.retrieve the usernames and passwords for all users&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uem5tz4i7h1i6f3se6r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uem5tz4i7h1i6f3se6r.png" alt=" " width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdizo8e54jo2os2o601al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdizo8e54jo2os2o601al.png" alt=" " width="800" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcqmjb01stk4eep9nq1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcqmjb01stk4eep9nq1a.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – querying the database type and version | PortSwigger Lab Note #6</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Tue, 10 Mar 2026 00:51:33 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-querying-the-database-type-and-version-portswigger-lab-note-6-1fji</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-querying-the-database-type-and-version-portswigger-lab-note-6-1fji</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-examining-the-database-in-sql-injection-attacks/sql-injection/examining-the-database/lab-querying-database-version-mysql-microsoft" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-examining-the-database-in-sql-injection-attacks/sql-injection/examining-the-database/lab-querying-database-version-mysql-microsoft&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Determine the number of columns and which columns contain string data.&lt;/p&gt;

&lt;p&gt;2.If the error-based payload fails, try changing the comment format.&lt;/p&gt;

&lt;p&gt;3.According to the cheat sheet, determine that the database version is &lt;br&gt;
MySQL, and note the space after the double dash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ktl2yb5vs3gd3l45m4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ktl2yb5vs3gd3l45m4x.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9diccei65lokouwer1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9diccei65lokouwer1k.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Solve the lab with the correct payload to disclose the MySQL version information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfsraj7zh2lik5r4s80w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfsraj7zh2lik5r4s80w.png" alt=" " width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj74royx56h368nziiooc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj74royx56h368nziiooc.png" alt=" " width="734" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xcc7uitwcpfm1i4t5vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xcc7uitwcpfm1i4t5vf.png" alt=" " width="800" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3akyld9dxs4iow0vv8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3akyld9dxs4iow0vv8c.png" alt=" " width="683" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – UNION attack, retrieving multiple values in a single column | PortSwigger Lab Note #5</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Tue, 10 Mar 2026 00:16:36 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-union-attack-retrieving-multiple-values-in-a-single-column-portswigger-lab-note-2mm</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-union-attack-retrieving-multiple-values-in-a-single-column-portswigger-lab-note-2mm</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-retrieving-multiple-values-within-a-single-column/sql-injection/union-attacks/lab-retrieve-multiple-values-in-single-column" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-retrieving-multiple-values-within-a-single-column/sql-injection/union-attacks/lab-retrieve-multiple-values-in-single-column&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SQL Injection&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve the lab, perform a SQL injection UNION attack that retrieves all usernames and passwords, and use the information to log in as the administrator user&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Determine the number of columns and which columns contain string data.&lt;/p&gt;

&lt;p&gt;'+UNION+SELECT+NULL,username||'~'||password+FROM+users--&lt;/p&gt;

&lt;p&gt;2.Modify the payload and send the request to the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7av8km7o68sz7qy8mg4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7av8km7o68sz7qy8mg4u.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.The username and password will be shown on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7o75xyj728m36wve7yz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7o75xyj728m36wve7yz.png" alt=" " width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – UNION attack, retrieving data from other tables | PortSwigger Lab Note #4</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Mon, 09 Mar 2026 13:20:40 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-union-attack-retrieving-data-from-other-tables-portswigger-lab-note-4-580c</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-union-attack-retrieving-data-from-other-tables-portswigger-lab-note-4-580c</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-using-a-sql-injection-union-attack-to-retrieve-interesting-data/sql-injection/union-attacks/lab-retrieve-data-from-other-tables" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-using-a-sql-injection-union-attack-to-retrieve-interesting-data/sql-injection/union-attacks/lab-retrieve-data-from-other-tables&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description: &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve the lab, perform a SQL injection UNION attack that retrieves all usernames and passwords, and use the information to log in as the administrator user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Using the technique mentioned in the last note, we can determine the number of columns returned by the query and which columns contain text data. Verify that the query returns two columns, both of which contain text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fum95y6s1j72oefsq712i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fum95y6s1j72oefsq712i.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Inject the payload, then obtain the password belonging to the administrator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx424yedjx2nwqdbffcb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx424yedjx2nwqdbffcb3.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx38z5zgcwtnvv03j99nv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx38z5zgcwtnvv03j99nv.png" alt=" " width="800" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries / prepared statements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use server‑side input validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Escape and sanitize user input&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;When you have determined the number of columns returned by the original query and found which columns can hold string data, you are in a position to retrieve interesting data&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SQL Injection – UNION attack | PortSwigger Lab Note #3</title>
      <dc:creator>Kenny Cipher</dc:creator>
      <pubDate>Mon, 09 Mar 2026 10:44:21 +0000</pubDate>
      <link>https://dev.to/kenny-cipher/sql-injection-union-attack-portswigger-lab-note-3-2d5</link>
      <guid>https://dev.to/kenny-cipher/sql-injection-union-attack-portswigger-lab-note-3-2d5</guid>
      <description>&lt;h2&gt;
  
  
  target：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lab URL: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-determining-the-number-of-columns-required/sql-injection/union-attacks/lab-determine-number-of-columns" rel="noopener noreferrer"&gt;https://portswigger.net/web-security/learning-paths/sql-injection/sql-injection-determining-the-number-of-columns-required/sql-injection/union-attacks/lab-determine-number-of-columns&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools Used:
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Burp suite&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vulnerability Summary：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Type:  SQL Injection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve the lab, determine the number of columns returned by the query by performing a SQL injection UNION attack &lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Exploit：
&lt;/h2&gt;

&lt;p&gt;1.Click any category to send a request to the server and check the query.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyy17do0au5us5xnuzqs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyy17do0au5us5xnuzqs.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Modify the parameter multiple times, then try to determine the number of columns returned by the query.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxohl93bdyn95tcfmhs1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxohl93bdyn95tcfmhs1s.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.If there are no errors, you have found the number of columns.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mbb5fat9ivr33sfnbvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mbb5fat9ivr33sfnbvn.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl7fyik5tmnve8q9960q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl7fyik5tmnve8q9960q.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Remediation：
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use parameterized queries (prepared statements) instead of dynamic SQL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply strict input validation on user-supplied data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use least-privileged database accounts to reduce impact.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned：
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fif41oow4m6annvh8eycm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fif41oow4m6annvh8eycm.png" alt=" " width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
