1.介绍
最近写了个小玩意儿,主要功能为用户信息管理,例如新增 删除 添加等。但在没写过滤之前,全是xss
所以拿出来给大家进行简单分析,后续通过动态代理进行过滤。
2.代码分析
这里就只分析用户添加的页面了,可以看到在未做任何过滤的情况触发XSS
![1635318350_6178fa4ee99b3f091a9f8.png!small](https://img-blog.csdnimg.cn/img_convert/9dac083179eaf877bfcf27ada8f54b55.jpeg)
在add.jsp页面发现了Servlet
![1635318472_6178fac8ae1c09d174c75.png!small](https://img-blog.csdnimg.cn/img_convert/643724066b7447b569b29d2c5d41b580.jpeg)
之后跟进该Servlet,通过获取用户输入进行发送到Service,Service在发送到Dao进行处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-15nqFJFM-1691635152462)(https://image.3001.net/images/20211027/1635318628_6178fb649bf28522ac167.png!small)]
Dao层用的是JDBCtemplate实现,经过测试发现如果使用PreparedStatement连接数据库的话,PreparedStatement会过滤掉常见的XSS代码
<script>alert(xss)</script><img src=x onerror=alert(1) />...
但是PreparedStatement过滤一般常用的确实可以,但是鸡肋一点的话,就很轻松绕过了。
<input onmouseover=alert(1)>//鸡肋点的语句...
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ue0fj33-1691635152466)(https://image.3001.net/images/20211027/1635318694_6178fba608924b8a0c10a.png!small)]
在AddServlet可以看到,最后进行了重定向,而ListUser就是首页
resp.sendRedirect(“/Students/ListUser”);
跟进AddServlet之后,可以发现该Servlet执行了findALL(),该方法其实就是service层–>Dao层的查询全部用户信息。并存储到了list中。之后设置setAttribute之后进行了请求转发到list.jsp
![1635319082_6178fd2a726f07e6959ae.png!small](https://img-blog.csdnimg.cn/img_convert/42aa8ae09eb422a1399e3dc97c56571f.jpeg)
跟进list.jsp之后,可以发现将用户的信息使用JSTL遍历出并显示。全程毫无过滤。
![1635319234_6178fdc270c2c1841e74d.png!small](https://img-blog.csdnimg.cn/img_convert/f872cbcd509bd0e6645be1fe8048c5db.jpeg)
3.Filter动态代理过滤
这里本人简单写了一下过滤。只过滤了< >标签。后续可以根据自己需求进行改进。
写的很简单,就不多说了。
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ServletRequest servlet = (ServletRequest)Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(method.getName().equals("getParameter")){
String value = (String)method.invoke(servletRequest,args);//获取输入的value
value = value.replaceAll(">","*");//将值替换
value = value.replaceAll("<","*");
return value;
}else{
System.out.println("没有匹配成功");
}
return method.invoke(servletRequest,args);
}
});
filterChain.doFilter(servlet,servletResponse);
}
@Override
public void destroy() {
}
}
之后可以发现过滤成功
![1635319548_6178fefc21929ae6af153.png!small?1635319561465](https://img-blog.csdnimg.cn/img_convert/ed3726a802c20f2b6cfa467e512b96d2.jpeg)
roy() {
}
}
之后可以发现过滤成功
[外链图片转存中…(img-0Mrfgap9-1691635152475)]
网络安全学习路线
这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jmGgmIWr-1691635152477)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
阶段一:基础入门
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p00lxHqK-1691635152479)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
网络安全导论
渗透测试基础
网络基础
操作系统基础
Web安全基础
数据库基础
编程基础
CTF基础
该阶段学完即可年薪15w+
阶段二:技术进阶(到了这一步你才算入门)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAKMxQgp-1691635152481)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
弱口令与口令爆破
XSS漏洞
CSRF漏洞
SSRF漏洞
XXE漏洞
SQL注入
任意文件操作漏洞
业务逻辑漏洞
该阶段学完年薪25w+
阶段三:高阶提升
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EP6FUamR-1691635152483)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
反序列化漏洞
RCE
综合靶场实操项目
内网渗透
流量分析
日志分析
恶意代码分析
应急响应
实战训练
该阶段学完即可年薪30w+
阶段四:蓝队课程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AORk2GVK-1691635152485)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
蓝队基础
蓝队进阶
该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。
攻防兼备,年薪收入可以达到40w+
阶段五:面试指南&阶段六:升级内容
![img](https://img-blog.csdnimg.cn/img_convert/3b653137f34ce068817347b444447b6c.png)
需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)