Java 민감 한 파일 검색 도구 작성

7442 단어 자바그까짓 일
Java 민감 한 파일 검색 도구 작성
글 의 출처:http://yuedu.163.com/news_reader#/!/source?id=c6a5b83adfc7483c9f7166030b7a5d27_1&cid=41361585ceed40c4a3a7cfb6e599f070_1
침투 테스트 과정 에서 민감 한 디 렉 터 리 파일 을 스 캔 하 는 것 은 매우 중요 한 일이 다. 그러면 우 리 는 자바 로 디 렉 터 리 스 캔 의 Demo 를 만 들 것 이다.마찬가지 로 네트워크 프로 그래 밍 에 도 다음 과 같은 몇 가지 유형 을 사용 해 야 한다.
1、java.net.HttpUrlConnection
2、java.net.Url

이 어 Http UrlConnection 류 를 나 누 어 http 요청 에 따라 request 와 response 로 나 누 어 HTTP 프로 토 콜 을 직접 조작 하면 훨씬 편리 하 다.
request 클래스 는 다음 과 같 습 니 다.
package com.xxser.http;
 
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.Proxy;
import java.net.URL;
 
public class Request {
 
         privateURL url;
         privateHttpURLConnection con;
         privateProxy proxy = null;
 
         /**
          *     
          *
          * @param url
          *           Url  
          */
         publicRequest(String url) {
                   try{
                            this.url= new URL(url);
                            this.init();
                   } catch(MalformedURLException e) {
                            e.printStackTrace();
                   }
         }
 
         /**
          *
          * @param url
          *           URL   
          * @param proxy
          *             
          */
         publicRequest(String url, Proxy proxy) {
                   try{
                            this.url= new URL(url);
                            this.proxy= proxy;
                            this.init();
                   } catch(MalformedURLException e) {
                            e.printStackTrace();
                   }
         }
 
         publicRequest(URL url) {
                   this.url= url;
                   this.init();
         }
 
         publicURL getUrl() {
                   returnurl;
         }
 
         publicHttpURLConnection getCon() {
                   returncon;
         }
 
         /**
          *     HTTP   
          */
         privatevoid init() {
                   try{
 
                            if(this.proxy == null) {
 
                                     this.con= (HttpURLConnection) url.openConnection();
                            } else {
                                     this.con= (HttpURLConnection) this.url
                                                        .openConnection(this.proxy);
                            }
                   }catch (IOException e) {
                            e.printStackTrace();
                   }
         }
 
         /**
          *   Response
          *
          * @return
          */
         publicResponse getResponse() {
                   try{
                            this.con.getInputStream();//     
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
 
                   Responseres = new Response(this.con);
                   returnres;
         }
 
         /**
          *       
          *
          * @param method
          */
         publicvoid setMethod(String method) {
                   try{
                            this.con.setRequestMethod(method);
                   } catch (ProtocolException e){
                            e.printStackTrace();
                   }
         }
 
         /**
          *      
          *
          * @param h
          *            
          * @param v
          *            
          */
         publicRequest setHeader(String h, String v) {
 
                   this.con.addRequestProperty(h,v);
                   returnthis;
         }
 
         /**
          *       
          *
          * @param data
          */
         publicvoid setData(String data) {
                   this.con.setDoOutput(true);
                   OutputStreamos = null;
                   try{
                            os= this.con.getOutputStream();
                            os.write(data.getBytes());
                            os.close();
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
                  
         }
        
        
        
         /**
          *       302  
          * @param set
          */
         @SuppressWarnings("static-access")
         public  void setInstanceFollowRedirects (booleanflag) {
                   this.con.setInstanceFollowRedirects (flag);
         }
}

response 클래스 는 다음 과 같 습 니 다.
package com.xxser.http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
public class Response {
private HttpURLConnection con;
public Response(HttpURLConnection con) {
this.con = con;
}
/**
 * 
 * @return        
 */
public HttpURLConnection getCon() {
return con;
}
/**
 *      
 * @param key
 * @return
 */
public String getHeader(String key) {
return this.con.getHeaderField(key);
}
/**
 * 
 * @return    ,     GBK
 */
public String getBody() {
return this.getBody("GBK");
}
/**
 * 
 * @param charset    
 * @return    
 */
public String getBody(String charset) {
BufferedReader buf = null;
try {
buf = new BufferedReader(new InputStreamReader(this.con
.getInputStream(), charset));
} catch (IOException e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder();
try {
for (String temp = buf.readLine(); temp != null; temp = buf
.readLine()) {
sb.append(temp);
sb.append(System.getProperty("line.separator"));
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
 * 
 * @return HTTP    
 */
public int getResponseCode() {
int temp = -1 ;
try {
 temp = this.con.getResponseCode() ;
} catch (IOException e) {
e.printStackTrace();
}
return temp ;
}
}

두 가지 유형 이 모두 있 으 면 그 다음 에 본론 으로 들 어 갑 니 다. 스 캔 에서 보통 HEAD 방법 을 사용 하 는 것 이 가장 빠 릅 니 다. HTTP body, 즉 HTML, JS, CSS 등 데 이 터 를 얻 기 를 기다 리 지 않 아 도 되 기 때 문 입 니 다.
테스트 를 진행 합 니 다. 코드 는 다음 과 같 습 니 다.
package com.xxser.test;

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Proxy.Type;
import com.xxser.http.Request;
import com.xxser.http.Response;
public class Main {

	public static void main(String[] args) throws Exception {

		Proxy p = new Proxy(Type.HTTP,new InetSocketAddress("127.0.0.1",8888));
		
		Request r = new Request("http://www.moonsos.com"+"/index.html", p);
			
		r.setHeader("User-Agent", "HelloWorld").setMethod("HEAD");

		Response  ps =	r.getResponse();
		
		System.out.println(ps.getResponseCode());
		
	}

}

여기에 에이 전 트 를 사용 해 버 프 스 위 트 로 가방 을 잡 아 정확 한 지 확인 했다. 역시 일 부 는 문제 가 없 었 다.
ps: 프 록 시 를 어떻게 사용 하 는 지 모 르 면 다른 글 을 보 세 요. 자바 프 록 시 서버 (Burp 차단 데모)
그러나 주의해 야 할 것 은 302 점프 를 금지 하 는 것 이다. 예 를 들 어 우리 가 방문 하 는 것 이다.
http://www.baidu.com/xxx.html이 "xxx. html" 페이지 는 존재 하지 않 습 니 다. 그러면 서버 는 404 오 류 를 피하 기 위해 다른 페이지 로 직접 방향 을 바 꿉 니 다. 보통 "error" 페이지 입 니 다. 아래 그림 과 같 습 니 다.
이 페이지 는 존재 하지 않 지만 302 점프 를 금지 하지 않 으 면 상태 코드 200 으로 돌아 갑 니 다!아래 그림 과 같다.
그래서 우 리 는 request. setInstance Follow Redirects (false) 를 호출 하여 302 자동 점프 를 금지 할 수 있 습 니 다. 아래 그림 과 같이 문제 가 없습니다.
다음은 다 중 스 레 드 를 만들어 스 캔 을 할 수 있 습 니 다.일일이 얘 기 안 할 게 요.IO 와 상태 가 아 닐 까요? 판단 의 문제 입 니 다.

좋은 웹페이지 즐겨찾기