Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
urless — 정적 확장자, 원치 않는 키워드, ID, 언어 변형 및 매개변수를 제거하여 대규모 URL 목록을 필터링하고 중복을 제거함으로써 웹 정찰을 위한 깨끗한 엔드포인트 집합을 생성합니다. | Kitploit
도구/GitHubGitHub/xnl-h4ck3r/urless
ReconnaissanceInformation GatheringWeb SecurityPenetration TestingUtilities & Frameworks
GitHubxnl-h4ck3r/urless

urless

정적 확장자, 원치 않는 키워드, ID, 언어 변형 및 매개변수를 제거하여 대규모 URL 목록을 필터링하고 중복을 제거함으로써 웹 정찰을 위한 깨끗한 엔드포인트 집합을 생성합니다.

저장소 보기
391415개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

소개 - v2.7

이 도구는 URL 목록을 정리(de-clutter)하는 데 사용됩니다. 출발점으로 Somdev Sangwan의 놀라운 도구인 uro를 사용했습니다. 하지만 몇 가지를 변경하고, (GUID 처리 같은) 개선을 만들고, 더 커스터마이즈 가능하게 만들고 싶었습니다.

설치

urless는 Python 3을 지원합니다.

기본(전역) Python 환경에 urless를 설치하세요.

root@kitploit:~
pip install urless

또는

root@kitploit:~
pip install git+https://github.com/xnl-h4ck3r/urless.git -v

다음으로 업그레이드할 수 있습니다:

root@kitploit:~
pip install --upgrade urless

pipx

pipx를 사용한 격리된 Python 환경에서의 빠른 설정

root@kitploit:~
pipx install git+https://github.com/xnl-h4ck3r/urless.git

사용법

정확히 어떤 작업을 수행하나요?

기본적으로 (파일에서 또는 STDIN에서 파이프로) URL 목록을 입력하면 정리된 파일 또는 URL이 출력됩니다. 하지만 어떤 방식으로 정리될까요? 아래에서 설명하겠지만, 먼저 사용될 몇 가지 용어가 있습니다:

  • FILTER-EXTENSIONS: -fe로 전달하거나 config.yml의 FILTER_EXTENSIONS에 지정할 수 있는 확장자 목록을 의미합니다. 둘 다 없으면 기본 목록인 .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image가 사용됩니다.
  • FILTER-KEYWORDS: -fk로 전달하거나 config.yml의 FILTER_KEYWORDS에 지정할 수 있는 키워드 목록을 의미합니다. 둘 다 없으면 기본 목록인 blog,article,news,bootstrap,jquery,captcha,node_modules가 사용됩니다.
  • LANGUAGE: config.yml의 LANGUAGE에 지정할 수 있는 언어 코드 목록을 의미합니다. 없으면 가장 일반적인 코드의 기본 목록인 en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko가 사용됩니다.
  • :

