本片文章是对tomcat 400 错误造成信息泄露,如何进行修复进行描述,希望可以对非安全专业的互联网工作人员提供一点帮助,本片文章内容确实也是笔者最近遇到的一些问题。
漏洞描述
tomcat 发生400 错误,暴露出中间件版本、以及程序抛出的一些异常。
异常内容为
org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:503)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:502)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
和图片有点不一样,因为这个是我从网上粘贴写来的,不过出现异常的一样的,
虽然实际危害也就那么回事,但是这个毕竟是项目上遇到的问题,打码还是最基本的职业道德。
原因说明
其中图片中这些异常都不是重点,重点是
在请求目标中无法找到有效字符,有效字符在RFC 7203和 RFC 3986 中定义
这个报错的英文版是
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
就是说我们传递了无效字符,tomcat 无法处理导致报错,这个问题在高版本tomcat 中均存在,从7.0.88开始,大多数tomcat版本都会出现此问题。
截图中测试者直接使用burp Suit 传递了一个 XSS payload去测试 autoCode 参数,由于是burp 直接输入的payload, “<”、">",等特殊字符未进行url 编码,tomcat 处理不了了,而tomcat没有报500的服务器端错误,而是报的400错误(请求报文存在语法错误),这是因为,这个错误被认为是客户端的错误(tomcat 是这样认为的)。
修复方法
Tomcat增强了其安全性,并且不再允许在查询字符串中使用原始方括号。在请求中,我们有{,} 或其他符号("<",">","[","}"等),因此服务器未处理该请求。
在tomcat conf路径下的server.xml文件里面的 Connector 标签下添加属性 relaxedQueryChars:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxHttpHeaderSize ="10240"
relaxedQueryChars="{,}"/>
一般直接添加这个
<Connector port="8084" protocol="HTTP/1.1" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" useBodyEncodingForURI="true" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
多符号可以用"," 隔开,上面那些奇怪的编码是html 实体编码,内容是<、>等符号,直接输入这些符号有些会导致tomcat报错,无法启动服务的,这也是跟实施人员沟通过后才了解到的。
至于中间件版本好的隐藏,大家去百度的,懒得写了。。。。