失效的会话认证以及Session管理。
跟踪unlock_secret()
方法,很简单的逻辑
function unlock_secret()
{
var bWAPP = "bash update killed my shells!"
var a = bWAPP.charAt(0); var d = bWAPP.charAt(3); var r = bWAPP.charAt(16);
var b = bWAPP.charAt(1); var e = bWAPP.charAt(4); var j = bWAPP.charAt(9);
var c = bWAPP.charAt(2); var f = bWAPP.charAt(5); var g = bWAPP.charAt(4);
var j = bWAPP.charAt(9); var h = bWAPP.charAt(6); var l = bWAPP.charAt(11);
var g = bWAPP.charAt(4); var i = bWAPP.charAt(7); var x = bWAPP.charAt(4);
var l = bWAPP.charAt(11); var p = bWAPP.charAt(23); var m = bWAPP.charAt(4);
var s = bWAPP.charAt(17); var k = bWAPP.charAt(10); var d = bWAPP.charAt(23);
var t = bWAPP.charAt(2); var n = bWAPP.charAt(12); var e = bWAPP.charAt(4);
var a = bWAPP.charAt(1); var o = bWAPP.charAt(13); var f = bWAPP.charAt(5);
var b = bWAPP.charAt(1); var q = bWAPP.charAt(15); var h = bWAPP.charAt(9);
var c = bWAPP.charAt(2); var h = bWAPP.charAt(2); var i = bWAPP.charAt(7);
var j = bWAPP.charAt(5); var i = bWAPP.charAt(7); var y = bWAPP.charAt(22);
var g = bWAPP.charAt(1); var p = bWAPP.charAt(4); var p = bWAPP.charAt(28);
var l = bWAPP.charAt(11); var k = bWAPP.charAt(14);
var q = bWAPP.charAt(12); var n = bWAPP.charAt(12);
var m = bWAPP.charAt(4); var o = bWAPP.charAt(19);
var secret = (d + "" + j + "" + k + "" + q + "" + x + "" + t + "" +o + "" + g + "" + h + "" + d + "" + p);
if(document.forms[0].passphrase.value == secret)
{
// Unlocked
location.href="/bwapp/ba_insecure_login_2.php?secret=" + secret;
}
else
{
// Locked
location.href="/bwapp/ba_insecure_login_2.php?secret=";
}
源码
// Retrieves the LDAP connection settings
$login = $_SESSION["ldap"]["login"];
$password = $_SESSION["ldap"]["password"];
$server = $_SESSION["ldap"]["server"];
$dn = $_SESSION["ldap"]["dn"];
if(isset($_POST["form"]))
{
if($_POST["login"] == $login && $_POST["password"] == $password)
{
$message = "Successful login!";
}
else
{
$message = "Invalid credentials!";
}
}
这里使用了LDAP访问协议。
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。
这里的题目初看起来很奇怪,但是很容易理解为什么这样设计:第一个题目就是初学者最初设计的登录方法,只要输入的账户密码和后台中自己的预设值相同即可成功登录,这种方法容易被爆破,很不安全。第二个题目是将后台的验证方法暴露了出来。
这个,能猜到大概是直接用了重定向,再点click后再进入例如http://localhost/bwapp/portal.php
的网页,很容易发现确实没有注销我们的cookie。源码中也验证了这一点。
<div id="main">
<h1>Broken Auth. - Logout Managementh1>
<p>Click <a href="ba_logout_1.php" onclick="return confirm('Are you sure?');">herea> to logout.p>
div>
进入ba_logout_1.php
后销毁了cookie,安全
switch($_COOKIE["security_level"])
{
case "0" :
// Do nothing
break;
case "1" :
// Destroys the session
session_destroy();
break;
不是很懂是什么意思,大概是直接爆破?
if(isset($_POST["form"]))
{
if($_POST["login"] == $login && $_POST["password"] == $password)
{
$message = "Successful login!";
}
else
{
$message = "Invalid credentials! Did you forgot your password?";
}
}
使用验证码
if(isset($_SESSION["captcha"]) && ($_POST["captcha_user"] == $_SESSION["captcha"]))
HINT: check the URL…
http://localhost/bwapp/smgmt_admin_portal.php?admin=0
edit admin=0
to admin=1
HINT: check the cookies…
edit admin=0
to admin=1
You need to creat a new user to replace bee/bug, or it will be not worked.
// Sets a cookie 'admin' when there is no cookie detected
setcookie("admin", "0", time()+300, "/", "", false, false);
header("Location: " . $_SERVER["SCRIPT_NAME"]);
You need to creat a new user to replace bee/bug, or it will be not worked.
密码直接打印出来
// Security level LOW
// Prints the secret
// Security level MEDIUM
// Mails the secret
// Security level HIGH
// Mails a reset code
这里的四个题目都与cookie属性设置有关,下面是cookie的属性说明。
name字段为一个cookie的名称。
value字段为一个cookie的值。
domain字段为可以访问此cookie的域名。
非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。
顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。
二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。
顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。
path字段为可以访问此cookie的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此cookie。
expires/Max-Age 字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。
Size字段 此cookie大小。
若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过JS来访问此cookie。
secure 字段 设置是否只能通过https来传递此条cookie