Intruder는 웹 애플리케이션을 대상으로 사용자 정의 공격을 자동화하여 수행할 수 있는 강력한 도구다. 단순한 형태의 무차별 대비 공격부터 복잡한 형태의 Blind SQL Injection까지 다양한 형태의 공격을 지원한다.
공격 도구를 사용할 때 주의해야 할 점은 대상 애플리케이션에 따라 데이터베이스나 애플리케이션 자체에 예상하지 못한 결과가 발생할 수 있다.
작동 방식
Intruder는 사용자의 HTTP Request를 기반으로 작동한다. 따라서 브라우저에 프락시 서버가 설정되어야 하며, Intercept항목은 Off 상태로 설정되어 있어야 한다. 앞서 다뤘던 기능에서 Target의 Site map과 Proxy의 history탭에 저장된 Request를 가지고 매개변수를 포함하여 공격을 시도한다.
Intruder를 활용하여 공격할 때 가장 먼저 할 일은 공격 대상을 선택하는 일이다. 이번 파트에서는 Dvwa에 로그인하는 요청을 가지고 예를 들 것이다.
위 그림 2‑13은 DVWA의 로그인 화면이다. Intruder기능을 사용하기 위해 버프스위트에서 intercept를 on으로 설정한 뒤에 Username과 Password에 식별할 수 있는 아무 값을 넣고 로그인 버튼을 누른 후 요청 값을 확인해 보자.
위 그림 2‑14를 보면 POST 방식으로 서버에 전달하고 있다. 아래 BODY부분에 username과 password를 통해서 사용자가 입력한 값들을 확인할 수 있다. 여기서 이 요청을 토대로 Intruder를 사용해서 공격하기 위해 Context메뉴를 활용할 수 있다. (아래 그림 2‑15 참조)
위 루트를 제외하고 Target – Site map 이나 Proxy - history에서도 Context메뉴를 통해서 Intruder로 요청을 보낼 수 있다.
기능과 구성
l Target
Target탭은 공격할 대상 서버의 정보를 설정한다. 위 그림 2‑16과 같이 대상 HOST IP, Port 그리고 HTTPS를 사용하는 지를 설정할 수 있다. 그러나 Context 메뉴를 통해 보내진 경우는 Intruder가 자동으로 Host와 Port가 설정된다.
l Positions
먼저 중앙에 요청값이 그대로 온 것을 볼 수 있다. Intruder는 공격자에 의해 보내진 요청을 이곳(Request Editor)에 출력한다. 여기서 공격자는 오른쪽 메뉴를 통해서 페이로드가 삽입될 위치를 선택한다.
그림 2‑18처럼 Attack type에는 4종류가 있다.
먼저 Sniper는 하나의 Payload Set만 설정하여 공격을 진행된다. 만약 여러 개의 Payload Position이 마킹되어 있으면 한 번에 하나의 Position에 Paylaod Set을 차례대로 삽입하고 해당 Set이 다 삽입되었다면 다음 Position에 다시 Payload Set을 대입하는 방법으로 공격을 수행한다.
Battering ram은 페이로드의 단일 Set을 이용한다. 모든 위치에 동일한 페이로드를 실행할 수 있다.
Pitchfork는 설정한 Payload Position의 개수만큼 Payload Set을 설정한다. Payload Set의 개수가 많을수록 한 번에 여러 가지의 요청을 보낸다.
Cluster bomb도 Payload Position만큼 Payload Set을 설정하여 공격을 진행한다. 각 Position에 대입하는 것은 Pitchfork와 동일하나 첫 번째에 공격이 끝나면 다음 Postion에서 다시 진행한다. 결국 제일 많은 공격을 수행한다.
추가적으로 실무에서는 sniper와 Cluster bomb를 가장 많이 사용한다고 한다.
l Payloads
Payloads 탭은 Payload Position에 삽입할 Payload Set을 설정한다. 세부적인 항목으로는 Payload set과 Payload type이 있다. 이 두 항목은 Intruder를 이용한 공격에서 필수로 설정한다.
Payload set은 표시된 Position에 삽입 가능한 개수를 출력한다.
Payload type은 선택할 수 있는 종류이다. 여기서 선택하는 종류에 따라 페이로드를 자동으로 생성하거나 고도화된 공격 수행이 가능하도록 설정할 수 있다.
아래는 각각 type에 관한 간단한 설명이다.
타입 |
내용 |
Simple list |
가장 단순한 형태로, 단순 문자열을 목록화하여 페이로드로 사용한다. |
Runtime file |
공격을 수행할 때 파일에서 실시간으로 문자열을 읽어 페이로드로 사용하는 타입이다. 메모리를 미리 설정하면 설정한 만큼의 메모리를 이용하므로 문자열을 포함하는 파일의 용량이 큰 경우 사용한다. |
Custom iterator |
공격 항목에 대한 다중 리스트를 작성하고 이 리스트의 순서를 변경하면서 새로운 페이로드를 생성한다. |
Character substitution |
문자열 목록을 작성하고 각 문자열의 일부 문자를 치환하여 새로운 문자열을 생성한다. |
Case modification |
문자열 목록을 다양한 방법으로 수정하여 페이로드를 생성한다. 이 타입을 이용하면 비밀번호 추측 공격, 사전 공격 등을 할 수 있다. |
Recursive grep |
공격을 수행할 때 보낸 요청을 통하여 전달받은 응답 메시지에서 설정한 부분의 값을 추출한다. 추출된 값에서 유용한 정보를 수집하거나 바로 다음 요청에서 설정한 Position에 페이로드로 삽입하는 등의 기능을 적용할 수 있다. |
Illegal Unicode |
문자를 유니코드로 변경한 페이로드를 생성한다. 이 타입의 공격은 특정 문자가 포함된 경우 필터링을 우회하는 데 사용할 수 있다. |
Character blocks |
특정 문자나 문자열 블록을 기반으로 특정 길이의 블록을 생성하여 Position에 삽입하는 페이로드를 생성한다. 이 공격을 이용하여 실행 중인 소프트웨어의 버퍼 오버플로우 및 다른 경계 상태 취약점 등을 확인할 때 사용할 수 있다 |
Numbers |
지정된 범위에서 지정된 형식에 맞는 숫자 형태의 페이로드를 생성한다. |
Dates |
특정 범위와 형태를 갖는 날짜 페이로드를 생성한다. 이 타입의 공격을 통하여 특정 기간에 해당하는 자료들을 수집할 수 있고 데이터 추측 공격 등을 수행할 수 있다. |
Brute forcer |
특정 Character set에서 문자의 조합을 통하여 특정 길이의 문자 페이로드를 생성한다. |
Null payloads |
비어 있는 값을 페이로드로 생성한다. |
Character frobber |
Payload Position이 가진 값이나 사용자에 의해 입력된 값에서 문자의 위치를 변경하거나 문자를 수정하여 페이로드를 생성한다. |
Bit flipper |
Payload Position이 가진 값이나 사용자에 의해 입력된 값에서 비트 값을 수정하여 페이로드를 생성한다. |
Username generator |
사용자가 입력한 목록을 이용하여 사용자 이름이나 이메일 주소와 같은 목록을 생성한다. 이 공격을 이용하여 사용자 이름을 예측한 리스트를 생성할 수 있다. |
ECB block shuffler |
의미 있는 복호화된 평문을 수정하고 잠재적인 애플리케이션 로직을 방해하도록 ECB로 암호화된 데이터에서 암호문 블록을 섞을 수 있다. |
Extension-generated |
버프스위트 확장 기능을 이용하여 페이로드를 생성한다.(유료) |
Copy Other payload |
다른 Payload Position에 설정된 페이로드의 값을 복사하여 동일한 값으로 공격을 수행하도록 한다. |
Intruder – Options
여기서는 세부적인 공격 내용을 설정할 수 있다.
그림 STYLEREF 1 \s 2‑ SEQ 그림 \* ARABIC \s 1 20 Intruder – Options
Request Headers는 공격을 수행하는 동안 미리 설정된 요청 헤더를 Intruder에 업데이트할 것인지 제어할 수 있다.
- Update Content-Length header : 각 요청 헤더에 Content-Length 헤더를 추가하거나 업데이트할 것인지 설정한다.
- Set Connection: close : Connection 헤더에 ‘close’ 값을 추가하거나 업데이트할 것인지 설정한다.
Request Engine은 Intruder를 이용한 공격에서 HTTP 요청을 만들기 위해 사용하는 엔진에 대한 설정을 할 수 있다. 여기서 설정하는 값에 따라 애플리케이션의 성능에 영향을 줄 수 있고 엔진의 성능도 세밀하게 조정할 수 있다.
Attack Result는 공격 결과에서 캡처되는 정보를 제어할 수 있다.
- Store requests/responses : 요청과 응답에 대한 내용을 저장할 것인지 결정한다.
- Make unmodified baseline request : 이 옵션이 활성화되면 Burp는 설정한 공격 요청 외에 기본값으로 설정한 Payload Position과 Template의 요청 메시지를 전송한다.
- Use denial-of-service mode : 정상적으로 모든 요청을 수행하지만 서버로부터 받는 응답을 처리하기 위해 대기하지는 않는다.
- Store full payloads : 모든 Payload 값을 저장한다.
Grep – Match 는 요청에 대한 응답에서 특정 표현이 포함된 항목을 표시하도록 설정할 수 있다.
- Match type : 일치하는 타입을 정하는 항목으로 간단한 문자열이나 정규 표현 중 하나를 선택한다.
- Case sensitive match : 대소문자를 구분할지 설정한다.
- Exclude HTTP headers : HTTP 응답 헤더를 포함할지 설정한다.
Grep – Extract는 공격 결과에 포함된 응답에서 유용한 정보를 추출하도록 설정할 수 있다.
Grep – Payloads는 페이지 내에서 패스워드/제목/이메일 정보 등을 검색할 때 유용하게 활용할 수 있다. 정규표현식으로 지정할 수 있으며 <title>(.*?)</title> 과 같이 지정하면 페이지 내 제목으로 정의된 것을 확인할 수 있다. XSS, SQL Injection 공격과 같이 사용 입력값이 동적으로 응답 값에 포함될 때 유용하게 사용된다.
- Search responses for payload strings : 응답 결과에 페이로드를 포함할지 설정한다.
- Case sensitive match : 페이로드의 대소문자를 구분할지 설정한다.
- Exclude HTTP headers : HTTP 응답 헤더를 포함할지 설정한다.
- Match against pre-URL-encodeed payloads : 응답 값에 디코딩된 페이로드를 구분할지 설정한다.
Redirections는 공격 수행 시 강제이동을 어떻게 처리할지에 대해 설정할 수 있다.
결론
Intruder를 이용하여 퍼징, 무차별 대입 공격 등 다양한 공격을 수행하도록 설정할 수 있다. 설정에 따라 공격 패턴 및 요청 범위가 달라지므로 각 기능을 파악한 후 이용하여야 제대로 된 결과를 얻을 수 있다.
'모의해킹 > 버프스위트' 카테고리의 다른 글
버프스위트 알아보기 - 4. Scanner(스캐너) (유료) (0) | 2019.10.23 |
---|---|
버프스위트 알아보기 - 3. Spider (0) | 2019.10.23 |
버프스위트 알아보기 - 2. 타겟(Target) (0) | 2019.09.27 |
버프스위트 알아보기 - 1. 프록시(Proxy) (0) | 2019.09.06 |
버프스위트 알아보기 - 0. 포스팅 시작 (0) | 2019.09.03 |