1. 描述
Log Forging 是日志伪造漏洞
在日常开发中为了便于调试和查看问题,需要通过日志来记录信息,java 中常见的日志组件 log4j, logback 等
查看日志文件可在必要时手动执行,也可以自动执行,即利用工具自动挑选日志中的重要事件或带有某种倾向性的信息,如果攻击者可以向随后会被逐字记录到日志文件的应用程序提供数据,则可能会妨碍或误导日志文件的解读
如果日志文件是自动处理的,那么攻击者就可以通过破坏文件格式或注入意外的字符,从而使文件无法使用.更阴险的攻击可能会导致日志文件中的统计信息发生偏差.通过伪造或其他方式,受到破坏的日志文件可用于掩护攻击者的跟踪轨迹,甚至还可以牵连第三方来执行恶意行为
最糟糕的情况是,攻击者可能向日志文件注入代码或者其他命令,利用日志处理实用程序中的漏洞
2. 复现问题
在日常开发中经常会在接口入口处,将入参全部打印到日志,方便查找问题和甩锅
/**
* 日志伪造漏洞
* @author oscar
*/
@Slf4j
@RestController
@RequestMapping("log")
public class LogForgingController {
/**
* 通过输入特殊字符,对输出日志进行伪造
* @param requestData
* @return
*/
@PostMapping("logForging")
public ResponseVO logForging(@RequestBody String requestData) {
JSONObject jsonObject = JSON.parseObject(reque