Intruder 응답에서 키워드를 찾기 위한 Grep-Match 사용

Beginner
지금 연습하기

소개

침투 테스트 및 웹 애플리케이션 분석에서 Burp Suite Intruder 와 같은 도구는 대상에 대량의 요청을 보내는 데 자주 사용됩니다. 이 과정의 핵심 기능은 "Grep - Match"로, 특정 키워드 ("Welcome", "Login successful", "admin_access_granted" 등) 를 포함하는 응답을 자동으로 플래그 지정할 수 있습니다. 이를 통해 수천 개의 응답을 빠르게 분류하여 흥미로운 응답을 찾을 수 있습니다.

이 랩에서는 표준 Linux 명령줄 도구를 사용하여 이 강력한 "Grep - Match" 기능을 복제하는 방법을 배우게 됩니다. curl을 사용하여 HTTP 요청을 만들고, 쉘 루프를 사용하여 페이로드 목록에 대한 프로세스를 자동화하며, grep을 사용하여 응답에서 성공 키워드를 검색합니다. 이는 보안 자동화 및 스크립팅에 관심 있는 모든 사람에게 기본적인 기술입니다.

Intruder > Options 에서 'Grep - Match' 섹션으로 스크롤

Burp Suite 와 같은 GUI 도구에서는 이 단계에서 옵션 패널로 이동하여 매칭 규칙을 구성합니다. 우리의 명령줄 환경에서는 이와 동등한 작업이 필요한 구성 요소, 즉 페이로드 목록과 대상 URL 을 준비하는 것입니다.

설정 과정에서 ~/project 디렉토리에 payloads.txt라는 파일이 이미 생성되었습니다. 이 파일에는 웹 애플리케이션에 대해 테스트하려는 잠재적 값 목록이 포함되어 있으며, 이는 Intruder 페이로드 목록과 동일한 목적을 수행합니다.

이 파일의 내용을 살펴보겠습니다.

cat ~/project/payloads.txt

다음과 같은 출력이 표시되어야 합니다.

orange
banana
apple
grape
mango

우리의 대상 애플리케이션은 http://localhost:8000에서 실행되는 간단한 웹 서버입니다. 각 페이로드를 이 대상에 대해 테스트할 것입니다.

기본 규칙 지우기

Burp Suite 에서는 명시적으로 정의한 내용만 일치하도록 기존 또는 기본 규칙을 일반적으로 지웁니다. 우리의 시뮬레이션에서는 올바르지 않다고 알려진 페이로드 orange로 단일 요청을 만들어 기준선을 설정하는 것을 의미합니다. 이를 통해 정상적이고 성공하지 못한 응답이 어떻게 보이는지 이해하는 데 도움이 됩니다.

curl을 사용하여 페이로드 orange로 서버에 요청을 보내겠습니다. 이 페이로드는 올바른 페이로드가 아님을 알고 있습니다.

curl "http://localhost:8000/?item=orange"

이 명령은 웹 페이지를 가져와 HTML 소스를 터미널에 출력합니다. 출력은 다음과 같아야 합니다.

<!DOCTYPE html>
<html>
  <head>
    <title>Test Page</title>
  </head>
  <body>
    <script>
      const params = new URLSearchParams(window.location.search);
      if (params.get("item") === "apple") {
        document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
      } else {
        document.body.innerHTML = "<h1>Item not found.</h1>";
      }
    </script>
  </body>
</html>

JavaScript 로직과 결과로 나오는 "Item not found" 텍스트에 주목하십시오. 이것이 우리의 기준 "실패" 응답입니다.

성공 키워드 (예: 'Welcome', 'Logged in') 를 일치시킬 새 규칙 추가

이것이 "Grep - Match" 기법의 핵심입니다. 명시적으로 정의한 내용만 "성공적인" 응답에 나타나는 고유한 문자열 또는 패턴을 정의해야 합니다. 이전 단계의 HTML 을 보면 성공적인 요청 (item=apple) 은 "Welcome to the secret page!"라는 텍스트를 결과로 생성한다는 것을 알 수 있습니다. "Welcome"이라는 키워드는 우리의 규칙에 완벽한 후보입니다.

grep 명령을 사용하여 curl의 출력을 필터링하고 키워드의 존재 여부를 확인할 수 있습니다. curl-s 플래그는 진행률 표시줄을 숨기는 자동 모드로 실행하는 데 사용됩니다.

