
정적 확장자, 원치 않는 키워드, ID, 언어 변형 및 매개변수를 제거하여 대규모 URL 목록을 필터링하고 중복을 제거함으로써 웹 정찰을 위한 깨끗한 엔드포인트 집합을 생성합니다.
이 도구는 URL 목록을 정리(de-clutter)하는 데 사용됩니다. 출발점으로 Somdev Sangwan의 놀라운 도구인 uro를 사용했습니다. 하지만 몇 가지를 변경하고, (GUID 처리 같은) 개선을 만들고, 더 커스터마이즈 가능하게 만들고 싶었습니다.
urless는 Python 3을 지원합니다.
기본(전역) Python 환경에 urless를 설치하세요.
pip install urless
또는
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
다음으로 업그레이드할 수 있습니다:
pip install --upgrade urless
pipx를 사용한 격리된 Python 환경에서의 빠른 설정
pipx install git+https://github.com/xnl-h4ck3r/urless.git
기본적으로 (파일에서 또는 STDIN에서 파이프로) URL 목록을 입력하면 정리된 파일 또는 URL이 출력됩니다. 하지만 어떤 방식으로 정리될까요? 아래에서 설명하겠지만, 먼저 사용될 몇 가지 용어가 있습니다:
-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가 사용됩니다.-fk로 전달하거나 config.yml의 FILTER_KEYWORDS에 지정할 수 있는 키워드 목록을 의미합니다. 둘 다 없으면 기본 목록인 blog,article,news,bootstrap,jquery,captcha,node_modules가 사용됩니다.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가 사용됩니다.다음과 같은 작업이 수행됩니다:
-dp/--disregard-params 인자가 전달된 경우:
REMOVE_PARAMS에 지정된(또는 -rp/--remove-params 인자로 재정의된) 원치 않는 매개변수가 포함된 경우, 처리 전에 모든 URL에서 제거됩니다.-rcid/--regex-custom-id가 전달되고 URL 경로에 Custom ID가 포함된 경우, Custom ID가 유일한 차이인 URL이 여러 개 있으면 Custom ID 정규식에 일치하는 항목 하나만 포함됩니다.-lang 인자가 전달되고 URL에 언어 코드(예: en-gb)가 포함된 경우, 언어 코드가 다른 URL이 여러 개 있으면 언어 코드 중 하나만 포함됩니다.#)가 있고 / 인자가 전달되지 않은 경우:
cat target_urls.txt | urless
또는
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
또는
urless -i target_urls.txt -o output.txt
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를 가지고 있다고 가정합니다.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]'를 전달하면 출력은 다음과 같습니다:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
중요한 정규식 참고 사항:
-rcid 인자에 전달할 때는 항상 정규식 표현식을 작은따옴표로 묶으세요.[^(\?|\/|#|$)]*를 추가하면 경로 부분 끝까지의 모든 다른 문자를 의미합니다.^, 끝에 $를 추가하여 슬래시 사이의 경로 전체 부분을 나타내도록 할 수 있습니다. 하지만 생략하면 자동으로 추가됩니다.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]'를 실행하여 표현식이 올바른지 확인할 수 있습니다 (관심 있는 부분만 강조하고 사용자 정의 ID인 경로의 전체 부분을 강조해야 합니다).https://target.com/blah/xnl/settings와 같은 URL에서 xnl이 사용자 이름인 경우, 사용자 이름은 다른 가능한 경로 값과 구분할 만큼 고유한 형식이 아니므로 사용자 이름에 대한 정규식을 만들 수 없습니다.문제가 발생하거나 개선 아이디어가 있으면 언제든지 Github에 이슈를 등록해 주세요. 문제가 있는 경우 실행한 정확한 명령어와 문제에 대한 자세한 설명을 제공해 주시면 도움이 됩니다. 가능하면 -v 플래그로 문제를 재현하고 표시되는 오류 메시지를 알려주세요.
없음 - 개선 사항을 제안하려면 Github 이슈를 자유롭게 등록하세요.
행운을 빕니다, 좋은 사냥 되세요! 이 도구(또는 다른 도구)가 정말 마음에 들거나 훌륭한 바운티를 찾는 데 도움이 되었다면, 커피 한 잔 사주시는 것을 고려해 주세요! ☕ (카페인이 필요해요!)
🤘 /XNL-h4ck3r
| 인자 | 긴 인자 | 설명 |
|---|
| -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-param | URL 프래그먼트 #을 매개변수와 동일하게 취급하지 않습니다. 예를 들어 링크에 필터 키워드와 프래그먼트(또는 매개변수)가 있으면 일반적으로 링크는 유지되지만, 이 인자를 전달하고 링크에 필터 단어와 프래그먼트가 있으면 링크가 제거됩니다. 또한 이 인자를 전달하고 -iq / --ignore-querystring을 사용하는 경우, 링크에 쿼리 문자열이 없으면 프래그먼트는 제거되지 않습니다. |
| -lang | --language | 이 인자를 전달하고 경로의 일부로 서로 다른 언어 코드를 가진 URL이 여러 개 있는 경우, URL의 한 버전만 출력됩니다. 코드는 config.yml의 LANGUAGE 섹션에 지정됩니다. |
| -c | --config | YML 설정 파일의 경로입니다. 전달하지 않으면 기본 설정 디렉터리(예: ~/.config/urless/)에서 config.yml 파일을 찾습니다. |
| -dp | --disregard-params | URL에 매개변수가 있으면 수행되지 않는 특정 필터링이 있습니다. 기본적으로 가능한 모든 매개변수를 보려고 하기 때문입니다. 이 인자를 전달하면 매개변수의 존재 여부와 관계없이 필터링이 수행됩니다. |
| -nb | --no-banner | 도구 배너 출력을 숨깁니다 (urless에 입력을 파이프하면 기본적으로 숨겨집니다). |
| --version | 현재 버전 번호를 표시합니다. | |
| -v | --verbose | 상세 출력 |
-)가 3개 이상 포함되어 있지만 GUID는 아닌 경우입니다. 이는 사람이 작성한 콘텐츠를 의미합니다(예: how-to-hack-the-planet). -khw 인자를 전달하면 제거되지 않습니다./YYYY/MM/(예: 연도, 월)이 포함된 경우입니다. 이는 일반적으로 블로그와 같은 정적 콘텐츠입니다. -kym 인자를 전달하면 제거되지 않습니다.-dp--disregard-params