漏洞审计

SQL注入

SQL 注入一般 fortify 都能扫描出来,手动审计一般直接搜索 select、update、delete、insert 关键词就会有收获如果 sql 语句中有出现 + append、 $() # 等字眼,如果没有配置 SQL 过滤文件,则判断存在 SQL 注入漏洞。

当找到某个变量关键词有 SQL 注入漏洞时,还可以直接全局搜索那个关键词找出类似漏洞的文件,比如涉及SQL 注入漏洞的参数等等

!!注意全局过滤变量的引入

框架注入漏洞

像Struts2 远程代码执行漏洞这样的漏洞

查看 struts 插件的版本信息是否为漏洞版本

代码执行

代码执行说的是可执行的脚本代码,命令执行就是可以执行系统命令(cmd)或者是应用指令(bash),这个漏洞也是因为传参过滤不严格导致的,一般我们说的php可执行命令的函数有这些:system();exec();shell_exec();passthru();pcntl_exec();popen();proc_open();

反引号也是可以执行的,因为他调用了shell_exec这个函数。shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体

https://blog.csdn.net/whatday/article/details/54880851     PHP调用外部程序的方法

文件上传

文件上传可以搜索以下关键词:(需注意有没有配置文件上传白名单)upload、write、fileName、filePath

在查看时,主要判断是否有检查后缀名,同时要查看配置文件是否有设置白名单或者黑名单。

SSRF

SSRF漏洞一般位于远程图片加载与下载、图片或文章收藏功能、URL分享、通过URL在线翻译、转码等功能点处。进行代码审计时需要关注发起HTTP请求的类及函数。

SSRF(Server-Side Request Forge, 服务端请求伪造)

攻击者让服务端发起指定的请求,SSRF攻击的目标一般是从外网无法访问的内网系统。Java中的SSRF支持sun.net.www.protocol 里的所有协议:http,https,file,ftp,mailto,jar,netdoc。相对于php,在 java 中SSRF的利用局限较大,一般利用http协议来探测端口,利用file协议读取任意文件。

SSRF漏洞防御

限制协议为HTTP、HTTPS协议

禁止30x跳转

设置URL白名单或者限制内网IP

限制请求的端口为http常用的端口

权限控制

重点关注用户操作请求时,查看是否有对当前登陆用户权限做校验,从而确定是否存在漏洞,有些厂商会使用一些主流的权限框架,例如 shiro ,spring security 等框架,那么需要重点关注框架的配置文件以及实现方法。

反序列化

Java 程序使用 ObjectInputStream 对象的 readObject 方法将反序列化数据转换为 java 对象。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

反序列化操作一般在导入模版文件、网络通信、数据传输、日志格式化存储、对象数据落磁盘或 DB 存储等业务场景,在代码审计时可重点关注一些反序列化操作函数,并判断输入是否可控。

例如:

ObjectInputStream.readObject

ObjectInputStream.readUnshared

XMLDecoder.readObject

Yaml.load

XStream.fromXML

ObjectMapper.readValue

JSON.parseObject

审计辅助工具

代码审计也就是拿到某网站的源码,然后进行审计,从而发现漏洞,但是我们审计的时候并不一定要一行一行的去看,这样未免也太浪费时间了,所以我们需要工具进行帮助我们。

我们在做代码审计的时候,建议先要把审计的某CMS随便点点,先熟悉一下功能。代码审计前先进行黑盒测试是个不错的选择,知道哪里有问题,然后再去找出问题的代码。

要关注变量和函数:

可以控制的变量【一切输入都是有害的】

变量到达有利用价值的函数【一切进入函数的变量都是有害的】

自动审计工具越来越不太好支持各种框架了,不如编辑器的查找功能

https://cloud.tencent.com/developer/article/1039610三款工具对比说明

代码审计总结

结合三个导向,在不断学习理解才能深入

猜你喜欢

转载自blog.csdn.net/Vdieoo/article/details/109384359
今日推荐