java代码审计
定义:一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析
如何做代码审计的
手工和工具相结合的方式
工具:Fortify SCA
手工
1.敏感函数
①命令执行函数(Runtime.getRuntime()、.exec()、start()、ProcessBuilder())等
②文件上传函数(ServletFileUpload()、FileItemStream()、MultipartFile())等
③SSRF函数(一类只支持http,https协议,如HttpURLConnection、HttpClient、Request、okhttp。一类支持所有协议如URLConnection、URL。)
④CORS跨域漏洞(*设置任何域都能访问)
CORS跨域设置(response.setHeader(“Access-Control-Allow-Origin”,"*");response.setHeader(“Access-Control-Allow-Credentials”,“true”);)
⑤Jsonp劫持(*设置任何域都能访问)
jsonp跨域设置
response.setHeader(“Access-Control-Allow-Origin”,"*");
callback
⑥反序列化
readObject方法
⑦XSS漏洞
当out.print("");可控的时候,就会导致XSS漏洞。
Requests
Response
Session
⑧session失效时间问题
session.setMaxInactiveInterval();
⑨用户退出,session未销毁问题
session.invalidate(); //销毁所有的Web应用
sessionsession.removeAttribute(); //移除指定的Web应用
sessionapplication
pageContent
⑩sql注入$
2.查找可控变量,正向追踪变量传递过程(就是看这些变量会不会暴露给前端等问题,比如用户查询个人信息把id,密码等一些敏感信息直接暴露给前端)
常见的可操控变量:name、id、password、pwd、select、search等。
3. 寻找敏感功能点,通读功能点代码
①. 文件上传功能
若后端程序没有严格地限制上传文件的格式,导致可以直接上传或者存在绕过的情况,除了文件上传漏洞。
还有可能发生sql注入漏洞。因为程序员一般不会注意到对文件名进行过滤,但有需要把文件名存入到数据库内。
或者上传图片可以直接使用远程的链接,可能存在ssrf
②文件管理功能
如果程序将文件名把或者文件路径直接在参数中传递,则很有可能存在任意文件操作的漏洞。
还有可能发生xss漏洞,。程序会在页面中国输出文件名,而通常会疏忽对文件名的过滤,导致可能在数据库中存入带有尖括号等特殊 符号的文件名,最后显示在页面上的时候就会被执行。
③登录认证功能
登陆功能不是指一个登录过程,而是整个操作过程中的认证。
目前的认证方式大多是基于Cookie和Session。
如果Cookie信息没有加salt一类的东西,就有可能导致任意用户登录漏洞,只要知道用户的部分信息,即可生成认证令牌
④找回密码功能
找回密码虽然无法危害到服务器安全,但是可以重置管理员密码,也可以间接控制业务权限甚至拿到服务器权限。
4.通读全文代码
①配置文件(application.xml,yml等,pom.xml)了解这个项目是什么架构的,ssm,还是spring boot,还是微服务,pom.xml中看又没有低版本的组件有历史遗留漏洞(比如struts2,shiro,FastJson等),最高效的方法是去gitub下个检测工具(比如struts检测)
②安全过滤文件
常见命名:filter、safe、check
这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他则相对少见。
③函数集文件
常见命名:fuctions、common
这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到其他文件。
寻找这些文件一个比较好用的技巧是打开index.php或者一些功能性文件,在头部一般都能找到
参考链接:https://blog.csdn.net/qq_51577576/article/details/121985574
补充:什么是静态测试
静态测试是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,找出程序中存在的风险,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
本文来自博客园,作者:lzstar-A2,转载请注明原文链接:https://www.cnblogs.com/lzstar/p/15399235.html
作 者:lzstar-A2
出 处:https://www.cnblogs.com/lzstar/
关于作者:一名java转安全的在校大学生
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注安全学习交流群菜鸟联盟(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯可乐以资鼓励,您的肯定将是我最大的动力。thx.
菜鸟联盟(IThonest),一个可能会有故事的qq群,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!