0x00 原理

  xss全称为cross site scripting,中文为跨站脚本攻击。它允许web用户将恶意代码植入到提供给用户使用的页面。代码包括HTML代码和客户端脚本。

0x01 危害

  • 盗取用户账户(获取cookie)
  • 控制网页数据
  • 盗窃企业资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其他网站发起攻击

0x02 xss类别以及代码实现

0x02.1 反射型xss

  反射型xss也叫非持久性xss,是一种常见的xss漏洞,但是危害较小。

后端代码

<?php
highlight_file('reflect_xss.php');
$user=$_GET['user'];
echo $user;
?>

前端测试



可以看到我们的js代码被直接插入进了页面执行。



根据需求可以构造各种各样的js代码



因为没设置cookie 所以不弹cookie

0x02.2 存储型xss

  存储型xss也被称做持久型xss,存储xss是最危险的一种跨站脚本。它被服务器接收并储存,用户访问该网页,这段xss就会被读取出来到浏览器。

一般出现在留言板

后端代码(拆了dvwa的xss存储做测试)

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input
$message = stripslashes( $message );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); // Sanitize name input
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); // Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); //mysql_close();
} ?>

审计源码 我们可以发现,先检测了用户是否输入,然后对输入的名字和内容进行检测,最后将值插入到数据库中

前端测试



在当前页面刷新后,会重新进行sql查询,将查询到的结果返回到页面上。





所以可以通过这种方式去获取他人cookie,实现登录他人账号。

0x02.3 dom型xss

  dom型xss只发生在客户端处理数据阶段,可认为dom型xss就是出现在javascript中的漏洞。

前端代码

<html>
<head>
<title>aa</title>
</head>
<body>
<script>
var temp=document.URL;
var index=document.URL.indexOf("content=")+4;
var par=temp.substring(index);
document.write(decodeURI(par));
</script>
</body>
</html>

关键是script标签下的代码,因为用到了document.write 使得用户输入的代码被写入到了页面上。

前端测试



0x03 xss常见payload中用到的标签

<script>
<a>
<p>
<img>
<body>
<button>
<var>
<div>
<iframe>
<object>
<input>
<select>
<textarea>
<keygen>
<frameset>
<embed>
<svg>
<math>
<video>
<audio>
<style>

0x04 xss常见payload中用到的事件

onload
onunload
onchange
onsubmit
onreset
onselect
onblur
onfocus
onabort
onkeydown
onkeypress
onkeyup
onclick
ondbclick
onmouseover
onmousemove
onmouseout
onmouseup
onforminput
onformchange
ondrag
ondrop

0x05 xss常见payload中用到的属性

formaction
action
href
xlink:href
autofocus
src
content
data

0x06 xss绕过的一些技巧

属性与属性之间需要空格,而属性与标签之间可以不用

xss-代码角度理解与绕过filter的更多相关文章

  1. 从代码角度理解NNLM(A Neural Probabilistic Language Model)

    其框架结构如下所示: 可分为四 个部分: 词嵌入部分 输入 隐含层 输出层 我们要明确任务是通过一个文本序列(分词后的序列)去预测下一个字出现的概率,tensorflow代码如下: 参考:https: ...

  2. 创建HttpFilter与理解多个Filter代码的执行顺序

    1.自定义的HttpFilter,实现Filter接口 HttpFilter package com.aff.filter; import java.io.IOException; import ja ...

  3. 由浅入深讲解责任链模式,理解Tomcat的Filter过滤器

    本文将从简单的场景引入, 逐步优化, 最后给出具体的责任链设计模式实现. 场景引入 首先我们考虑这样一个场景: 论坛上用户要发帖子, 但是用户的想法是丰富多变的, 他们可能正常地发帖, 可能会在网页中 ...

  4. [Android] Android开发优化之——从代码角度进行优化

    通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就 ...

  5. XSS的简单过滤和绕过

    XSS的简单过滤和绕过 程序猿用一些函数将构成xss代码的一些关键字符给过滤了.但是,道高一尺魔高一丈,虽然过滤了,还是可以尝试进行过滤绕过,以达到XSS攻击的目的. 最简单的是输入<scrip ...

  6. 从源码角度理解Java设计模式——装饰者模式

    一.饰器者模式介绍 装饰者模式定义:在不改变原有对象的基础上附加功能,相比生成子类更灵活. 适用场景:动态的给一个对象添加或者撤销功能. 优点:可以不改变原有对象的情况下动态扩展功能,可以使扩展的多个 ...

  7. IL角度理解C#中字段,属性与方法的区别

    IL角度理解C#中字段,属性与方法的区别 1.字段,属性与方法的区别 字段的本质是变量,直接在类或者结构体中声明.类或者结构体中会有实例字段,静态字段等(静态字段可实现内存共享功能,比如数学上的pi就 ...

  8. IL角度理解for 与foreach的区别——迭代器模式

    IL角度理解for 与foreach的区别--迭代器模式 目录 IL角度理解for 与foreach的区别--迭代器模式 1 最常用的设计模式 1.1 背景 1.2 摘要 2 遍历元素 3 删除元素 ...

  9. es6 代码片段理解

    代码片段理解: [INCREMENT]: (state, action) => { const { payload: { id } } = action //because payload co ...

随机推荐

  1. Day11_52_将Set集合转换为List集合

    Set集合转换为List集合 ``` import java.util.*; public class SetReverseLsit { public static void main(String[ ...

  2. 测试工具PerfDog的使用

    使用操作:https://www.jianshu.com/p/cc04c710e643下载地址:https://perfdog.qq.com/

  3. 关于Snowflake 生成53位ID

    1, bug现象: 没有经过处理的Snowflake 生成的是64位bit的唯一ID,但由于多数时候我们前台用到js,但是js只支持53位bit的数值.这样就导致了传到前台的64位的丢失精度. 解决思 ...

  4. Python实现Paramiko的二次封装

    Paramiko是一个用于执行SSH命令的Python第三方库,使用该库可实现自动化运维的所有任务,如下是一些常用代码的封装方式,多数代码为半成品,只是敲代码时的备份副本防止丢失,仅供参考,目前本人巡 ...

  5. C#-播放器相关

    axWindowsMediaPlayer1.URL= 设置路径 axWindowsMediaPlayer1.Ctlcontrols.play();开始 axWindowsMediaPlayer1.Ct ...

  6. Linux DRBD 主节点(Primary) 故障恢复测试

    测试当主节点发生故障后,如何切换到备节点,当主节点恢复后,又是如何恢复双机数据同步的? 环境   DRBD linux VMware Workstation 9 步骤   1 模拟生产环境配置 1)环 ...

  7. 第四部分 数据搜索之使用HBASE的API实现条件查询

    因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...

  8. CCNA 第五章 变长子网掩码、汇总和TCP/IP故障排除

    1:VLSM:即变长子网掩码,使用长度不同的子网掩码将大型网络划分为众多子网,以满足不同类型的网络设计. 2:运行老式的路由器和例如:RIP V1协议的网络不能使用VLSM,因为它使用分类路由器选择. ...

  9. v-bind的使用

    v-bind v-bind的引入 ​ 内容的绑定可以通过mustache语法,而属性的绑定往往需要通过v-bind 如动态绑定img的src属性 如动态绑定div的class属性 如动态绑定li元素的 ...

  10. 简单介绍下自动化框架:Robot Framework

    一.简介: Robot Framework:Robot Framework是由Python编写的一款功能丰富并且扩展性强的自动化测试框架,也可以在Java和 .NET 上运行. HttpRunner: ...