80,443 - Pentesting Web Methodology

Support HackTricks

If you are interested in hacking career and hack the unhackable - we are hiring! (유창한 폴란드어 필기 및 구사 필요).

Basic Info

웹 서비스는 가장 일반적이고 광범위한 서비스이며 많은 다양한 유형의 취약점이 존재합니다.

기본 포트: 80 (HTTP), 443(HTTPS)

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Web API Guidance

Web API Pentesting

Methodology summary

이 방법론에서는 도메인(또는 서브도메인)을 공격한다고 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 범위 내의 불확실한 웹 서버가 있는 IP에 이 방법론을 적용해야 합니다.

Server Version (Vulnerable?)

Identify

실행 중인 서버 버전에 대한 알려진 취약점이 있는지 확인합니다. 응답의 HTTP 헤더 및 쿠키는 사용 중인 기술 및/또는 버전식별하는 데 매우 유용할 수 있습니다. Nmap 스캔은 서버 버전을 식별할 수 있지만, whatweb, webtech 또는 https://builtwith.com/와 같은 도구도 유용할 수 있습니다:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Search for 웹 애플리케이션의 취약점 버전

WAF 확인하기

웹 기술 트릭

다양한 잘 알려진 기술에서 취약점을 찾기 위한 트릭:

같은 도메인이 다른 기술다른 포트, 폴더서브도메인에서 사용할 수 있다는 점을 고려하세요. 웹 애플리케이션이 이전에 나열된 잘 알려진 기술/플랫폼이나 다른 것을 사용하고 있다면, 인터넷에서 새로운 트릭을 검색하는 것을 잊지 마세요 (그리고 저에게 알려주세요!).

소스 코드 검토

애플리케이션의 소스 코드github에 있는 경우, 애플리케이션에 대해 자신이 직접 화이트 박스 테스트를 수행하는 것 외에도 현재 블랙 박스 테스트유용한 정보가 있을 수 있습니다:

  • 변경 로그 또는 README 또는 버전 파일이 있거나 웹을 통해 버전 정보에 접근할 수 있는 것이 있나요?

  • 자격 증명은 어떻게 어디에 저장되나요? 자격 증명(사용자 이름 또는 비밀번호)이 포함된 (접근 가능한?) 파일이 있나요?

  • 비밀번호일반 텍스트, 암호화되어 있거나 어떤 해싱 알고리즘이 사용되나요?

  • 어떤 것을 암호화하기 위해 마스터 키를 사용하고 있나요? 어떤 알고리즘이 사용되나요?

  • 어떤 취약점을 이용해 이 파일들에 접근할 수 있나요?

  • github에 (해결된 것과 해결되지 않은 것) 문제흥미로운 정보가 있나요? 또는 커밋 기록에 (아마도 오래된 커밋에 포함된 비밀번호)?

Source code Review / SAST Tools

자동 스캐너

일반 목적의 자동 스캐너

nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>

# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"

CMS 스캐너

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

cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있을 경우)를 이미 가지고 있어야 하며, 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 발견하고 스캐너를 실행했을 것입니다.

단계별 웹 애플리케이션 탐색

이 시점부터 웹 애플리케이션과 상호작용을 시작할 것입니다.

초기 점검

흥미로운 정보가 있는 기본 페이지:

  • /robots.txt

  • /sitemap.xml

  • /crossdomain.xml

  • /clientaccesspolicy.xml

  • /.well-known/

  • 주요 및 보조 페이지의 주석도 확인하세요.

오류 강제 발생

웹 서버는 이상한 데이터가 전송될 때 예상치 못한 방식으로 동작할 수 있습니다. 이는 취약점이나 민감한 정보의 노출을 열 수 있습니다.

  • /whatever_fake.php (.aspx, .html, 등)와 같은 가짜 페이지에 접근하기

  • 쿠키 값매개변수 값에 "[]", "]]", 및 "[[" 추가하여 오류 생성

  • URL에 **/~randomthing/%s**를 입력하여 오류 생성

  • PATCH, DEBUG 또는 FAKE와 같은 다른 HTTP 동사 시도

파일 업로드 가능 여부 확인 (PUT 동사, WebDav)

WebDav활성화되어 있지만 루트 폴더에 파일 업로드를 위한 충분한 권한이 없는 경우 다음을 시도하세요:

  • 자격 증명 무차별 대입

  • 웹 페이지 내에서 발견된 폴더나머지에 WebDav를 통해 파일 업로드. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다.

