0x01 Why

目标: 抓漏洞.

大概是没有找到啥子开源的符合我预期的蜜罐吧,所以自己动手写了。

0x02 What

想做什么样的蜜罐?

1.便于维护,随开随用,配置简单。

2.Web低仿真即可,且只抓Web流量。

3.不同端口指向不同的页面,响应头配置等。

0x03 How

SpringBoot是最强Web框架没有之一,数据库选用SQLite。两者结合基本上就可以实现一个jar加db文件就完成需求。

0x04 Process

管理页面选用layui作为前端框架,后台地址和端口以及账号密码通过配置文件动态配置。

多端口方便其实就是给tomcat添加几个监听的端口而已:


Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme(scheme);connector.setPort(Integer.parseInt(port));result.add(connector);

然后是不同端口指向不同页面:

配置文件

判断逻辑

port是限制的端口,path是本地模板的路径,code是返回的状态码,header是相应的header,respbody本来是想正对一些特定的请求返回不同页面的,逻辑没有思考的很清楚,暂时搁置了。

页面捕获

过程比较耗时间,期初想拦截所有异常,在做统一处理即可,可实际过程发现springboot默认开起了add-mappings无法捕获404页面,而且静态资源过来的请求无法捕获,如果遇到解析差异那种洞就只能错过。关闭的话静态资源访问配置又会很麻烦。

查阅相关文档后发现可以继承 ErrorController + @ControllerAdvice + @ExceptionHandle 处理一切异常,这也包括404页面,

Demo:


NotFoundController.java
@Controllerpublic class NotFoundController implements ErrorController {
    @Override    public String getErrorPath() {        return "/error";    }    @RequestMapping(value = {"/error"})    public Object error(HttpServletRequest request) {        //请求处理        return "404";    }}ExceptionController.java
@ControllerAdvicepublic class ExceptionController {
    @ExceptionHandler(value = {Exception.class})    public Object error(Exception ex){        //请求处理        return "500";    }}

这也处理确实能捕获到404页面,可是有个bug

getServletPath方法获取的路由恒为error,这也是springboot的特征之一,所有错误均会交由error路由处理,也就是说error默认是肯定存在的。

正确的处理方式是在过滤器中进行记录:


public class LokiFilter implements Filter{
    @Override    public void init(FilterConfig filterConfig) throws ServletException {        log.info("Loki Filter is init.... ");    }
    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) servletRequest;        //请求处理        filterChain.doFilter(request, response);    }
    @Override    public void destroy() {        log.info("Loki Filter was destroyed....");    }}

嗯,内存马也得在这层搞,不然鬼知道别人路由咋写的。

0x05 Result

代码结构:

后台页面:


模板文件:

一些有趣的事情:

1.在公网跑起来后我收到的第一个请求是nmap扫cobaltstrike的。

2.配置的通达和致远的页面都被来自河南和云南的两个IP人为访问过两次,识别依据是浏览器会自动加载/favicon.ico,脚本不会。

3.被89.248.160.151这个IP扫了一通.txt的文件,还有一些请求路径是@.txt,不知道是不是扫描器没配好。

4.创宇的censys爬虫先是先访问了8090端口,然后是88端口,中间间隔了将近14小时,bing的爬虫也到访过一次,fofa的爬虫没看到,但是有上百条ua为Go-http-client/1.1和fasthttp的请求,python的只有一条。

5.捕获了两个漏洞:

搜索了一下应该是Linksys路由的命令注入.

看起来是未授权相关的漏洞,80端口配置了很低从其他蜜罐上扒下来的Server头,可能是其中一款产品的洞吧,涉及的产品太多,百度没搜到这个路由,无法验证了。