调用Metasploit RestFul接口,解决证书问题

本文介绍了一种通过Java实现的调用Metasploit RESTful API的方法,并解决了调用过程中遇到的证书信任问题。文章提供了完整的代码示例,包括如何配置HTTPS连接以忽略证书错误、发送GET和POST请求的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调用Metasploit restful接口的时候,证书出现问题,下面是解决并调用

import java.awt.List;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.transform.Templates;

import org.msgpack.MessagePack;
import org.msgpack.template.Template;
import org.omg.CORBA_2_3.portable.OutputStream;

/**
 * @Title: Restful.java
 * @Package Restful
 * @author Ishadow
 * @date 2016��6��19�� ����1:15:43
 * @version V1.0
 */
public class Restful {
    public static String doGet(String restfulURL) throws KeyManagementException, NoSuchAlgorithmException {
        HttpsURLConnection.setDefaultHostnameVerifier(new Restful().new NullHostNameVerifier());
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        URL url = null;
        InputStream iStream=null;
        InputStreamReader iReader=null;
        BufferedReader breader=null;
        try {
            url = new URL(restfulURL);
            // restful
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");// POST GET PUT DELETE
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("accept", "*/*");

            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            conn.setRequestProperty("token", "4c54d80875b80047bdaa21ae16176e63");
            conn.setConnectTimeout(130000);
            conn.setReadTimeout(130000);

            System.out.println(conn.getResponseCode());
            if (200 == conn.getResponseCode()) {
                iStream=conn.getInputStream();
                iReader=new InputStreamReader(iStream,"utf-8");
                breader=new BufferedReader(iReader);
                StringBuffer sBuffer=new StringBuffer();
                String temp="";
                while ((temp=breader.readLine())!=null) {
                    sBuffer.append(temp);
                }
                System.out.println(sBuffer.toString());
                return sBuffer.toString();
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if(breader!=null){
                    breader.close();
                }
                if (iReader != null) {
                    iReader.close();
                }
                if (iStream != null) {
                    iStream.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return "";
    }

    public static String doPOST(String restfulURL)throws KeyManagementException, NoSuchAlgorithmException {
        HttpsURLConnection.setDefaultHostnameVerifier(new HttpClient().new NullHostNameVerifier());
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        URL url = null;
        InputStream iStream=null;
        InputStreamReader iReader=null;
        BufferedReader breader=null;
        DataOutputStream dOutputStream=null;

        try {
            url = new URL(restfulURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");// POST GET PUT DELETE
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("accept", "*/*");
            // 固定的设置binary/message-pack
            conn.setRequestProperty("Content-Type", "binary/message-pack");
            //conn.setRequestProperty("token", "4c54d80875b80047bdaa21ae16176e63");
            conn.setConnectTimeout(130000);
            conn.setReadTimeout(130000);
            conn.connect();

            ArrayList<String> requeStrings=new ArrayList<String>();
            requeStrings.add("auth.login");
            requeStrings.add("AttUser002");
            requeStrings.add("+123TestCheck");
            //requeStrings.add("4c54d80875b80047bdaa21ae16176e63");
            MessagePack messagePack=new MessagePack();
            byte [] bytes=messagePack.write(requeStrings);
            //输入流
            dOutputStream=new DataOutputStream(conn.getOutputStream());
            dOutputStream.write(bytes);
            dOutputStream.flush();

            iStream=conn.getInputStream();
            iReader=new InputStreamReader(iStream,"UTF-8");
            breader=new BufferedReader(iReader);
            StringBuffer sBuffer=new StringBuffer();
            String temp="";
            while ((temp=breader.readLine())!=null) {
                sBuffer.append(temp);
            }
            System.out.println(sBuffer.toString());
            return sBuffer.toString();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if(breader!=null){
                    breader.close();
                }
                if (iReader != null) {
                    iReader.close();
                }
                if (iStream != null) {
                    iStream.close();
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return "";
    }

    public static void main(String[] args) throws IOException, KeyManagementException, NoSuchAlgorithmException {
        //doGet("https://172.16.30.99:3790/rest_api/v2/workspaces/6/hosts/4/services/46/vulns");
        doPOST("https://172.16.30.99:3790/api/1.0/");
    }

    static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // TODO Auto-generated method stub
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // TODO Auto-generated method stub
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }
    } };

    public class NullHostNameVerifier implements HostnameVerifier {
        /*
         * (non-Javadoc)
         * 
         * @see javax.net.ssl.HostnameVerifier#verify(java.lang.String,
         * javax.net.ssl.SSLSession)
         */
        @Override
        public boolean verify(String arg0, SSLSession arg1) {
            // TODO Auto-generated method stub
            return true;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值