我无法理解以下javascript的功能。把它带到实验室会议中甚至测试它(或者至少尝试过,因为它不像其他学生那样与我合作,它一直要求我登录并且从未显示欢迎信息)。实验室是关于XSS攻击的,导师告诉我们这个脚本可能被利用,我不知道怎么样?
不介意评论;我添加它们是为了帮助我理解跟踪代码
<html>
<head>
<title>Mobile code:: XSS cookie example </title>
<link rel="stylesheet" type="text/css" href="SecureM.css"/>
</head>
<body>
<script language="Javascript">
function checkCookie(){
//Here is the initialization of variables to be used for this function
var lf = "\n"; //character for next line (lf = line feed)
var CookieString = document.cookie; //cookies are accessible through the document.cookie property
var CookieSet = CookieString.split(';'); //This splits document.cookie on semicolons. CookieSet becomes an array containing all cookies that are set for this domain and path.
var SetSize = CookieSet.length;
var CookiePieces;
var ReturnValue=""; //set default empty return if no cookie found
var x = 0;
for (x = 0; ((x < SetSize) && (ReturnValue == "")); x++){
CookiePieces = CookieSet[x].split('=');
if (CookiePieces[0].substring(0,1) == ' ' ){
CookiePieces[0] =
CookiePieces[0].substring(1, CookiePieces[0].length);
} //end if statement
if (CookiePieces[0] == "superSecretPassword"){
ReturnValue = CookiePieces[1];
} //end if statement
} //end for loop
return ReturnValue;
} //end checkCookie() function
if (checkCookie() == ""){ // no cookie found, relocate to login.php
window.location.href="login.php";
}
</script>
<?
if (isset($_GET["username"])){
$cur_username = $_GET["username"];
}
else if (isset($_POST["username"])){
$cur_username = $_POST["username"];
}
else if (isset($_COOKIE["username"])){
$cur_username = $_COOKIE["username"];
}
else{
$cur_username = "No Name";
}
echo "<strong>LOGIN SUCCESSFULL!</strong><br/><br/>";
echo "<strong>Thank you, ".$cur_username." your information have been updated</strong>";
//
?>
</body>
</html>
无论如何,非常感谢帮助解释这一点。最后,我希望我的英语不是那么糟糕......
编辑:嗯,哇..为什么这会被投票......?请求帮助/解释是不是很糟糕?
答案 0 :(得分:1)
JavaScript无关紧要。该漏洞利用是通过PHP。
用户输入($_GET["username"]
和$_POST["username"]
):
答案 1 :(得分:0)
我想发布一个更多信息的答案,尽管昆汀在指出答案方面做得非常出色。
其中一些要求您确切了解$ _GET,$ _POST和$ _COOKIE超级全局变量的作用。以下是一些关于如何利用这些内容的示例,以及各自的含义。
$ _ GET:只要有人向您的页面发出HTTP GET请求,就会设置此超全局数组,然后在服务器端执行PHP。当PHP代码检查它时,它可以通过URL访问传递给它的参数,这通常是创建GET请求的方式。鉴于此处使用的PHP代码,所有恶意用户都必须输入URL(在他们的代码中)
http://yourvulnerablesite.com/?username=root'); 出口();
$ _ POST:每当有人向您的页面发出HTTP POST请求时,就会设置此超全局数组,然后PHP将被提供给服务器端。这可能不会像GET请求那样可能,因为它需要花费更多的精力来实现。它也不会那么有效,因为设置登录cookie的JavaScript可能无法运行。最简单的方法吗?一种浏览器扩展,允许使用指定的方法使用指定的参数进行任意HTTP请求,例如this one.
$ _ COOKIE:无论何时有人访问您的网站,都会设置此超全局阵列,并将其设置为用户对您网站的请求中检测到的所有Cookie,这些Cookie是同一个网站的网站。用户所要做的就是访问易受攻击的站点一次,或者使用适当的域创建cookie,然后输入用户名,例如root。当他们再次进入您的网站时,他们将以该用户身份登录,而不必转到http://myvulnerablesite.com
除了这些漏洞之外,还存在一些额外的问题,即始终相信用户实际上正在使用您的网站(因为练习是关于XSS,而不是网站的整体问题),但密码实际上从未被检查过,并且正如昆汀指出的那样,JavaScript完全无关紧要。由于未使用PHP检查密码,因此对于记录用户绝对没有任何意义。
我希望这能让您深入了解这里发生了什么。你好像理解了JavaScript,所以我不会过去那样:)