Java代码审计(6)XSS审计思路

文章目录

  • 0、前言
      • 0.1 XSS的审计思路
      • 0.2 补充一些知识
  • 1、反射型XSS审计
  • 2、存储型XSS审计
      • 2.1、搭建项目:
      • 2.2、审计
  • 3、存在过滤的XSS项目
  • 4、XSS的修复
      • 4.1、XSS的修复的主要分为两点:

0、前言

0.1 XSS的审计思路

拿到一个项目主要是去看看,这个项目有没有一些过滤之类的组件。

假设没有找到类似的过滤组件,则去随机找几个点去看看是不是存在XSS,

假设随机找几个点都存在XSS的话,则整个框架几乎都存在了		、、这里和黑盒测试是一样的。

0.2 补充一些知识

安全评审的话,在数据库查询的语句,尽量不要使“ * ”,采用最小化原则。

数据库查出来的类型,要和类使用的类型一致。

假设项目没有过滤,我们打的XSS的payload还没有弹框,一般有两个原因:

没有进行语句闭合

payload输出在一些自带转义效果的标签,比如:textarea标签
有时候在当前定义A方法的地方,打了断点没触发,可能是存在相同功能的B方法,

我们可以去找调用A方法的C方法,然后看看C调用的方法都在哪里,可能就找到定义的B方法。

1、反射型XSS审计

打开项目,等待进度条跑完。这个不用数据库,但是得配置一下Tomcat,然后直接开启项目。

这里遇到一个问题,就是运行项目的适合提示:“ error = 13 , Permission deniedAT ”

直接“ chmod 777 catalina.sh ”

Java代码审计(6)XSS审计思路_第1张图片

可以先看看路由,在WebRoot/WEB-INF/web.xml  
	
找找访问的路径与后端的处理代码在哪(indexDeal.java)

测试1:
	
	是没有经过任何安全处理,可以先提交一个发现弹框;然后打个断点,以debug模式启动,

	在提交xss语句,看看是没有任何过滤,

测试2:有黑名单处理,		
		
	  如果存在"    "则返回“XXX ”   	可以进行大小写绕过.

测试3:
	
	  有黑名单(且大小写)过滤,但是可以编码进行绕过。

测试4:
		
	  使用ESAPI进行转义,不存在绕过。

这个注意的是,

虽然浏览器的“检查”没有显示被转义,但是直接查看“网页源代码”就可以发现被转义了。

Java代码审计(6)XSS审计思路_第2张图片
Java代码审计(6)XSS审计思路_第3张图片

2、存储型XSS审计

2.1、搭建项目:

找到数据库配置文件

Java代码审计(6)XSS审计思路_第4张图片

Java代码审计(6)XSS审计思路_第5张图片
等在审计的时候发生无法登陆,从报错信息看是数据库没有链接上。

“  'xx'@'localhost' (using password: YES)   ”,然后我们直接去看看mysql数据库,

Java代码审计(6)XSS审计思路_第6张图片

所以我们直接修改jdbc的配置文件即可,

Java代码审计(6)XSS审计思路_第7张图片

这里一开始以为是“ my.xml ”中也存在一个JDBC文件,要修改这个文件,最后发现和这个文件没什么关系。

2.2、审计

通过黑盒测试,发现管理员后端新增进货信息的地方存在XSS,

Java代码审计(6)XSS审计思路_第8张图片

白盒看看为什么存在XSS,首页根据路由找到代码所在的地方,

进行调试,

然后刷新页面,代码直接运行到断点处,

Java代码审计(6)XSS审计思路_第9张图片

当代码运行到第41行的时候,我们就可以得到刚刚添加到数据库的payload,

而且到了这个要输出的业务层,还是原生的JS语句,没有进行任何过滤处理。

然后直接放行程序,让payload直接展现在前端,引起弹窗。

Java代码审计(6)XSS审计思路_第10张图片

3、存在过滤的XSS项目

如何判断一个项目是否存在全局XSS过滤?

直接全局搜索“XSS过滤” 、“XSSFilter”

找到类似的关键点,随便新增“XSS的payload语句”跟着走,看看是不是过滤。

这个暂时不在复现项目了,后续发现了在补上。

4、XSS的修复

前端采用VUE 或者 react, angular框架,或者是后端代码对输入采用了XSSFilter机制过滤的话,

一般不会存在XSS注入漏洞。(VUE作为新型前端框架,采用预编译的技术解决了XSS的问题)

4.1、XSS的修复的主要分为两点:

  • 第一,对一些传入参数过过滤,推荐使用esapi直接进行编码,

    	这种的弊端就是很难对全部的接口参数都进行过滤且麻烦,更推荐第二种
    
  • 第二,调用一个安全组件,然后对全局传入参数进行过滤。

      这里对代码审计牵扯了两点:
      	
      		~如何寻找一个项目是否存在过滤器		、、可以通过一些关键词
      		
      		~如何给一个项目加全局过滤器,后续遇到在说吧。
    
  • XSS的修复一般分为两种:

      黑名单			、、被无数次证明不安全
    
      编码(转义)		、、推荐使用,具体如下:
    

这个用编码的,有一些坑点就是需要导入一些包,进而使用ESAPI编码函数。

比如上边“ 反射型XSS审计 ”内的“ 测试4 ”。
Java代码审计(6)XSS审计思路_第11张图片

你可能感兴趣的:(代码审计,java,xss,前端)