iconv는 문자 인코딩 변환을 수행하는 표준 함수이자 유틸리티입니다. PHP, Linux, C 등 다양한 환경에서 사용되며, 특히 PHP에서는 php://filter/convert.iconv.* 스트림 필터를 통해 LFI(Local File Inclusion) 기반 RCE(Remote Code Execution)에 악용될 수 있습니다.
iconv란 무엇이며, PHP의 php://filter/convert.iconv.*가 보안적으로 어떻게 악용될 수 있는가?
iconv: 문자 인코딩 변환기 (e.g., UTF-8 → ISO-8859-1).iconv() 함수 또는 php://filter/convert.iconv.{src}.{dst} 스트림 필터 형태로 사용.php://filter 스트림 래퍼를 통해 데이터를 실시간으로 변환하거나 가공할 수 있음.convert.iconv는 문자셋을 바꾸는 데 사용됨.convert.iconv.SRC.DST: 입력 문자셋 SRC를 출력 문자셋 DST로 변환.php://filter/convert.iconv.UTF-8.UTF-7/resource=index.php조건:
include() 또는 require() 등에 파일명을 조작할 수 있을 때방법:
<?=\id`?>`)를 변환 체인으로 인코딩php://filter/convert.iconv.* 체인으로 구성include($_GET['file']) 같은 곳에 삽입하여 실행php_filter_chain_generator 도구가 이 체인을 자동 생성include($_GET['file']);
curl http://target.com/vuln.php?file=php://filter/convert.iconv.UTF8.UTF7|...|resource=php://temp
→ 이 때 payload는 <?=\curl ...`?>` 등 RCE 목적의 쉘 명령 포함 가능
allow_url_include 등 설정 의존| 기법 | 설명 | 업로드 필요 | 탐지 우회성 |
|---|---|---|---|
| Web Shell 업로드 | 파일 직접 업로드 후 실행 | O | 낮음 |
| Base64 포함 LFI | Base64로 파일 감싸기 | X | 중간 |
| iconv 체인 이용 | 인코딩 필터로 Payload 삽입 | X | 높음 |
iconv는 글자 인코딩을 바꾸는 기술이에요. PHP에서는 이걸 이용해 글자처럼 보이는 해킹 코드를 서버에 몰래 전달할 수 있어요. 원래는 다른 나라 글자 지원을 위해 만든 기능인데, 해커들이 이걸 돌려서 파일을 안 올려도 서버에서 코드를 실행하게 만들 수 있어요. 보안에선 이런 점을 꼭 조심해야 해요.
핵심만 말하자면: 한글을 영어로 바꾸는 게 아니라, 문자 인코딩 변환 과정에서 바이트 배열이 조작되어 결과적으로 코드가 실행되게 되는 겁니다.
⸻
🔥 어떻게 가능한가? — 핵심 개념
예:
php://filter/convert.base64-encode/resource=some.php
→ 이건 some.php의 내용을 base64로 인코딩해서 보여주는 필터입니다.
⸻
예를 들어,
• 특정 인코딩에서는 0x3C 0x3F 0x70 0x68 0x70 → <?php로 해석될 수 있어요.
• 그리고 PHP는 <?php부터는 코드를 실행하죠.
⸻
…이런 payload를 여러 문자 인코딩 필터를 조합해서 간접적으로 만들어냄.
그러면 PHP 입장에서는 “이건 텍스트가 아니고, PHP 코드구나!”라고 착각해서 실행하게 되는 거예요.
⸻
🧠 예를 들어서 설명하면:
우리가 직접 PHP 파일에 를 쓰면 실행되죠?
그런데 파일 업로드도 안 되고, 직접 쓰지도 못하는 상황이면…
우회로로 다음을 시도합니다:
• filter 체인을 사용해서 PHP가 payload처럼 보이도록 유도
• 즉, 인코딩 필터를 조합해 <, ?, = 등 특수문자를 구성
결국 서버는 이렇게 해석:
이게 서버에서 실제로 실행됨 → RCE 달성.
⸻
🔬 한글이 영어가 되는 게 아님!
• iconv는 “한글→영어”가 아니라 문자셋 간 바이트 매핑을 바꾸는 도구
• 이 바이트 매핑을 잘 이용하면, 단순 텍스트에서 코드 실행 문자열로 탈바꿈 가능
⸻
💥 한 문장 요약:
iconv는 문자 인코딩을 바꾸는 도구인데, 이걸 복잡하게 엮으면 실제로 파일을 만들지 않고도, 서버가 악성 코드를 실행하도록 속일 수 있어요.
⸻