记一次域内渗透实战之Cragty

信息收集
端口扫描
使用nmap扫描发现存在80和25565端口开放
接着探测其具体协议
目录扫描
使用工具对其进行目录扫描
web页面
发现80端口存在一个静态页面
使用curl测试25565端口,发现不能利用。
手动枚举
漏洞利用
Log4Shell漏洞
漏洞原理
Log4Shell 的问题在于 Log4J 日志模块不能很好地处理该模式${[stuff]}
。通过在该模式中放置 JNDI/LDAP URL,它将导致记录器从任意服务器获取数据,如果该数据是序列化的 Java,则会导致执行。
漏洞分析
项目中的关键代码(MainController.java):
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@RestController
public class MainController {
private static final Logger logger = LogManager.getLogger("HelloWorld");
@GetMapping("/")
public String index(@RequestHeader("X-Api-Version") String apiVersion) {
logger.info("Received a request for API version " + apiVersion);
return "Hello, world!";
}
}
代码分析
首先,这是一个简单的REST控制器,使用@RestController注解,处理根路径的GET请求。方法index接收一个请求头X-Api-Version,然后记录一条信息到日志,最后返回"Hello, world!"。
漏洞修复:
修复代码如下:
import org.springframework.web.bind.annotation.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.validation.constraints.Pattern;
@RestController
public class MainController {
private static final Logger logger = LogManager.getLogger(MainController.class);
@GetMapping("/")
public String index(
@RequestHeader(value = "X-Api-Version", defaultValue = "1.0")
@Pattern(regexp = "^[0-9]+\\.[0-9]+$") String apiVersion) {
logger.info("Received request for API version {}", apiVersion);
if (!isSupportedVersion(apiVersion)) {
logger.warn("Unsupported API version attempted: {}", apiVe
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录