다음과 같은 작업이 수행됩니다:

  • URL에 포트 80 또는 443이 명시적으로 지정된 경우 URL에서 제거합니다 (예: http://example.com:80/test -> http://example.com/test)
  • URL에 FILTER-EXTENSIONS에 해당하는 확장자가 있으면 출력에서 제거됩니다.
  • URL에 매개변수가 없거나 OR -dp/--disregard-params 인자가 전달된 경우:
    • URL에 FILTER-KEYWORDS 또는 UNWANTED-CONTENT가 포함된 경우 제거됩니다.
    • URL 쿼리 문자열에 config REMOVE_PARAMS에 지정된(또는 -rp/--remove-params 인자로 재정의된) 원치 않는 매개변수가 포함된 경우, 처리 전에 모든 URL에서 제거됩니다.
    • -rcid/--regex-custom-id가 전달되고 URL 경로에 Custom ID가 포함된 경우, Custom ID가 유일한 차이인 URL이 여러 개 있으면 Custom ID 정규식에 일치하는 항목 하나만 포함됩니다.
    • URL 경로에 GUID가 포함된 경우, GUID가 유일한 차이인 URL이 여러 개 있으면 GUID 중 하나만 포함됩니다.
    • URL 경로에 정수 ID가 포함된 경우, 정수 ID가 유일한 차이인 URL이 여러 개 있으면 정수 ID 중 하나만 포함됩니다.
    • -lang 인자가 전달되고 URL에 언어 코드(예: en-gb)가 포함된 경우, 언어 코드가 다른 URL이 여러 개 있으면 언어 코드 중 하나만 포함됩니다.
  • 그 외에 URL에 매개변수(또는 프래그먼트 #)가 있고 / 인자가 전달되지 않은 경우:

예시

기본 사용법

root@kitploit:~
cat target_urls.txt | urless

또는

root@kitploit:~
urless -i target_urls.txt

출력 캡처

root@kitploit:~
cat target_urls.txt | urless > output.txt

또는

root@kitploit:~
urless -i target_urls.txt -o output.txt

config.yml

config.yml 파일에는 필요에 맞게 업데이트할 수 있는 키가 있습니다:

  • FILTER_KEYWORDS - 특정 상황에서 URL을 검사할 때 사용되는 쉼표로 구분된 키워드 목록입니다 (예: blog,article,news 등).
  • FILTER_EXTENSIONS - 모든 URL을 검사할 때 사용되는 쉼표로 구분된 파일 확장자 목록입니다 (예: .css,.jpg,.jpeg 등). URL에 해당 문자열이 하나라도 포함되면 출력에서 제외됩니다.
  • LANGUAGE - -lang 인자가 전달될 때 모든 URL을 검사할 때 사용되는 쉼표로 구분된 언어 코드 목록입니다 (예: en-gb,fr,nl 등). 서로 다른 언어 코드를 가진 URL이 여러 개 있으면 URL의 한 버전만 출력됩니다.
  • REMOVE_PARAMS - 처리 전에 모든 URL에서 제거될 대소문자 구분 매개변수 이름의 쉼표로 구분된 목록입니다 (예: cachebuster,cacheBuster).

사용자 정의 정규식

현재 경로 부분이 GUID(Globally Unique ID) 또는 정수 ID인지 자동으로 확인하는 정규식 검사가 있지만, -rcid / --regex-custom-id 인자를 사용하면 사용자 정의 ID를 식별하는 정규식을 제공할 수 있습니다. 예를 들어 대상에 특정 ID 형식(GUID 또는 정수가 아닌)이 있는 경우 해당 ID에 대한 정규식 표현식을 지정할 수 있으며, 나머지 URL이 동일하면 출력에서 그 중 하나만 반환됩니다. 예를 들어:

  • 대상이 U-65241X와 같은 형식의 사용자 ID를 가지고 있다고 가정합니다.
  • 그리고 다음과 같은 여러 URL이 있습니다:
    root@kitploit:~
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-63352B/settings
    https://target.com/blah/U-61351A/profile
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-64135C/profile
    
  • urless를 호출하면서 -rcid 'U-[0-9]{5}[A-Z]'를 전달하면 출력은 다음과 같습니다:
    root@kitploit:~
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-64135C/profile
    

중요한 정규식 참고 사항:

  • 올바른 정규식 표현식을 작성하는 것은 어려울 수 있으며, 올바르지 않으면 예측할 수 없고 잘못된 출력이 나올 수 있습니다.
  • -rcid 인자에 전달할 때는 항상 정규식 표현식을 작은따옴표로 묶으세요.
  • GUID 또는 정수 ID에 대한 사용자 정의 정규식을 추가할 필요는 없습니다. 이미 처리되어 있습니다.
  • 정규식 표현식은 경로의 전체 부분을 강조해야 합니다. 따라서 정규식이 경로의 시작 부분만 식별하는 경우 정규식 끝에 [^(\?|\/|#|$)]*를 추가하면 경로 부분 끝까지의 모든 다른 문자를 의미합니다.
  • 정규식의 시작에 ^, 끝에 $를 추가하여 슬래시 사이의 경로 전체 부분을 나타내도록 할 수 있습니다. 하지만 생략하면 자동으로 추가됩니다.
  • 정규식이 관심 있는 섹션만 식별하는지 확인하세요. 그렇지 않으면 예상치 못한 결과가 나올 수 있습니다. 정규식을 테스트하려면 입력 파일을 가져와 예를 들어 cat input.txt | grep -E 'U-[0-9]{5}[A-Z]'를 실행하여 표현식이 올바른지 확인할 수 있습니다 (관심 있는 부분만 강조하고 사용자 정의 ID인 경로의 전체 부분을 강조해야 합니다).
  • Regex101을 사용하여 테스트할 수도 있습니다. TEST STRING 섹션에 샘플 URL을 입력하여 올바른지 확인하세요. REGEX FLAGS의 global 및 multiline이 선택되어 있는지 확인하세요.
  • 다른 값을 동일하게 취급하지 않으면서 Custom ID를 올바르게 식별할 정규식을 제공할 수 없는 경우도 있습니다. 예를 들어 https://target.com/blah/xnl/settings와 같은 URL에서 xnl이 사용자 이름인 경우, 사용자 이름은 다른 가능한 경로 값과 구분할 만큼 고유한 형식이 아니므로 사용자 이름에 대한 정규식을 만들 수 없습니다.

문제

문제가 발생하거나 개선 아이디어가 있으면 언제든지 Github에 이슈를 등록해 주세요. 문제가 있는 경우 실행한 정확한 명령어와 문제에 대한 자세한 설명을 제공해 주시면 도움이 됩니다. 가능하면 -v 플래그로 문제를 재현하고 표시되는 오류 메시지를 알려주세요.

TODO

없음 - 개선 사항을 제안하려면 Github 이슈를 자유롭게 등록하세요.

마지막으로...

행운을 빕니다, 좋은 사냥 되세요! 이 도구(또는 다른 도구)가 정말 마음에 들거나 훌륭한 바운티를 찾는 데 도움이 되었다면, 커피 한 잔 사주시는 것을 고려해 주세요! ☕ (카페인이 필요해요!)

🤘 /XNL-h4ck3r

Buy Me a Coffee at ko-fi.com

도구 다운로드
인자긴 인자설명
-i--input정리할 URL 목록이 담긴 파일입니다.
-o--output정리된 URL 목록이 포함될 출력 파일입니다 (기본값: output.txt). 다른 프로그램으로 파이프되면 출력은 대신 STDOUT으로 작성됩니다.
-fk--filter-keywords매개변수가 없는 경우 링크를 제외할 쉼표로 구분된 키워드 목록입니다. 이 값은 config.yml에 지정된 FILTER_KEYWORDS 목록을 재정의합니다.
-fe--filter-extensions제외할 쉼표로 구분된 파일 확장자 목록입니다. 이 값은 config.yml에 지정된 FILTER_EXTENSIONS 목록을 재정의합니다.
-rp--remove-params모든 URL에서 제거할 대소문자 구분 매개변수의 쉼표로 구분된 목록입니다. 이 값은 config.yml에 지정된 REMOVE_PARAMS 목록을 재정의합니다. 예를 들어 캐시 버스터 매개변수를 제거하는 데 유용할 수 있습니다.**
-ks--keep-slash입력의 URL 끝에 있는 후행 슬래시는 제거되지 않습니다. 따라서 후행 슬래시가 있는 URL과 없는 URL이 각각 출력되어 동일한 URL이 중복될 수 있습니다.
-khw--keep-human-written기본적으로 경로 부분에 대시(-)가 3개 이상 포함된 URL은 사람이 작성한 콘텐츠(예: 블로그 게시물)로 간주되어 흥미롭지 않다고 판단하여 제거됩니다. 이 인자를 전달하면 해당 URL이 출력에 유지됩니다.
-kym--keep-yyyymm기본적으로 경로에 /YYYY/MM(YYYY는 연도, MM은 월)이 포함된 URL은 블로그/뉴스 콘텐츠로 간주되어 흥미롭지 않다고 판단하여 제거됩니다. 이 인자를 전달하면 해당 URL이 출력에 유지됩니다.
-rcid--regex-custom-id주의해서 사용하세요! 대상이 사용하는 Custom ID에 대한 정규식입니다. 값은 반드시 따옴표로 묶어 전달하세요. 자세한 내용은 아래 섹션을 참조하세요.
-iq--ignore-querystring쿼리 문자열(URL 프래그먼트 # 포함)을 제거하여 고유한 경로만 출력되도록 합니다.
-fnp--fragment-not-paramURL 프래그먼트 #을 매개변수와 동일하게 취급하지 않습니다. 예를 들어 링크에 필터 키워드와 프래그먼트(또는 매개변수)가 있으면 일반적으로 링크는 유지되지만, 이 인자를 전달하고 링크에 필터 단어와 프래그먼트가 있으면 링크가 제거됩니다. 또한 이 인자를 전달하고 -iq / --ignore-querystring을 사용하는 경우, 링크에 쿼리 문자열이 없으면 프래그먼트는 제거되지 않습니다.
-lang--language이 인자를 전달하고 경로의 일부로 서로 다른 언어 코드를 가진 URL이 여러 개 있는 경우, URL의 한 버전만 출력됩니다. 코드는 config.yml의 LANGUAGE 섹션에 지정됩니다.
-c--configYML 설정 파일의 경로입니다. 전달하지 않으면 기본 설정 디렉터리(예: ~/.config/urless/)에서 config.yml 파일을 찾습니다.
-dp--disregard-paramsURL에 매개변수가 있으면 수행되지 않는 특정 필터링이 있습니다. 기본적으로 가능한 모든 매개변수를 보려고 하기 때문입니다. 이 인자를 전달하면 매개변수의 존재 여부와 관계없이 필터링이 수행됩니다.
-nb--no-banner도구 배너 출력을 숨깁니다 (urless에 입력을 파이프하면 기본적으로 숨겨집니다).
--version현재 버전 번호를 표시합니다.
-v--verbose상세 출력
UNWANTED-CONTENT
  • URL 경로의 일부에 대시(-)가 3개 이상 포함되어 있지만 GUID는 아닌 경우입니다. 이는 사람이 작성한 콘텐츠를 의미합니다(예: how-to-hack-the-planet). -khw 인자를 전달하면 제거되지 않습니다.
  • URL에 /YYYY/MM/(예: 연도, 월)이 포함된 경우입니다. 이는 일반적으로 블로그와 같은 정적 콘텐츠입니다. -kym 인자를 전달하면 제거되지 않습니다.
AND
-dp
--disregard-params
  • 동일한 매개변수를 가진 URL이 여러 개 있으면 고유한 매개변수 값을 가진 URL만 포함됩니다.
  • 매개변수는 있지만 값(또는 프래그먼트)이 없는 URL이 있으면 이는 포함됩니다.