【工具-DVWA】DVWA滲透系列十三:CSP Bypass

前言

DVWA安裝使用介紹,見:【工具-DVWA】DVWA的安裝和使用

本滲透系列包含最新DVWA的14個滲透測試樣例:

1.Brute Force(暴力破解)                    
2.Command Injection(命令注入)
3.CSRF(跨站請求僞造)                        
4.File Inclusion(文件包含)
5.File Upload(文件上傳)                    
6.Insecure CAPTCHA(不安全的驗證碼)
7.SQL Injection(SQL注入)                    
8.SQL Injection(Blind)(SQL盲注)
9.Weak Session IDs(有問題的會話ID)                
10.XSS(DOM)(DOM型xss)
11.XSS(ref)(反射型xss)                    
12.XSS(Stored)(存儲型xss)
13.CSP Bypass(Content Security Policy內容安全策略,旁路/繞過)    
14.JavaScript​​​​​​​

安全級別分低、中、高、安全四個級別來分析CSP Bypass的滲透測試過程。

1 基礎知識

  • CSP-Content Security Policy 

內容安全策略,以白名單的機制對網站加載或執行的資源起作用。在網頁中,這樣的策略通過 HTTP 頭信息或者 meta 元素定義。簡單理解就是,自定義放行腳本規則,感興趣可以去看:https://content-security-policy.com/

  • Bypass

旁路,也就是繞過CSP規則咯。

2 Low

2.1 滲透測試

  • 訪問,並輸入alert測試代碼,點擊raw,得到一個網址:

  • 輸入網址測試:出現彈框

2.2 源碼分析

發現:就是請求頭所定義的CSP規則,放行了多個來源網站

$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com  example.com code.jquery.com https://ssl.google-analytics.com ;";

3 Medium

3.1 滲透測試

  • 確認當前CSP規則:

  • 使用nonce值繞過:成功
<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

3.2 源碼分析

發現:添加了放行規則,包含nonce屬性值爲:TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

4 High

4.1 滲透測試

  • 觀察:沒有輸入框了,只有一個提交按鈕,提示說修改jsonp.php頁面,來執行你自己的代碼

  • 確認CSP級別:僅允許加載當前服務的js,好吧那就只有提示所說的路可走

  • 查看頁面源碼:發現表單內包含一個js文件

  • 點擊訪問:發現與提示中的php頁面相關的請求,且返回結果的answer字段,會注入到頁面中!

  • burpsuite攔截請求,查看:發現可被利用的參數只有一個callback

  • 改成alert(1),試試,額,居然就這麼成功了......
GET /DVWA-master/vulnerabilities/csp/source/jsonp.php?callback=alert(1) HTTP/1.1

4.2 源碼分析

jsonp.php:發現,居然把提交參數返回給前端了,人才!

<?php
header("Content-Type: application/json; charset=UTF-8");

if (array_key_exists ("callback", $_GET)) {
	$callback = $_GET['callback'];
} else {
	return "";
}

$outp = array ("answer" => "15");

echo $callback . "(".json_encode($outp).")";
?>

5 Impossible

源碼分析:

jsonp_impossible.php:不加入前端輸入,直接返回結果

<?php
header("Content-Type: application/json; charset=UTF-8");

$outp = array ("answer" => "15");

echo "solveSum (".json_encode($outp).")";
?>

6 總結

CSP,由於許多歷史原因,也就是程序允許前端執行各類非安全代碼(程序員的鍋麼?),但是沒有足夠精力去修改它,所以CSP在有的服務裏並沒有嚴格限制,則會存在被繞過的風險。

 

 

 

 


愛家人,愛生活,愛設計,愛編程,擁抱精彩人生!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章