먼저 실패 페이로드에 대해 이 규칙을 테스트해 보겠습니다. 이 명령은 "Welcome"이라는 단어가 응답에 없기 때문에 출력이 없어야 합니다.

curl -s "http://localhost:8000/?item=orange" | grep "Welcome"

이제 성공적인 페이로드로 알려진 apple에 대해 테스트해 보겠습니다.

curl -s "http://localhost:8000/?item=apple" | grep "Welcome"

이번에는 grep이 일치하는 항목을 찾아 키워드를 포함하는 줄을 출력합니다.

            document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';

파이프 (|) 와 grep "Welcome" 명령이 함께 우리의 "Grep - Match" 규칙을 형성합니다. 성공적인 응답과 실패한 응답을 구별하는 방법을 성공적으로 만들었습니다.

침입자 공격 실행

"침입자 공격"은 단순히 목록에 있는 각 페이로드에 대한 요청을 자동화하는 프로세스입니다. 간단한 쉘 루프를 사용하여 이를 달성할 수 있습니다. 루프는 payloads.txt에서 각 줄을 읽고 해당 페이로드에 대해 curl | grep 명령을 실행하여 결과를 보여줍니다.

출력을 더 깔끔하고 결과 테이블처럼 보이게 하기 위해 작은 쉘 스크립트를 만들 것입니다. nano 편집기를 사용하여 attack.sh라는 새 파일을 만듭니다.

nano attack.sh

이제 nano 편집기에 다음 스크립트를 복사하여 붙여넣습니다.

#!/bin/bash

echo "Payload,Found"

for payload in $(cat ~/project/payloads.txt); do
  response=$(curl -s "http://localhost:8000/?item=$payload")
  if echo "$response" | grep -q "Welcome"; then
    echo "$payload,True"
  else
    echo "$payload,False"
  fi
done

이 스크립트는 먼저 헤더 (Payload,Found) 를 출력합니다. 그런 다음 각 페이로드를 반복합니다. 루프 내에서 grep -q(조용 모드) 를 사용하여 "Welcome" 키워드를 확인합니다. 발견되면 페이로드 뒤에 True를 출력하고, 그렇지 않으면 False를 출력합니다.

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

다음으로 스크립트를 실행 가능하게 만듭니다.

chmod +x attack.sh

마지막으로 공격을 실행합니다.

./attack.sh

매치에 대한 결과 테이블의 새 열 관찰

이전 단계에서 스크립트를 실행한 후 터미널에서 깔끔한 테이블 형식의 출력을 볼 수 있습니다.

Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False

이 출력은 Burp Suite Intruder 의 결과 테이블에 해당하는 명령줄입니다. 첫 번째 열은 테스트된 페이로드를 나열하고, "Found"라고 이름을 지정한 두 번째 열은 "Grep - Match" 표시기 역할을 합니다.

이 두 번째 열에서 True 값을 스캔하기만 하면 성공적인 페이로드를 즉시 식별할 수 있습니다. 보시다시피 apple,True 줄이 명확하게 눈에 띄며, 페이로드 apple이 대상 키워드를 포함하는 응답을 생성했음을 알려줍니다. 이는 이 기법이 수많은 HTTP 응답 속에서 바늘을 찾는 데 얼마나 효과적인지를 보여줍니다.

요약

이 실습에서는 많은 자동화된 웹 보안 도구의 초석인 "Grep - Match" 기능을 성공적으로 시뮬레이션했습니다. 강력한 결과를 얻기 위해 여러 기본 Linux 명령줄 도구를 결합하는 방법을 배웠습니다.

다음을 연습했습니다.

  • 터미널에서 웹 요청을 만들기 위해 curl 사용.
  • 응답 데이터 내에서 특정 키워드를 검색하기 위해 grep 사용.
  • 입력 목록에 대한 작업을 자동화하기 위해 쉘 for 루프 작성.
  • 이러한 도구를 단일 스크립트로 결합하여 페이로드를 체계적으로 테스트하고 성공적인 시도를 식별.

이 명령줄 접근 방식은 정교한 도구가 내부적으로 어떻게 작동하는지 이해하는 좋은 방법일 뿐만 아니라, 자체 사용자 지정 자동화 및 보안 스크립팅 작업을 위한 매우 유연하고 강력한 기술입니다.