慢慢记,现在是草稿状态,不要看!!!!
对比分析
解析漏洞
IIS
- 6.0不解析;后面的,如 .php;.jpg会按php解析,另外有双文件上传,00截断,xx.asp文件夹下都是asp。
- iis7.0/7.5 evil.jpg/evil.php
apache
从右到左开始解析文件名,直到找到能解析的后缀。它使用handler标记请求处理程序,可使用AddHandler
和SetHandler
指定扩展对应的handler,前者只要文件名中包含就会匹配(不是结尾才匹配),由于历史原因也可以尝试使用AddType
替换AddHandler
,可能效果一样。
nginx
php配置了cgi.fix_pathinfo
会使当前路径不存在则向上查找,可使用evil.jpg/.php
访问evil.jpg
并执行。
注:PHP在5.3.9之后引入
security.limit_extensions
选项,使FastCGI默认只执行.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 | 在org/apache/tomcat/util/http/mapper/Mapper.class:internalMapWrapper 下断后看contextVersion 的wrappers ,也可以往上看有哪些context (不同版本可能路径不同) |
|
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)
其他
- 小众服务器优先研究它的目录遍历(IOT等设备)
- 在存在PHP-FPM时,可考虑通过它进行RCE (条件苛刻,需有socket型的SSRF)