SSL/TLS 취약점

  • 애플리케이션이 어떤 부분에서도 HTTPS 사용을 강제하지 않는다면, 이는 MitM 공격에 취약합니다.

  • 애플리케이션이 HTTP를 사용하여 민감한 데이터(비밀번호)를 전송하는 경우, 이는 높은 취약점입니다.

testssl.sh를 사용하여 취약점을 확인하고 (버그 바운티 프로그램에서는 이러한 종류의 취약점이 수용되지 않을 수 있습니다) a2sv를 사용하여 취약점을 재확인하세요:

./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also

# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>

정보 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): JS 파일에서 새로운 경로를 검색할 수 있는 JS beautify 기능이 있는 HTML 스파이더. JSScanner도 살펴볼 가치가 있습니다. 이는 LinkFinder의 래퍼입니다.

  • goLinkFinder (go): HTML 소스와 내장된 자바스크립트 파일 모두에서 엔드포인트를 추출합니다. 버그 헌터, 레드 팀원, 정보 보안 전문가에게 유용합니다.

  • JSParser (python2.7): 자바스크립트 파일에서 상대 URL을 구문 분석하기 위해 Tornado와 JSBeautifier를 사용하는 파이썬 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것처럼 보입니다.

  • relative-url-extractor (ruby): 파일(HTML)을 주면 멋진 정규 표현식을 사용하여 상대 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 웹 보안 크롤러/스파이더입니다.

  • jsluice (go): URL, 경로, 비밀 및 기타 흥미로운 데이터를 자바스크립트 소스 코드에서 추출하기 위한 Go 패키지 및 명령줄 도구입니다.

  • 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를 사용하고 사용할 단어 목록을 선택합니다.

추천 사전:

무차별 대입 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 무차별 대입해야 합니다.

발견된 각 파일에서 확인할 사항

  • 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

  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/

  • 주석: 모든 파일의 주석을 확인하십시오. 자격 증명 또는 숨겨진 기능을 찾을 수 있습니다.

  • 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을 사용할 수 있습니다.

  • 발견된 JS 파일을 RetireJS 또는 JSHole로 확인하여 취약한지 확인해야 합니다.

  • 자바스크립트 디오브스큐레이터 및 언패커: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator

  • 자바스크립트 뷰티파이어: http://jsbeautifier.org/, http://jsnice.org/

  • JsFuck 디오브스큐에이션 (문자와 함께 자바스크립트: "[]!+" https://ooze.ninja/javascript/poisonjs/)

  • TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.

  • 여러 경우에 정규 표현식을 이해해야 할 필요가 있습니다. 이는 유용할 것입니다: https://regex101.com/

  • 양식이 감지된 파일을 모니터링해야 하며, 매개변수의 변경이나 새로운 양식의 출현은 잠재적인 새로운 취약한 기능을 나타낼 수 있습니다.

403 금지/기본 인증/401 권한 없음 (우회)

403 & 401 Bypasses

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)

리디렉션 내에 내용넣는 것이 가능합니다. 이 내용은 사용자에게 표시되지 않습니다(브라우저가 리디렉션을 실행하기 때문입니다) 그러나 그 안에 숨겨진 것이 있을 수 있습니다.

웹 취약점 확인

웹 애플리케이션에 대한 포괄적인 열거가 수행되었으므로 이제 많은 가능한 취약점을 확인할 시간입니다. 체크리스트는 여기에서 찾을 수 있습니다:

Web Vulnerabilities Methodology

웹 취약점에 대한 더 많은 정보는 다음에서 찾을 수 있습니다:

변경 사항에 대한 페이지 모니터링

https://github.com/dgtlmoon/changedetection.io와 같은 도구를 사용하여 취약점을 삽입할 수 있는 수정 사항을 모니터링할 수 있습니다.

해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다! (유창한 폴란드어 필기 및 구사 필요).

HackTricks 자동 명령

Protocol_Name: Web    #Protocol Abbreviation if there is one.
Port_Number:  80,443     #Comma separated if there is more than one.
Protocol_Description: Web         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web

Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}

Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}

Entry_5:
Name: Directory Brute Force Non-Recursive
Description:  Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10

Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200

Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}

Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration

Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e

Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'

Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
HackTricks 지원하기

Last updated