80,443 - Pentesting Web Methodology
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
웹 앱, 네트워크 및 클라우드에 대한 해커의 관점을 얻으세요.
실제 비즈니스에 영향을 미치는 중요한, 악용 가능한 취약점을 찾아보고 보고하세요. 공격 표면을 매핑하고 권한 상승을 허용하는 보안 문제를 찾아내며, 필수 증거를 수집하기 위해 자동화된 익스플로잇을 사용하여 귀하의 노력을 설득력 있는 보고서로 전환하는 20개 이상의 맞춤형 도구를 사용하세요.
웹 서비스는 가장 일반적이고 광범위한 서비스이며, 많은 다양한 유형의 취약점이 존재합니다.
기본 포트: 80 (HTTP), 443(HTTPS)
이 방법론에서는 도메인(또는 서브도메인)을 공격한다고 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 범위 내의 불확실한 웹 서버가 있는 IP에 이 방법론을 적용해야 합니다.
실행 중인 서버 버전에 대한 알려진 취약점이 있는지 확인합니다. 응답의 HTTP 헤더 및 쿠키는 사용 중인 기술 및/또는 버전을 식별하는 데 매우 유용할 수 있습니다. Nmap 스캔은 서버 버전을 식별할 수 있지만, whatweb, webtech 또는 https://builtwith.com/와 같은 도구도 유용할 수 있습니다:
Search for 웹 애플리케이션의 취약점 버전
다양한 잘 알려진 기술에서 취약점을 찾기 위한 트릭:
같은 도메인이 다른 기술을 다른 포트, 폴더 및 서브도메인에서 사용할 수 있다는 점을 고려하세요. 웹 애플리케이션이 이전에 나열된 잘 알려진 기술/플랫폼이나 다른 것을 사용하고 있다면, 인터넷에서 새로운 트릭을 검색하는 것을 잊지 마세요 (그리고 저에게 알려주세요!).
애플리케이션의 소스 코드가 github에 있는 경우, 애플리케이션에 대해 자신의 화이트 박스 테스트를 수행하는 것 외에도 현재 블랙 박스 테스트에 유용한 정보가 있을 수 있습니다:
변경 로그 또는 README 또는 버전 파일이 있거나 웹을 통해 버전 정보에 접근할 수 있는 것이 있나요?
자격 증명은 어떻게 그리고 어디에 저장되나요? 자격 증명(사용자 이름 또는 비밀번호)이 포함된 (접근 가능한?) 파일이 있나요?
비밀번호는 일반 텍스트, 암호화되어 있거나 어떤 해싱 알고리즘이 사용되나요?
어떤 것을 암호화하기 위해 마스터 키를 사용하고 있나요? 어떤 알고리즘이 사용되나요?
어떤 취약점을 이용해 이 파일들에 접근할 수 있나요?
github에 (해결된 것과 해결되지 않은 것) 문제에 흥미로운 정보가 있나요? 또는 커밋 기록에 (아마도 오래된 커밋에 포함된 비밀번호)?
CMS가 사용된다면 스캐너를 실행하는 것을 잊지 마세요, 아마도 흥미로운 것이 발견될 수 있습니다:
Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish CMSScan: WordPress, Drupal, Joomla, vBulletin 웹사이트의 보안 문제. (GUI) VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart CMSMap: (W)ordpress, (J)oomla, (D)rupal 또는 (M)oodle droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress
이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있을 경우)를 이미 가지고 있어야 하며, 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 발견하고 스캐너를 실행했을 것입니다.
이 시점부터 웹 애플리케이션과 상호작용을 시작할 것입니다.
흥미로운 정보가 있는 기본 페이지:
/robots.txt
/sitemap.xml
/crossdomain.xml
/clientaccesspolicy.xml
/.well-known/
주요 및 보조 페이지의 주석도 확인하세요.
오류 강제 발생
웹 서버는 이상한 데이터가 전송될 때 예상치 못한 방식으로 동작할 수 있습니다. 이는 취약점이나 민감한 정보의 노출을 열 수 있습니다.
/whatever_fake.php (.aspx, .html 등)와 같은 가짜 페이지에 접근하기
쿠키 값 및 매개변수 값에 "[]", "]]", 및 "[[" 추가하여 오류 생성
URL의 끝에 **/~randomthing/%s
**로 입력하여 오류 생성
PATCH, DEBUG 또는 FAKE와 같은 다양한 HTTP 동사 시도
WebDav가 활성화되어 있지만 루트 폴더에 파일 업로드를 위한 충분한 권한이 없는 경우 다음을 시도하세요:
자격 증명 무작위 대입
웹 페이지 내에서 발견된 폴더의 나머지에 WebDav를 통해 파일 업로드. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다.
애플리케이션이 어떤 부분에서도 HTTPS 사용을 강제하지 않는다면, 이는 MitM 공격에 취약합니다.
애플리케이션이 HTTP를 사용하여 민감한 데이터(비밀번호)를 전송하는 경우. 이는 높은 취약점입니다.
testssl.sh를 사용하여 취약점을 확인하고 (버그 바운티 프로그램에서는 이러한 종류의 취약점이 수용되지 않을 수 있습니다) a2sv를 사용하여 취약점을 재확인하세요:
정보 SSL/TLS 취약점에 대한:
웹 내에서 어떤 종류의 스파이더를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 가능한 많은 경로를 찾는 것입니다. 따라서 웹 크롤링과 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다.
gospider (go): HTML 스파이더, JS 파일 및 외부 소스(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)에서 링크 찾기.
hakrawler (go): HML 스파이더, JS 파일에 대한 LinkFinder 및 Archive.org를 외부 소스로 사용.
dirhunt (python): HTML 스파이더, "juicy files"도 표시.
evine (go): 대화형 CLI HTML 스파이더. Archive.org에서도 검색합니다.
meg (go): 이 도구는 스파이더는 아니지만 유용할 수 있습니다. 호스트가 있는 파일과 경로가 있는 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다.
urlgrab (go): JS 렌더링 기능이 있는 HTML 스파이더. 그러나 유지 관리되지 않는 것처럼 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다.
gau (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더.
ParamSpider: 이 스크립트는 매개변수가 있는 URL을 찾아 나열합니다.
galer (go): JS 렌더링 기능이 있는 HTML 스파이더.
LinkFinder (python): HTML 스파이더, JS 파일에서 새로운 경로를 검색할 수 있는 JS beautify 기능이 있습니다. JSScanner도 살펴볼 가치가 있습니다. 이는 LinkFinder의 래퍼입니다.
goLinkFinder (go): HTML 소스와 내장된 자바스크립트 파일 모두에서 엔드포인트를 추출합니다. 버그 헌터, 레드 팀원, 정보 보안 전문가에게 유용합니다.
JSParser (python2.7): JavaScript 파일에서 상대 URL을 구문 분석하기 위해 Tornado와 JSBeautifier를 사용하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것처럼 보입니다.
relative-url-extractor (ruby): 파일(HTML)을 주면 멋진 정규 표현식을 사용하여 더럽고(minify) 파일에서 상대 URL을 찾아 추출합니다.
JSFScan (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보를 수집합니다.
subjs (go): JS 파일을 찾습니다.
page-fetch (go): 헤드리스 브라우저에서 페이지를 로드하고 페이지를 로드하는 데 필요한 모든 URL을 인쇄합니다.
Feroxbuster (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 발견 도구.
Javascript Parsing: JS 파일에서 경로와 매개변수를 찾기 위한 Burp 확장.
Sourcemapper: .js.map URL을 주면 아름답게 정리된 JS 코드를 가져오는 도구.
xnLinkFinder: 주어진 대상을 위한 엔드포인트를 발견하는 데 사용되는 도구입니다.
waymore: Wayback 머신에서 링크를 발견합니다(응답을 다운로드하고 더 많은 링크를 찾습니다).
HTTPLoot (go): 양식 작성까지 크롤링하고 특정 정규 표현식을 사용하여 민감한 정보를 찾습니다.
SpiderSuite: Spider Suite는 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더입니다.
ParaForge: ParaForge는 요청에서 매개변수와 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 단어 목록을 생성하는 간단한 Burp Suite 확장입니다.
katana (go): 이를 위한 멋진 도구입니다.
Crawley (go): 찾을 수 있는 모든 링크를 인쇄합니다.
루트 폴더에서 무차별 대입을 시작하고 이 방법을 사용하여 발견된 모든 디렉토리를 무차별 대입해야 하며, 스파이더링에 의해 발견된 모든 디렉토리도 포함해야 합니다(이 무차별 대입을 재귀적으로 수행하고 사용된 단어 목록의 시작 부분에 발견된 디렉토리 이름을 추가할 수 있습니다). 도구:
Dirb / Dirbuster - Kali에 포함되어 있으며, 오래된 (및 느린) 하지만 기능적입니다. 자동 서명된 인증서를 허용하고 재귀 검색을 지원합니다. 다른 옵션에 비해 너무 느립니다.
Dirsearch (python): 자동 서명된 인증서를 허용하지 않지만 재귀 검색을 허용합니다.
Gobuster (go): 자동 서명된 인증서를 허용하며, 재귀 검색이 없습니다.
Feroxbuster - 빠르며, 재귀 검색을 지원합니다.
wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
ffuf - 빠름: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
uro (python): 이 도구는 스파이더는 아니지만 발견된 URL 목록을 주면 "중복된" URL을 삭제합니다.
Scavenger: 다양한 페이지의 burp 기록에서 디렉토리 목록을 생성하기 위한 Burp 확장입니다.
TrashCompactor: 기능이 중복된 URL을 제거합니다(기반 js 가져오기).
Chamaleon: 사용된 기술을 감지하기 위해 wapalyzer를 사용하고 사용할 단어 목록을 선택합니다.
추천 사전:
raft-large-directories-lowercase.txt
directory-list-2.3-medium.txt
RobotsDisallowed/top10000.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
무차별 대입 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 무차별 대입해야 합니다.
Broken link checker: 인수인계가 발생할 수 있는 HTML 내의 끊어진 링크를 찾습니다.
파일 백업: 모든 파일을 찾은 후, 모든 실행 파일의 백업을 찾습니다(".php", ".aspx"...). 백업 이름의 일반적인 변형은: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 및 file.old. 도구 bfac 또는 backup-gen을 사용할 수 있습니다.
새로운 매개변수 발견: Arjun, parameth, x8 및 Param Miner 와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 웹 파일에서 숨겨진 매개변수를 검색해 보십시오.
Arjun 모든 기본 단어 목록: https://github.com/s0md3v/Arjun/tree/master/arjun/db
Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
댓글: 모든 파일의 댓글을 확인하십시오. 자격 증명 또는 숨겨진 기능을 찾을 수 있습니다.
CTF를 진행 중이라면, "일반적인" 트릭은 페이지의 오른쪽에 있는 댓글 안에 정보를 숨기는 것입니다(브라우저로 소스 코드를 열면 데이터를 볼 수 없도록 수백 개의 공백을 사용). 다른 가능성은 여러 개의 새 줄을 사용하고 웹 페이지의 하단에 있는 댓글에 정보를 숨기는 것입니다.
API 키: API 키를 찾으면 다양한 플랫폼의 API 키 사용 방법을 안내하는 가이드가 있습니다: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
Google API 키: AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik와 같은 API 키를 찾으면 gmapapiscanner 프로젝트를 사용하여 키가 접근할 수 있는 API를 확인할 수 있습니다.
S3 버킷: 스파이더링 중에 서브도메인이나 링크가 S3 버킷과 관련이 있는지 확인하십시오. 그런 경우, 버킷의 권한을 확인하십시오.
스파이더링 및 무차별 대입을 수행하는 동안 흥미로운 것들을 주목해야 합니다.
흥미로운 파일
CSS 파일 내의 다른 파일에 대한 링크를 찾습니다.
.env를 찾으면 API 키, DB 비밀번호 및 기타 정보를 찾을 수 있습니다.
API 엔드포인트를 찾으면 테스트해야 합니다. 이들은 파일은 아니지만 아마도 "파일처럼" 보일 것입니다.
JS 파일: 스파이더링 섹션에서 JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한 발견된 각 JS 파일을 모니터링하는 것이 흥미로울 것입니다. 경우에 따라 변경 사항이 코드에 잠재적인 취약점이 도입되었음을 나타낼 수 있습니다. 예를 들어 JSMon을 사용할 수 있습니다.
Javascript Deobfuscator 및 Unpacker: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator
Javascript Beautifier: http://jsbeautifier.org/, http://jsnice.org/
JsFuck 디오브퍼케이션 (문자와 함께 자바스크립트: "[]!+" https://enkhee-osiris.github.io/Decoder-JSFuck/)
TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
여러 경우에 사용된 정규 표현식을 이해해야 할 필요가 있습니다. 유용할 것입니다: https://regex101.com/ 또는 https://pythonium.net/regex
양식이 감지된 파일을 모니터링해야 할 수도 있습니다. 매개변수의 변경이나 새로운 양식의 출현은 잠재적인 새로운 취약한 기능을 나타낼 수 있습니다.
403 금지/기본 인증/401 권한 없음 (우회)
502 프록시 오류
어떤 페이지가 코드로 응답하면, 아마도 잘못 구성된 프록시일 것입니다. GET https://google.com HTTP/1.1
와 같은 HTTP 요청을 보내면(호스트 헤더 및 기타 일반 헤더 포함), 프록시는 _google.com_에 접근하려고 시도하며, 이로 인해 SSRF를 발견하게 됩니다.
NTLM 인증 - 정보 공개
인증을 요청하는 서버가 Windows이거나 자격 증명을 요청하는 로그인 화면을 발견하면(및 도메인 이름을 요청하는 경우), 정보 공개를 유도할 수 있습니다.
헤더를 전송하십시오: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”
그리고 NTLM 인증이 작동하는 방식 때문에, 서버는 "WWW-Authenticate" 헤더 내에 내부 정보(IIS 버전, Windows 버전 등...)로 응답할 것입니다.
이 작업은 nmap 플러그인 "http-ntlm-info.nse"를 사용하여 자동화할 수 있습니다.
HTTP 리디렉션 (CTF)
리디렉션 내에 내용을 넣는 것이 가능합니다. 이 내용은 사용자에게 표시되지 않습니다(브라우저가 리디렉션을 실행하기 때문에) 하지만 그 안에 숨겨진 것이 있을 수 있습니다.
웹 애플리케이션에 대한 포괄적인 열거가 수행되었으므로, 이제 많은 가능한 취약점을 확인할 시간입니다. 체크리스트는 여기에서 찾을 수 있습니다:
웹 취약점에 대한 더 많은 정보는 다음에서 찾을 수 있습니다:
https://github.com/dgtlmoon/changedetection.io와 같은 도구를 사용하여 취약점을 삽입할 수 있는 수정 사항을 모니터링할 수 있습니다.
웹 앱, 네트워크 및 클라우드에 대한 해커의 관점을 얻으십시오
실제 비즈니스에 영향을 미치는 중요한 취약점을 찾아보고 보고하십시오. 공격 표면을 매핑하고 권한 상승을 허용하는 보안 문제를 찾아내고, 자동화된 익스플로잇을 사용하여 필수 증거를 수집하여 귀하의 노력을 설득력 있는 보고서로 전환하는 20개 이상의 맞춤형 도구를 사용하십시오.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)