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 와 상태 가 아 닐 까요? 판단 의 문제 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.