JAVAweb网站代码审计
。JAVA web 网站代码审计入门本人还处于代码审计的初级阶段,此文章类似于编码规范,有啥建议,评论给我由于刚开始学代码审计的时候,就感觉一团代码,不知道从何下嘴。先从底层开始审计:底层漏洞:1. 查看该系统所用框架:Struts2的相关安全:(1) 低版本的 struts2 ,低版本的 Struts2 存在很多已知的版本漏洞。一经使用,很容易造成比较大的危害。(2) 开启 Struts2 的动态调用方法,现在发现的如 s2-033 ,s2-032 等漏洞,都是由于系统开启了动态调用方法,导致远程代码执行。(3) 在 jsp 页面中使用 Struts2 的 ognl 表达式传输数据。(4) 开启 Struts2 的 devMode,易造成远程代码执行(5) 存在 Struts2 本身自带的 ognl 页面(6) 使用 Struts2 自带的 redirect 等方法Spring 的相关安全:Spring 在 jsp 中使用 el 表达式时,注意 spring 的 boot 框架版本,因为有些低版本会存在远程命令执行。mybatis xml相关安全:在 SQL语句中,使用 $进行传参,导致 SQL注入;其他安全:在使用 java 自带的环境时,如 weblogic 或者 jboss ,请注意查看版本号,因为此类环境低版本,大部分包含 java 反序列化漏洞,导致远程代码执行;glassfish环境某些版本存在任意文件读取;2.查找 SQL注入:DAO:是否存在拼接的SQL语句如: String sql = "select * from user where id="+id;XML中:是否使用 $, 因为在 xml 中, #value# 此时 value 是以参数的形式插入进去, $value$ 此时 value 是以字符串的形式直接插入到 xml 中,会导致 sql 注入;<selectid="abdc"resultMap="result">select* from tb_card_binwhere card_length= #cardLength#and instr(bin_no, '$cardNoFirstNum$') = 1</select>3. 第三方控件漏洞。1。如: fckeditor, wordpress 等等。查找完底层漏洞后,查看系统中相应的 action 或者 do 方法。如果用的是 ssh 框架的话,这些方法的相关配置保存在 Struts2 的配置文件中。如果用的是 springmvc 框架的话,这些方法可能保存在applicationContext.xml( spring的配置文件),或者采用的是扫描注入的话,建议全局搜索RequestMapping 等注入路径的关键字来确定action方法所在。以下,以action方法为例:4. 文件上传漏洞文件上传的action有一个比较显著的特征:Spring MVC 默认支持两种文件上传操作方式。一种是使用MultipartHttpServletRequest或者 MultipartFile作为方法参数,第二种是使用javax.servlet.http.Part作为方法参数。代码举例:RequestMapping(value = "/accounting/voucher/importVoucher.htm", method = RequestMethod.POST)SuppressWarnings("unchecked")public String importBankGlide(RequestParam("voucherFile")MultipartFile voucherFile,RequestParam("returnFile")MultipartFilereturnFile,ServletRequestrequest,ModelMap model) if (voucherFile = null | voucherFile.getSize() < 1) String errorMessage = "导入文件为空 "model.put(ERROR_MESSAGE, errorMessage);return "/accounting/voucher/importVoucher"String extFile = ""if (returnFile.getSize() > 0) /并未对文件进行检查,直接上传File file = new File(model.get("path"); else model.put(ERROR_MESSAGE, "上传附件失败,请重新发起 :" + result.getResultMessage(); return "/accounting/voucher/importVoucher"文件上传存在的主要原因,一,未对文件名称进行检测直接上传;二,未对传入的文件内容进行检测直接上传;5. 远程命令执行在调用本机的shell,去运行特殊的命令时,没有对传入的参数进行检查,导致命令执行;Runtime.getRuntime().exec此方法用来执行shellcom.opensymphony.xwork2.ognl.OgnlValueStack的 protected Object findValue(String expr, Stringfield, String errorMsg)该方法是用来执行ognl 表达式。6. 远程代码执行第一,通过使用脚本引擎中的eval 去执行些特殊的东西,这种地方要着重去看,是否会有用户输入的变量传入。2。第二,通过反射来执行代码:Class c=Class.forName("com.wqx.test4.Test");/ 创建这个类的实例,前提是存在这个类,并且存在此种方法Object obj=c.newInstance();/ 通过 class 来取得这个方法对象 并且声明 这个类的参数类型java.lang.reflect.Method method=c.getMethod("sayhello", Class.forName("java.lang.String");/invoke来执行方法对象记得参数类型要跟这里的参数匹配method.invoke(obj, "wqx");7. 越权下载首先, fileName 是用户可以控制的,如下:String fileName ="././././1.xml"/此处为用户输入内容File file = new File("/Users/dly/Desktop/test2/src/main/webapp/upload/" + fileName); FileInputStream fileInputStream = new FileInputStream(file);BufferedReader buff= new BufferedReader(new InputStreamReader(fileInputStream); System.out.println(buff.readLine();此时, 1.xml 存在,会导致越权下载。8. 敏感信息泄漏第一,代码泄漏,.svn 的文件夹和git的文件夹中可能包含代码;第二, mac 中编程会自动生成.DS_Store 文件,其中可能包含敏感信息;第三,代码备份。9. 逻辑漏洞需要自己去结合传入数据的流程和基本业务去判断。最后说一句,有些神奇的人,会为了方便自己管理服务器,自己给自己写个webshell 。别笑这是非常可能的。3。欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书, 学习资料等等打造全网一站式需求。4