7.**Windows**의 **NTFS 대체 데이터 스트림 (ADS)** 사용. 이 경우 금지된 확장자 뒤에 콜론 문자 ":"가 삽입되고 허용된 확장자 앞에 삽입됩니다. 결과적으로 금지된 확장자의 **빈 파일**이 서버에 생성됩니다 (예: "file.asax:.jpg"). 이 파일은 나줴서 짧은 파일 이름을 사용하는 등 다른 기술을 사용하여 나줴서 편집할 수 있습니다. "**::$data**" 패턴을 사용하여 비어 있지 않은 파일을 만들 수도 있습니다. 따라서 이 패턴 뒤에 점 문자를 추가하여 추가 제한을 우회하는 데 유용할 수도 있습니다 (예: "file.asp::$data.")
8. 파일 이름 제한을 깨려고 시도합니다. 유효한 확장자가 잘립니다. 악의적인 PHP가 남습니다. AAA<--SNIP-->AAA.php
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 여기서 4를 뺀 후 .png 추가
* 이미지에 **압축이 추가**되는 경우, 예를 들어 [PHP-GD](https://www.php.net/manual/fr/book.image.php)와 같은 일반적인 PHP 라이브러리를 사용하여 압축이 적용된다면, 이전 기술은 유용하지 않을 수 있습니다. 그러나 **PLTE 청크**를 사용하여 [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
* 웹 페이지가 **이미지를 조정**하는 경우, 예를 들어 PHP-GD 함수 `imagecopyresized` 또는 `imagecopyresampled`를 사용하는 경우, **IDAT 청크**를 사용하여 [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
* **이미지 조정을 생존하는 페이로드**를 만들기 위한 다른 기술은 PHP-GD 함수 `thumbnailImage`를 사용하는 것입니다. 그러나 **tEXt 청크**를 사용하여 [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
2. 이미 존재하는 **파일** 또는 **폴더**의 **이름**을 가진 파일을 업로드하세요.
3.**“.”, “..”, 또는 “…”**를 이름으로 가진 파일을 업로드하세요. 예를 들어, Apache의 **Windows**에서, 응용 프로그램이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하는 경우, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다.
4.**NTFS**에서 **“…:.jpg”**와 같이 쉽게 삭제되지 않을 수 있는 파일을 업로드하세요. (Windows)
5. 이름에 `|<>*?”`와 같은 **유효하지 않은 문자**가 포함된 파일을 **Windows**에 업로드하세요. (Windows)
6. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 및 LPT9와 같이 **예약된** (**금지된**) **이름**을 가진 파일을 **Windows**에 업로드하세요.
* **실행 가능한** (.exe) 또는 **.html** (의심을 덜 받는) 파일을 업로드하여 피해자가 실수로 열었을 때 코드를 **실행**해보세요.
**PHP 서버**에 파일을 업로드하려는 경우, [**.htaccess** 트릭을 사용하여 코드를 실행하는 방법](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)을 확인하세요.\
**ASP 서버**에 파일을 업로드하려는 경우, [**.config** 트릭을 사용하여 코드를 실행하는 방법](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)을 확인하세요.
Jetty 서버에 XML 파일을 업로드할 수 있다면 [**새로운 \*.xml 및 \*.war가 자동으로 처리**되므로 RCE를 얻을 수 있습니다](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** 따라서 다음 이미지에 나와 있는대로 XML 파일을 `$JETTY_BASE/webapps/`에 업로드하고 쉘을 기대하세요!
이 취약점에 대한 자세한 탐구를 위해 원본 연구를 확인하세요: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
원격 명령 실행 (RCE) 취약점은 uWSGI 서버에서 `.ini` 구성 파일을 수정할 수 있는 경우에만 악용할 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 통합하기 위해 특정 구문을 활용합니다. 특히 '@' 연산자는 `@(filename)`로 사용되며 파일의 내용을 포함하는 데 사용됩니다. uWSGI에서 지원하는 다양한 스키마 중에서 "exec" 스키마는 특히 강력하며 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기와 같은 악의적인 목적으로 조작될 수 있습니다.
페이로드의 실행은 구성 파일을 구문 분석하는 동안 발생합니다. 구성이 활성화되고 구문 분석되려면 uWSGI 프로세스를 다시 시작해야 합니다(충돌 후 또는 서비스 거부 공격으로 인한 재시작) 또는 파일을 자동으로 다시로드하도록 설정해야 합니다. 자동 다시로드 기능이 활성화된 경우 변경 사항을 감지하면 지정된 간격으로 파일을 다시로드합니다.
가끔 서버가 **`wget`**를 사용하여 **파일을 다운로드**하고 **URL**을 **지정**할 수 있다는 것을 발견할 수 있습니다. 이러한 경우, 코드는 다운로드된 파일의 확장자가 허용 목록 내에 있는지 확인하여 허용된 파일만 다운로드되도록 보장할 수 있습니다. 그러나 **이 확인을 우회할 수 있습니다.**\
**리눅스**에서 **파일 이름**의 **최대** 길이는 **255**이지만, **wget**는 파일 이름을 **236**자로 자릅니다. "A"\*232+".php"+".gif"라는 이름의 파일을 다운로드할 수 있습니다. 이 파일 이름은 **확인을 우회**할 것입니다(이 예에서 **".gif"**는 **유효한** 확장자입니다) 그러나 `wget`는 파일을 **"A"\*232+".php"**로 **이름을 바꿀 것**입니다.
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
**다른 옵션**으로 이 체크를 우회할 수 있는 방법은 **HTTP 서버가 다른 파일로 리디렉션하도록** 만드는 것입니다. 따라서 초기 URL은 체크를 우회하지만 wget은 새 이름으로 리디렉트된 파일을 다운로드할 것입니다. 이 방법은 **wget이 `--trust-server-names` 매개변수와 함께 사용될 때만 작동**하며, **wget은 리디렉트된 페이지를 원래 URL에 표시된 파일 이름으로 다운로드**합니다.
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass)는 파일 업로드 메커니즘을 테스트하는 데 도움을 주기 위해 설계된 강력한 도구입니다. 다양한 버그 바운티 기술을 활용하여 취약점을 식별하고 악용하는 프로세스를 간소화하여 웹 애플리케이션의 철저한 평가를 보장합니다.
* 웹 서버에 이미지를 가져오도록 지시할 수 있다면 [SSRF](../ssrf-server-side-request-forgery/)를 악용해볼 수 있습니다. 이 **이미지**가 **공개** 사이트에 **저장**될 경우 [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 탈취**할 수도 있습니다.
* [PDF-Adobe 업로드로 **XXE 및 CORS** 우회](pdf-upload-xxe-and-cors-bypass.md)
* 특별히 제작된 PDF를 통한 XSS: [다음 페이지에서 **PDF 데이터를 삽입하여 JS 실행을 얻는 방법**](../xss-cross-site-scripting/pdf-injection.md)을 제시합니다. PDF를 업로드할 수 있다면 주어진 지침을 따라 임의의 JS를 실행할 수 있는 PDF를 준비할 수 있습니다.
압축 해제 중 디렉토리에 파일이 예상치 못하게 생성되는 것은 중요한 문제입니다. 악의적 파일 업로드를 통한 OS 수준 명령 실행을 방지할 수 있을 것으로 초기에 가정했지만, ZIP 아카이브 형식의 계층적 압축 지원 및 디렉토리 이동 기능을 악용할 수 있습니다. 이를 통해 공격자는 대상 응용 프로그램의 압축 해제 기능을 조작하여 제한을 우회하고 안전한 업로드 디렉토리를 탈출할 수 있습니다.
또한 **evilarc와 심볼릭 링크 트릭**이 옵션으로 사용될 수 있습니다. `/flag.txt`와 같은 파일을 대상으로 하는 경우 시스템에 해당 파일에 대한 심볼릭 링크를 만들어야 합니다. 이렇게 하면 evilarc가 작동 중에 오류를 만나지 않도록 할 수 있습니다.
PNG 파일의 IDAT 청크에 PHP 셸을 임베딩하면 특정 이미지 처리 작업을 효과적으로 우회할 수 있습니다. PHP-GD의 `imagecopyresized` 및 `imagecopyresampled` 함수는 특히 이러한 맥락에서 중요하며, 일반적으로 이미지 크기 조정 및 재샘플링에 사용됩니다. 임베딩된 PHP 셸이 이러한 작업에 영향을 받지 않고 유지되는 능력은 특정 사용 사례에 대한 중요한 장점입니다.
이 기술에 대한 자세한 탐구와 방법론 및 잠재적인 응용 프로그램은 다음 기사에서 제공됩니다: ["PNG IDAT 청크에 웹 셸 인코딩"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). 이 자료는 이 프로세스와 그 영향에 대한 포괄적인 이해를 제공합니다.
더 많은 정보: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
Polyglot 파일은 사이버 보안에서 독특한 도구로 작용하여 여러 파일 형식에서 동시에 유효하게 존재할 수 있는 캐멀레온으로 작용합니다. 흥미로운 예로 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있으며, GIF 및 RAR 아카이브로 모두 작동하는 하이브리드입니다. 이러한 파일은 이러한 조합에 제한되지 않으며, GIF 및 JS 또는 PPT 및 JS와 같은 조합도 가능합니다.
Polyglot 파일의 핵심 유틸리티는 파일 유형에 따라 파일을 스크린하는 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 응용 프로그램에서의 일반적인 실천은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형의 업로드만 허용하여 잠재적으로 해로운 형식(JS, PHP 또는 Phar 파일 등)이 가지는 위험을 완화하는 것입니다. 그러나 다중 파일 유형의 구조적 기준을 준수함으로써, Polyglot은 이러한 제한을 은밀하게 우회할 수 있습니다.
그들의 적응력에도 불구하고, Polyglot은 제한을 만날 수 있습니다. 예를 들어, Polyglot이 PHAR 파일 (PHp ARchive)과 JPEG을 동시에 대표할 수 있더라도, 업로드의 성공은 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용 가능한 확장자에 엄격하다면, Polyglot의 구조적 이중성만으로는 업로드를 보장할 수 없을 수 있습니다.
더 많은 정보: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)