拿到一个项目主要是去看看,这个项目有没有一些过滤之类的组件。
假设没有找到类似的过滤组件,则去随机找几个点去看看是不是存在XSS,
假设随机找几个点都存在XSS的话,则整个框架几乎都存在了 、、这里和黑盒测试是一样的。
安全评审的话,在数据库查询的语句,尽量不要使“ * ”,采用最小化原则。
数据库查出来的类型,要和类使用的类型一致。
假设项目没有过滤,我们打的XSS的payload还没有弹框,一般有两个原因:
没有进行语句闭合
payload输出在一些自带转义效果的标签,比如:textarea标签
有时候在当前定义A方法的地方,打了断点没触发,可能是存在相同功能的B方法,
我们可以去找调用A方法的C方法,然后看看C调用的方法都在哪里,可能就找到定义的B方法。
打开项目,等待进度条跑完。这个不用数据库,但是得配置一下Tomcat,然后直接开启项目。
这里遇到一个问题,就是运行项目的适合提示:“ error = 13 , Permission deniedAT ”
直接“ chmod 777 catalina.sh ”
可以先看看路由,在WebRoot/WEB-INF/web.xml
找找访问的路径与后端的处理代码在哪(indexDeal.java)
测试1:
是没有经过任何安全处理,可以先提交一个发现弹框;然后打个断点,以debug模式启动,
在提交xss语句,看看是没有任何过滤,
测试2:有黑名单处理,
如果存在" "则返回“XXX ” 可以进行大小写绕过.
测试3:
有黑名单(且大小写)过滤,但是可以编码进行绕过。
测试4:
使用ESAPI进行转义,不存在绕过。
这个注意的是,
虽然浏览器的“检查”没有显示被转义,但是直接查看“网页源代码”就可以发现被转义了。
找到数据库配置文件
等在审计的时候发生无法登陆,从报错信息看是数据库没有链接上。
“ 'xx'@'localhost' (using password: YES) ”,然后我们直接去看看mysql数据库,
所以我们直接修改jdbc的配置文件即可,
这里一开始以为是“ my.xml ”中也存在一个JDBC文件,要修改这个文件,最后发现和这个文件没什么关系。
通过黑盒测试,发现管理员后端新增进货信息的地方存在XSS,
白盒看看为什么存在XSS,首页根据路由找到代码所在的地方,
进行调试,
然后刷新页面,代码直接运行到断点处,
当代码运行到第41行的时候,我们就可以得到刚刚添加到数据库的payload,
而且到了这个要输出的业务层,还是原生的JS语句,没有进行任何过滤处理。
然后直接放行程序,让payload直接展现在前端,引起弹窗。
如何判断一个项目是否存在全局XSS过滤?
直接全局搜索“XSS过滤” 、“XSSFilter”
找到类似的关键点,随便新增“XSS的payload语句”跟着走,看看是不是过滤。
这个暂时不在复现项目了,后续发现了在补上。
前端采用VUE 或者 react, angular框架,或者是后端代码对输入采用了XSSFilter机制过滤的话,
一般不会存在XSS注入漏洞。(VUE作为新型前端框架,采用预编译的技术解决了XSS的问题)
第一,对一些传入参数过过滤,推荐使用esapi直接进行编码,
这种的弊端就是很难对全部的接口参数都进行过滤且麻烦,更推荐第二种
第二,调用一个安全组件,然后对全局传入参数进行过滤。
这里对代码审计牵扯了两点:
~如何寻找一个项目是否存在过滤器 、、可以通过一些关键词
~如何给一个项目加全局过滤器,后续遇到在说吧。
XSS的修复一般分为两种:
黑名单 、、被无数次证明不安全
编码(转义) 、、推荐使用,具体如下:
这个用编码的,有一些坑点就是需要导入一些包,进而使用ESAPI编码函数。