前言
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 滲透測試
- 確認當前CSP規則:發現放行的幾個網站,選一個試試:https://pastebin.com
- 訪問,並輸入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規則:
- 訪問https://content-security-policy.com/,確認CSP規則含義:script中添加屬性norce值,即可放行
- 使用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在有的服務裏並沒有嚴格限制,則會存在被繞過的風險。
愛家人,愛生活,愛設計,愛編程,擁抱精彩人生!