前言
最后正在學習了解有關xss的知識。所以拿一些題來學習。從實戰中學習嘛。
OK,話不多說,整活!!!
實戰
今天我們用的是buu里的一道題)——XSS之光。聽着名字還蠻好聽的。
那我們先打開靶場。頁面顯示的就只是gungungun,真讓人火大。參考了一下大佬的文章
工具的安裝
首先還需要兩個工具。dirb掃描目錄(kali自帶)和githack
dirb使用方法:dirb
網址
githack是需要自己安裝的,本人在kali里安裝的。
安裝方法:git clone https://github.com/lijiejie/GitHack
使用方法:python GitHack.py 網址/.git,執行后會在本目錄生成以網址為名字的文件夾
解題
首先我們先掃描一下目錄,會發現.git泄露
那我們就用GitHack將源碼下載下來。
知識點
我們發現只有一個index.php。里面有一段代碼
<?php $a = $_GET['yds_is_so_beautiful']; echo unserialize($a); ?>
這里有一個知識點是_to string()
當對象被當作一個字符串使用時候調用時,會觸發:_to string()
__to String() 方法用於一個類被當成字符串時應怎樣回應。例如 echo $obj; 應該顯示些什么。此方法必須返回一個字符串
如何造成xss漏洞呢。我們來看,
<?php $a = unserialize($_GET['abc']); echo $a; ?>
exp:
<?php $a = new Error("<script>alert(1)</script>"); $b = serialize($a); echo urlencode($b); ?>
如果將exp傳入到源碼里去,這時它會彈出一個會話框顯示1(這里有點前端基礎的都會明白)。這時就會構成xss漏洞,
我們看exp里的Error類,Error類是php的一個內置類,用於自動自定義一個Error,在php7的環境下可能會造成一個xss漏洞,因為它內置有一個toString的方法。
此類適用於php7版本,同樣有等效的原生php類還有Exception,適用於PHP5、PHP7。用法與error是一樣的這里不在詳細說明。
題目
我們上面已經拿到源碼,源碼就只有一個反序列化過程。然后大佬的文章上面說的是。需要找到php內置類來進行反序列化,而且還有echo,
有了它我們就有足夠條件來使用_toString方法的類進行反序列化,我們使用Exception
就可以構造一小段代碼:
<?php $a = new Exception("<script>window.location.href='https://www.baidu.com'</script>"); echo urlencode(serialize($a)); ?>
這里的window.location.href= 是運用了xss跳轉
主要形成原因是 以前網站外部跳轉時是直接接受參數然后跳轉,導致了URL重定向漏洞.而現在網站喜歡加個跳轉頁,不會直接跳轉,而是接受參數然后用js跳轉. 這就有一個問題 如果未驗證參數, js跳轉時是可以接受js偽協議執行js代碼的.
跑一下這個腳本然后再抓包就可以在響應頭里面獲得flag
url解一下碼即可