往期博文:
DVWA靶场-Brute Force Source 暴力破解
DVWA靶场-Command Injection 命令注入
DVWA靶场-CSRF 跨站请求伪造
DVWA靶场-File Inclusion 文件包含
DVWA靶场-File Upload 文件上传
DVWA靶场-SQL Injection SQL注入
DVWA靶场-Weak Session IDs 脆弱的Session
DVWA靶场-XSS(DOM型、反射型、存储型)
靶场环境搭建
https://github.com/ethicalhack3r/DVWA
[网络安全学习篇附]:DVWA 靶场搭建
目录
Content Security Policy (CSP) Bypass
Low CSP
核心代码
Medium CSP
核心代码
High CSP
核心代码
impossible CSP
";
}
$page[ 'body' ] .= '
';
?>
分析代码,发现允许的白名单网址有 self https://pastebin.com example.com code.jquery.com https://ssl.google-analytics.com
这里作者也是给出了题解的
# https://pastebin.com/raw/R570EE00
其中 https://pastebin.com 是一个快速文本分享网站
我们可以在里面写入攻击代码
创建成功后,点击raw
生成攻击页面
将这个网址输入到文本框中,点击include 包含这个文本进来,成功弹框
查看源代码,发现这个网址已经被包含到进来了
我们可以结合CSRF 攻击更加自动化
本地服务器新建一个攻击网页,csp_csrf.html
使用社工等手段,诱使用户点击该网站链接,即可攻击成功
alert(1)
?>
Whatever you enter here gets dropped directly into the page, see if you can get an alert box to pop up.
';
?>
看到大佬的WP 说script-src这里还设置了特殊值
unsafe-inline:允许执行页面内嵌的
The page makes a call to ' . DVWA_WEB_PAGE_TO_ROOT . '/vulnerabilities/csp/source/jsonp.php to load some code. Modify that page to run your own code.
1+2+3+4+5=
';
?>
这里的CSP过滤规则 就比较恶心了,只允许加载self 也就是本页面的脚本
我们跟进去查看这个页面的源代码
//会生成一个script 标签
function clickButton() {
var s = document.createElement("script");
s.src = "source/jsonp.php?callback=solveSum";
document.body.appendChild(s);
}
function solveSum(obj) {
if ("answer" in obj) {
document.getElementById("answer").innerHTML = obj['answer'];
}
}
//监听到solve 按钮,就会调用clickButton() 函数
var solve_button = document.getElementById ("solve");
if (solve_button) {
solve_button.addEventListener("click", function() {
clickButton();
});
}
分析代码,可使用攻击post请求提交参数,具体攻击方法如下
核心代码
Unlike the high level, this does a JSONP call but does not use a callback, instead it hardcodes the function to call.
The CSP settings only allow external JavaScript on the local server and no inline code.
1+2+3+4+5=
';
function clickButton() {
var s = document.createElement("script");
s.src = "source/jsonp_impossible.php";
document.body.appendChild(s);
}
function solveSum(obj) {
if ("answer" in obj) {
document.getElementById("answer").innerHTML = obj['answer'];
}
}
var solve_button = document.getElementById ("solve");
if (solve_button) {
solve_button.addEventListener("click", function() {
clickButton();
});
}
防范很到位
https://www.sqlsec.com/2020/05/dvwa.html#toc-heading-31
https://www.freebuf.com/articles/web/119467.html