최근에 웹쉘 안티 바이러스에 대해 연구하다가 새로운 경험을 하게 되었습니다. 그 이유는 갑자기 php7.1은 변수 함수의 주장을 사용할 수 없기 때문에 php7의 새로운 기능을 사용하여 안티 킬링 규칙을 우회하고 마지막으로 특정 방패와 "특정 d0g"를 우회한다는 생각이 들었습니다.
실험 환경은 7.1.9이며, php7 이하 환경에서는 모든 말을 사용할 수 없습니다.
D-shield rule base (최신): 20191227
특정 d0g는 자사 제품 테스트로 인해 침해가 발생할 수 있으므로 신고 방지를 위해 사진은 게시하지 않습니다.
사전 실험
어떤 방패
우선 다음 코드
가 직접 오경보를 주었습니다.
따라서 eval에 매개변수를 직접 전달하는 것은 비현실적입니다.
다음으로 PHP의 기능과 새로운 기능을 사용하여 이를 우회해야 합니다.
특정 d0g
그리고 특정 d0g에 대해 다음 코드
가 거짓 긍정을 제공하는 한.
그래서 kill-free 말을 작성할 때 post의 변수는 eval의 문자열에 표시되어서는 안 됩니다. 위의 `b`와 같지만 `eval`에서 변수로 나타납니다. 이러한 기초를 염두에 두고 우리는 요점에 도달할 수 있습니다.
PHP7.0.x
[php manual-php7.0.x 새로운 기능](https://www.php.net/manual/zh/migration70.new-features.php)
반환 값 유형 선언
php7에서는 반환 값 유형 선언에 대한 지원이 추가되었습니다. 함수를 정의할 때 ':type'만 추가하면 됩니다.
예:
은 함수 반환 값 유형이 int여야 함을 의미합니다. 그렇지 않으면 변환이 강제로 수행되거나 구문 오류가 표시됩니다.
이 기능이 포함된 바이러스 백신 소프트웨어가 업데이트되지 않으면 이 기능을 인식하지 못하고 우회됩니다.
예:
바이러스 백신 소프트웨어를 사용하여 테스트할 수 있습니다.
감지되지 않는 것으로 확인되었습니다.
사용할 수 있습니다.
null 병합 연산자
일상적으로 삼항 표현식과 'isset()'을 동시에 사용하는 상황이 많기 때문에 null 병합 연산자(*??*)의 구문 설탕이 추가되었습니다. 변수가 존재하고 해당 값이 **`NULL`**이 아니면 자체 값을 반환하고, 그렇지 않으면 두 번째 피연산자를 반환합니다.
간단히 말하면:
``? ? ` 기호를 사용하면 종료 소프트웨어가 이 처리 프로세스를 이해하지 못하므로 우회할 수 있습니다.
다음 코드처럼 특정 d0g
을 우회한 후 함수 호출을 사용하면
D 쉴드가 통과된 것을 확인할 수 있습니다
사용성 테스트
다음 보기 7.1
php7.1.x
의 기능을 살펴보겠습니다.[php manual-php7.0.x 새로운 기능](https://www.php.net/manual/zh/ migration71.new-features.php)
Nullable 유형
이제 유형 앞에 물음표를 추가하여 매개변수 유형과 반환 값을 Null 허용할 수 있습니다. 이 기능이 활성화되면 전달된 매개변수 또는 함수에서 반환된 결과는 지정된 유형이거나 null 입니다.
7.1보다 기능이 하나 더 있나요? `함수 반환 값이 지정된 유형이 아닌 경우 비어 있습니다.
동일한 코드 사용:
놀라지 마세요
통과된 D 쉴드
짧은 배열 구문
짧은 배열 구문([])은 이제 list() 구문의 대안으로, 배열 값을 일부 변수(foreach 포함)에 할당하는 데 사용할 수 있습니다. ).
여기에서는 대괄호 `[] 유형` 목록을 사용하여 설명합니다.
이런 식으로 배열의 값은 `$c`,`$d`에 할당됩니다.`$c='a';$d='b';`
이에서는 방법, 당신은 사용할 수 있습니다 이 거의 사용되지 않는 기능은 정적 종료를 우회하는 데 사용됩니다. 먼저 가장 간단한 기능인
을 작성한 다음 특정 d0g를 전달합니다. 직접 테스트해보세요.
그런 다음 기능을 일치시킬 수 있습니다. 다음과 같습니다.
확인해 보세요
사용성 테스트
list()에서 이제 키 이름을 지원합니다.
공식 참고 사항: list() 및 새 [] 구문이 이제 지원됩니다. 키 지정 그 안에 이름을 입력하세요. 이는 모든 유형의 배열을 일부 변수에 할당할 수 있음을 의미합니다(짧은 배열 구문과 유사).
이것은 매우 복잡하므로 예제를 보면 이해할 수 있습니다.
예:
약간의 수정(자체 테스트)으로 특정 d0g를 통과할 수 있습니다.
D 쉴드 사용해보기
레벨 1에 등록됨
커스텀 기능을 다시 사용하세요.
사용성 테스트를 위해 성공적으로 D를 통과했습니다.
음수 문자열 오프셋 지원
공식 설명
이제 오프셋을 지원하는 모든 문자열 연산 함수는 [] 또는 {} 첨자를 통한 연산 문자열을 포함하여 음수를 오프셋으로 허용하는 것을 지원합니다. 이 경우 음수 오프셋은 문자열 끝에서의 오프셋으로 이해됩니다.
7.1 미만 버전에서는 음수 오프셋이 빈 문자열을 반환합니다.
예:
7.1.x에서는 `s`가 반환되었지만 이전 버전에서는 `string(0) ""이 반환되었습니다. `
아이디어: 규칙을 인식할 수 없도록 문자열을 분할할 수 있습니다. . 마지막으로 특정 d0g를 전달할 수 있도록 PHP의 변수 변수
를 사용하세요. 단, D 쉴드의 경우 접합문자와 변수변수는 인식됩니다. 1단계 '의심파일' 신고는 정말 잘됐다고 말씀드리고 싶습니다.
End
사실 `define()을 통한 상수 배열 정의` 등 유추로 우회할 수 있는 기능도 많습니다. 그리고 사용자 정의 함수뿐만 아니라 클래스, 변수 변수 등도 정적 제거를 우회하는 데 사용할 수 있습니다.
`우주선 연산자(결합 비교 연산자)`, `정수 나누기 함수 intdiv()` 등을 사용하여 동적 종료를 우회할 수도 있습니다.
더 많은 관련 기사를 보시려면 PHP 중국어 웹사이트
웹 서버 보안위 내용은 php7의 새로운 기능을 사용하여 안티 킬링 규칙을 우회하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!