WEB滲透入門——XSS(基礎腳本解讀)

有朋友說我這代碼什麼的都有些太老了,看了下在用的OWASP的靶機,是2011年的了,有點老了。所以今天去找了下新的靶機。其實度娘搜【OWASP Broken Web Application 下載】可以找到2015版本下載的的,但是沒有拿過牆梯下得好慢,到我碼字現在才下不到一半。

OWASP TOP10 是每4年更新一次的。今年剛剛更新了2017版本的,所以下載的2015版本應該是目前最新的版本了。要用到今年的漏洞,估計要等到明年或者後年了。

不過OWASP TOP10 這幾年【SQL注入】【XSS】【CSRF】都是榜上有名的,了解原理方面上是不影響的。


今天文章的直接就從怎樣構造【XSS語句】來講吧,會涉及到【HTML標籤】【JavaScript方法】,就直接用例子糅合在一起講吧。

Advertisements

<script></script>標籤

【<script></script>】標籤是用來在【HTML頁面】裡面插入腳本的。在正常的網頁開發中,一般是這樣用的:

<script type="text/javascript"> <!--指定插入腳本的類型,這裡指定為【JavaScript】-->

document.write("hello world!")

</script>


<!-->是HTML的註釋符,意思是被【<!-- -->】包含在中間的語句都是註釋用的,不會顯示在頁面上。


我們就通過【<script></script>】標籤,在一些輸入框內,構造【XSS攻擊腳本語句】提交到伺服器上。在滲透測試中,一般我們只需要驗證是否存在【XSS漏洞】,所以是通過【alert】方法來出發彈窗。

Advertisements

<script>javascript=alert('/xss/')</script>

觸發彈窗

這樣就可以證明這裡是存在【XSS漏洞】的。

昨天我貼出了一些【中安全級別】【高安全級別】的PHP代碼,裡面就有對【<script></script>】標籤的過濾,所以現實環境中,這樣簡單的【XSS語句】幾乎沒有成功的希望的。


我把【中安全】的代碼貼出來大家看看

中安全級別

我們可以看到這樣一句過濾的話:

echo 'Hello ' . str_replace('<script>', '', $_GET['name']);

這句代碼的意思是把【<script>】替換為【『 』】空字元了。所以沒法通過上面給出的語句攻擊。

沒有觸發彈窗


對於這種情況,我們要怎麼處理呢?這裡只對【<script></script>】標籤進行了過濾,我們可以選擇其他的標籤進行攻擊。(其實這麼簡單的過濾規則形同虛設,在文末會放出最最簡單的繞過這個過濾的方式)

<img>標籤

【<img>】標籤是用於我們頁面載入圖片的。常規的用法如下:

<img src="/img/test.jpg" alt="測試用圖片" />

這個語句是獲取路徑為【/img/test.jpg】的圖片,【測試用圖片】是圖片的代替文本。

我們利用這個標籤構造很簡單的一個語句

<img src=1 onerre=alert('/xss/') >

這句代碼的意思是,載入路徑為【1】的圖片,如果失敗則執行【alert('/xss/') 】。

先來看看效果(在【中安全級別下】)

觸發彈窗

我們觀察一下截圖,可以看到【hello】後面,有一個載入失敗的圖片。那是因為我們指定的路徑【1】是不存在的,所以載入失敗。那麼當圖片載入失敗的時候,就會觸發【onerror】這個方法,成功的彈窗。

<iframe></ifarme>標籤

【<iframe></ifarme>】標籤是用在網頁嵌套上面的。比如說我想在網站內嵌套一個百度頁面,那麼代碼如下:

<iframe src=http://www.baidu.com width=600 height=300></iframe>

這段代碼的意思是,我們插入一個寬為600,高為300的框架,裡面數據來源於百度。

我們可以直接在靶機上看到效果

出現百度搜索

上面介紹的代碼也是一個完整的【XSS攻擊代碼】了。

高安全級別代碼

剛剛上文說到【中安全級別】的過濾方式是形同虛設的,那我們來看看高安全級別的代碼

高安全級別

這裡核心過濾代碼是:

echo 'Hello ' . htmlspecialchars($_GET['name']);

【htmlspecialchars】這個函數的作用是把預定義的字元轉換為 HTML 實體。就是相當於所有【&】【"】【'】【<】【>】都被轉化為實體了。只要正確使用這個函數基本上算是比較高安全的代碼了。嘗試攻擊的結果如下:

<script>標籤

<img>標籤


文末,我們來說一下【中安全級別】的最簡單的繞過方式:改變大小寫。

我們構造一個這樣個代碼:

<ScRipt>javascript=alert(/'xss/')</ScRipt>

就可以成功觸發彈框。頁面上出來的效果其實個其他也是一樣的,我們這裡從源碼入手看效果

沒有觸發成功的源碼

觸發成功的源碼

其實【XSS過濾】繞過的方式就是通過以下的三種方法

  • 大小寫

  • 轉換為字元編碼

  • 代碼混淆


明天我們講一下防禦思路吧,涉及到【cookie】【session】這兩個概念,放這裡應該放不下了。

好咧,今天就到這裡,我是剛入門的小白,每天堅持分享我的學習。

Advertisements

你可能會喜歡