
POST 및 GET에서 매개변수 무차별 대입과 같은 다양한 방법을 사용하는 스마트 SSRF 스캐너...
이 도구는 사전 정의된 설정을 사용하여 다양한 요청 부분(경로, 호스트, 헤더, POST 및 GET 파라미터)에서 SSRF를 검색합니다.
__example.app-settings.conf__를 __app-settings.conf__로 이름을 바꾸고 설정을 조정하세요. 가장 중요한 설정은 콜백 URL입니다. Burp Collaborator 사용을 권장합니다.
그런 다음 config/url-to-test.txt에 URL을 추가할 수 있습니다. 이 스크립트는 도메인뿐만 아니라 경로와 쿼리 파라미터가 포함된 URL도 허용합니다.
원한다면 config/cookie-jar.txt에 자신의 쿠키를 추가하고 요청에 추가 헤더를 추가할 수 있습니다. POST 및 GET 요청에 사용되는 무차별 대입 목록은 현재 작습니다. 2000개의 파라미터를 추가하는 것은 현명하지 않다고 생각합니다. 취약할 가능성이 가장 높은 파라미터에 집중해야 합니다. 동의하지 않는다면 직접 추가하세요!
이 도구는 CLI를 통해 인수를 받지 않으므로 그냥 입력하세요:
python3 extended-ssrf-search.py
많은 옵션과 설정을 지정할 수 있으므로 몇 가지 설명을 제공합니다.
기본 구성 파일은 "app-settings.conf"이며 모든 작업은 해당 파일에서 이루어져야 합니다! 그 외에도 헤더, URL, 쿠키와 같은 더 복잡한 데이터를 설정할 수 있는 다른 파일들이 있습니다.
config/cookie-jar.txt
이 파일을 사용하여 쿠키 문자열을 추가하세요. 저는 보통 모든 Burp 요청에서 볼 수 있는 쿠키를 복사합니다. "Cookie:" 헤더의 값만 복사하세요. 샘플 입력은 기본 파일에 있습니다.
config/http-headers.txt
이 파일은 요청에 추가되고 조작되는 HTTP 헤더를 정의합니다 (각 헤더에 페이로드가 추가됩니다). 가장 중요한 헤더들은 이미 파일에 있습니다. 하지만 더 추가해도 됩니다.
config/parameters.txt
이 도구는 GET 및 POST 파라미터를 무차별 대입하는 옵션이 있습니다. 이 경우 해당 파라미터(+ 쿼리 문자열의 파라미터)가 사용됩니다. 각 파라미터는 페이로드를 값으로 받습니다. 가장 중요한 파라미터들은 이미 해당 파일에 있습니다.
config/static-request-headers.txt
이 헤더들은 모든 요청에 추가되지만 조작되지는 않습니다. 정적 헤더입니다. 인증 또는 Bearer 쿠키를 추가하기에 가장 좋은 위치입니다. 한 줄에 하나의 (키: 값) 형식입니다!
config/urls-to-test.txt
이것이 필요한 파일입니다! 스캔할 링크를 여기에 추가하세요. 다음 형식이 허용됩니다:
마지막 경우가 감지되면 "http://"가 앞에 추가됩니다. 이 도구는 양호한 URL 목록과 함께 작동하도록 설계되었습니다. 좋은 목록을 얻는 방법은 Burp을 사용하여 내보내는 것입니다. 그러면 유효한 URL 목록을 얻을 수 있습니다. 쿠키만 추가하면 됩니다.
app-settings.conf는 프로그램 워크플로를 정의합니다. 가장 중요한 파일이며 여기서 다양한 모듈을 활성화/비활성화할 수 있습니다.
CallbackHost
모든 DNS 및 HTTP 요청이 다시 전송되는 URL/호스트입니다. 저는 주로 Burp Collaborator를 사용하지만 DNSBin이나 자체 서버도 완벽합니다.
HTTPMethod
요청 메서드를 정의합니다. 유효한 옵션: GET, POST, PUT, DELETE, PATCH, GET, OPTIONS 잘못된 값은 http.client가 다른 메서드를 허용하지 않으므로 심각한 오류를 발생시킵니다! 여기서 실수하는지 확인하지 않습니다 ;)
HTTPTimeout
일부 요청은 오래 걸릴 수 있습니다. 여기서 하나의 요청에 대한 최대 실행 시간을 정의할 수 있습니다. 2~6초 사이의 값을 권장합니다.
MaxThreads
스레드가 많을수록 스크립트가 빨라지지만, 많은 연결을 처리하기 때문에 개인 컴퓨터에서는 보통 10 미만으로, VPS에서는 약 30으로 유지합니다.
ShuffleTests
특히 큰 URL 목록을 다룰 때 이 값을 "true"로 설정하면 생성된 모든 테스트가 섞입니다. 이렇게 하면 동일한 호스트가 너무 많이 요청되지 않습니다. 하나의 호스트만 스캔하는 경우에는 상관없습니다.
GetChunkSize
더 큰 파라미터 목록을 다룰 때 유용하며 400 Too Large Entity 오류를 방지할 수 있습니다.
각 삽입 지점은 활성화(true/1로 설정) 또는 비활성화(false/0으로 설정)할 수 있습니다.
InPath
예제는 GET 요청을 보여주지만 설정에 따라 POST, PUT, DELETE 등이 될 수도 있습니다.
GET [INJECT HERE PAYLOAD] HTTP/1.1
...
InHost
예제는 GET 요청을 보여주지만 설정에 따라 POST, PUT, DELETE 등이 될 수도 있습니다.
GET /path HTTP/1.1
Host: [INJECT HERE PAYLOAD]
...
InAdditionalHeaders
예제는 GET 요청을 보여주지만 설정에 따라 POST, PUT, DELETE 등이 될 수도 있습니다.
GET /path HTTP/1.1
...
X-Forwarded-For: [INJECT HERE PAYLOAD]
InParamsGet
여기서 메서드는 GET으로 고정됩니다.
GET /path?[INJECT HERE PAYLOAD] HTTP/1.1
...
InParamsPost
여기서 메서드는 POST로 고정됩니다.
POST /path HTTP/1.1
...
Content-Type: application/x-www-form-urlencoded
Content-Length: XXX
[INJECT HERE PAYLOAD]
InParamsPostAsJson
여기서 메서드는 POST로 고정됩니다.
POST /path HTTP/1.1
...
Content-Type: application/json
Content-Length: XXX
[INJECT HERE JSON-PAYLOAD]
기본 설정에서 이 도구는 SSRF를 통해 HTTP 요청을 트리거하려고 시도합니다. 하지만 OS 명령이 주입될 때 DNS를 사용하여 데이터를 유출하는 것도 가능합니다. 가장 일반적인 페이로드는 "$(hostname)"입니다. 이와 같은 공격을 추가로 사용할 수 있는 몇 가지 옵션이 있습니다.
UseExecPayload
이 설정을 사용하여 해당 동작을 활성화/비활성화할 수 있습니다.
ExecPayload
여기서 자신의 페이로드를 정의할 수 있습니다. 예: $(uname -a)
식별을 좀 더 쉽게 하기 위해 현재 호스트와 메서드의 조합(약식, Tests.py 참조)이 페이로드에 추가되거나 앞에 붙습니다.
Position
유효한 옵션은 "append"와 "prepend"입니다!
"append"를 선택하면 페이로드는 다음과 같이 보입니다:
....burpcollaborator.net/www.attacked-domain.com-testmethod
http://....burpcollaborator.net/www.attacked-domain.com-testmethod
"prepend"를 선택하면 페이로드는 다음과 같이 보입니다:
www.attacked-domain.com-testmethod.burpcollaborator.net
http://www.attacked-domain.com-testmethod.burpcollaborator.net/
터널(예: "127.0.0.1:8080" (Burp 프록시))을 사용하여 Burp 내에서 모든 트래픽을 모니터링할 수도 있습니다.
Active
이 값을 "true"로 설정하면 스크립트가 터널링된 연결을 사용하도록 강제합니다.
Tunnel
여기에 프록시 서버 "ip:port"를 설정하세요.
결과는 다음과 같습니다. Burp를 열면 HTTP 기록을 볼 수 있습니다:


이슈를 생성하고 기능 요청으로 태그해 주세요.
이 도구가 마음에 드시나요? 바운티를 받는 데 도움이 되었나요? 보답하거나 저를 지원하고 싶으신가요? 왜 안 되겠어요!