CSRF-跨站請求偽造
舊版本設備被測驗出來的csrf漏洞,跨站請求偽造,一直沒明白什么意思,趁著版本還沒有修復,正好可以將這個問題復現一下,清楚下整個程序和防護的手段,但是通過什么樣的方式去達到實際攻擊的效果還是沒能想通,達到這樣的攻擊的前提是獲取到有效的cookie或者是請求的發送是在用戶的同一個瀏覽器,那么只要頁面的關閉和賬號的退出未導致cookie失效,那么也能攻擊
實際上是利用被攻擊人有效的cookie,進行請求的偽造提交資料,那么得不到用戶的cookie可以想辦法他使用的瀏覽器發送請求,那么很可能就自帶了有效的cookie,為了避免這種情況
驗證請求頭中的Origin,Origin中的欄位確認來源域名就可以,來源不對那么就是一個不合法地方發送的請求,所以服務器拒絕
Referer存在,也可以用來確認HTTP請求的來源地址,來源不對也是不合法,當然這種http請求的headers是很容易隨便偽造的,基本沒用
比較有效的方式,添加csrf_token值,每次頁面的重繪出一個新的token,每次資料提交或者重要操作時,必須使用這個值作為引數提交,或者是在http請求頭中提交,由于token每次訪問后值會變化,所以偽造請求時不容易偽造出這個值,只有正常訪問時才能得到服務器回應的正確token
1.服務器回應token給前端
2.前端使用這個token發請求
3.服務器收到token校驗合法性和有效性
Origin和Referer的校驗
先抓取一個添加規則的請求(舊版本存在token但是沒校驗)

右鍵生成一個csrf-poc,使用瀏覽器打開

由于規則名會重復導致加不進去所以修改一個名稱,點擊瀏覽器測驗,粘貼到當前抓包的瀏覽器(一定要同一個瀏覽器,因為登陸過有cookie資訊),然后關閉brupsuite的攔截請求

可以看到一個提交按鈕,就是發送請求,提交剛剛那些資料,但是此時的Origin和Referer來源不對,進行了校驗,所以加不進去的


所以我們去除這兩處,再重發資料包

查看添加的資訊,添加成功,說明headers中其實缺少了這兩個引數也沒關系,但是不能錯了,服務器則沒有對這兩個資訊做缺少的校驗,缺少應當允許提交的

Token的校驗
使用另外一種本地打開的方式測驗,復制生成的html

寫入到本地檔案csrf.html,這次我們添加的是110.110.110.110地址,tokenid雖然存在但是未校驗就等于沒有用
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://10.6.8.250/hosts/add_obj" method="POST">
<input type="hidden" name="tokenid" value="c1876784917265bd111728dbb4a03108" />
<input type="hidden" name="ip" value="110.110.0.110/0" />
<input type="hidden" name="action" value="1" />
<input type="hidden" name="remark" value="" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
點擊submit,這次添加由于是本地打開的檔案,所以沒有Origin和Referer,一就添加成功了


當前測驗均是存在漏洞的時候,這個值沒有做校驗,如果做了校驗,服務器回傳的新的token值,那么不會隨意被偽造出來也就不會隨意提交資料了
關注“碼點小干貨”公眾號,一起分享一起交流各類資訊技術和工具資源
愿你眼中總有光芒! - 愿你活成想要的樣子!
公眾號回復burpsutie 獲取軟體,方便抓取資料包,重放資料包

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/92409.html
標籤:其他
上一篇:請問大神,如何查看一個條sql陳述句在DB2中的執行時間點
下一篇:困擾了很久的模糊查詢問題
