预编译不是万能的,否则就不会出现这么多的SQL注入漏洞。order by后面的语句,是不能够用预编译进行处理的,只能通过拼接进行操作,因此需要手动过滤。
SQL注入漏洞的防范方法:
1、预编译
2、类型转换
xss漏洞的危害:
窃取Cookie,键盘记录,截屏,网页挂马,命令执行
xss漏洞产生的原因:
用户的输入没有经过处理便直接进行了输出
目录穿越漏洞简介
Web应用程序没有去检验文件名中是否存在“…/”等特殊字符,没有对访问的文件进行限制,导致目录穿越,读取到本不应读取到的内容
目录穿越漏洞的修复方法
对文件名进行过滤,防止出现“./”等特殊符号;采用ID索引的方法来下载文件,而不是直接通过文件名;对目录进行限制;合理配置权限
URL跳转漏洞简介
目前很多的Web应用因为业务需要,需与内部的其他服务或者第三方的服务进行交互,这样就需要重定向的功能,由当前网页跳转到第三方的网页
重定向函数在代码当中就有,不需要我们自己添加,而且URL跳转的漏洞是出现在具有URL跳转功能的代码当中
命令执行漏洞简介
命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如果系统命令代码未对用户可控参数做过滤,则当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞的危害
继承Web服务程序的权限去执行系统命令或读/写文件,反弹shell,控制整个网站甚至控制服务器,进一步实现内网渗透
执行系统命令的函数
在PHP开发语言中有system()、exec()、shell_exec()、eval()、passthru()等函数可以执行系统命令。在Java开发语言中可以执行系统命令的函数有Runtime.getRuntime.exec和ProcessBuilder.start,其中,Runtime.getRuntime.exec是在Java1.5之前提供的,Java1.5之后则提供了ProcessBuilder类来构建进程可以通过”;“进行命令的拼接,将ping和id两个命令给合在一起
XXE漏洞的简介
当应用程序在解析XML输入时,在没有禁止外部实体的加载而导致加载了外部文件及代码时,就会造成XXE漏洞。
XXE漏洞的危害
任意文件读取、内网探测、攻击内网站点、命令执行、DOS攻击等
SSRF漏洞定义
SSRF漏洞通常出现在社交分享、远程图片加载或下载、图片或文章收藏、转码、通过网址在线翻译、网站采集、从远程服务器请求资源等功能点处
SSRF漏洞的危害
(1)获取内网主机、端口和banner信息。
(2)对内网的应用程序进行攻击,例如Redis、jboss等。
(3)利用file协议读取文件。
(4)可以攻击内网程序造成溢出。
SSRF漏洞URL中常出现url、f、file、page等参数。SSRF会使用HTTP请求远程地址,因此代码审计时我们要特别留意能够发起HTTP请求的类及函数。
Java反序列化漏洞
Java是面向对象编程的,当你想把某个对象存储起来以便长期使用时,便需要用到Java反序列化。最常见的反序列化情况便是服务器的SESSION,当有大量用户并发访问,就有可能出现庞大数量的SESSION对象,内存显然不够用,于是Web容器便会将SESSION先序列化到硬盘中,等需要使用时,再将保存在硬盘中的对象还原到内存中,这个存储再拿出来的过程便是序列化和反序列化的过程
序列化和反序列化
一般来说,把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
Java反序列化漏洞的危害
Java反序列化漏洞一般有以下几种危害
任意代码执行,获取SHELL,对服务器进行破坏
SSTI漏洞的危害
任意代码执行,获取SHELL,破坏服务器完整性等
在Java中常见的模板引擎
XMLTemplate、Velocity、CommonTemplate、FreeMarker、Smarty4j、TemplateEngine等
Spring MVC框架
(1)模型:一个或多个JavaBean对象,用于存储数据(实体模型由JavaBean类创建)和处理业务逻辑(业务模型由一般的Java类创建)。
(2)视图:一个或多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean标记来显示数据。
(3)控制器:一个或多个Servlet对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将处理结果存放到实体模型JavaBean中,输出给视图显示。
JAVA代码审计实战
在实际项目中可以使用奇安信代码卫士或者fortify这类自动审计工具来进行快速审计。当然这种方法审计出来的漏洞并不是很全且存在极高的误报率,因此最好是将其作为一个辅助工具用来快速地发现某些明显的漏洞,而其他的漏洞还是需要自己对源码进行通读或回溯功能点的方法来发现