代码审计之WevServer笔记[ING]

Published: 六 09 七月 2022

In Vuln.

慢慢记,现在是草稿状态,不要看!!!!

对比分析

解析漏洞

  • iis6.0不解析;后面的,如 .php;.jpg,另外有双文件上传,00截断,.asp文件夹
  • apache从右到左,直到找到能解析的后缀
  • iis7.0/7.5 evil.jpg/evil.php
  • nginx 访问时 evil.jpg/.php

容器

相关的容器很多,一般挖掘应用时常见的有tomcat/jboss/resin/jetty,这里只介绍Tomcat。

web.xml里将web-app的版本号换成3.0以上时可支持注解方式,于是注册Servlet和Filter就有三种方式:配置文件/addServlet与addFilter代码/注解,实际上为防止遗漏,查看实际存在的Servlet和Filter可使用如下方式:

应用 Servlet Filter
Jetty org/eclipse/jetty/servlet/ServletHandler:doScope下断后,通过打印this._servletMappings可获取 同样的地方下断后,打印this._filterPathMappings
Tomcat
Resin

在startup.sh 里,修改如下:

# 添加
export JPDA_SUSPEND='n'
export JPDA_ADDRESS=5005
# 修改
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"

或者在catalina.sh里,插入如下指令:

Java_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"

Servlet和Filter使用的匹配模式都是一样的,但是前者按照语法优先级(精确>路径>扩展>缺省[2])匹配一个即停止,而后者按照Filter添加顺序优先级依次处理,这里特别注意匹配并不是通配,没有*就是精确匹配,有一个/*在末尾才是路径匹配!这在过滤器中尤为关键,如不确定请手动尝试每条路有防止漏掉。

参考:

[0] Some notes about Resin web application server -- Manh Phan (2019)

[1] tomcat 核心架构解析 -- heibaiying (2020)

[2] web.xml文件中servlet的url-pattern匹配规则 -- 码——皇 (2019)

Apache HTTPD

Nginx

基础知识

在路由时有这几种匹配方式,还有种以@开头的用于内部重定向:

location   [=|~|~*|^~]    /uri/   {
          ...
}

优先级如下,两个正则优先级相同,在同一优先级下按出现先后顺序匹配:
=:精确匹配
^~:精确前缀匹配
~:区分大小写的正则匹配
~*:不区分大小写的正则匹配
/uri:普通前缀匹配
/:通用匹配,匹配所有

一些指令:

  1. add_header: 仅用于添加响应头
  2. proxy_xxx: 在代理时使用的指令,如proxy_set_header可定义代理转发时的请求头,它是直接覆盖的,因此客户端指定的头将会被丢弃。

常见问题

  1. location与alias匹配少了/导致目录穿一层

其他

  1. 小众服务器优先研究它的目录遍历(IOT等设备)