나는이 질문을 처음 게시 한 이후로 웹을 조금 파고 들었습니다.
버그 의 원래 발견 자 에 따르면 CVE-2014-6271 패치 이전의 bash는 다음과 같은 기능을 가져 왔습니다.
foo=() {
code
}
등호를 공백으로 바꾸고 해석함으로써 ... 함수 정의를 넘어서는 해석이 가능하다는 것을 의미했습니다.
패치 CVE-2014-6271에 대한이 parse_and_execute () 함수의 특수 모드를 도입 함수 정의에 한계 평가, 그리고 그 이상.
그러나이 스레드 에서 설명한 것처럼 CVE-2014-7169 취약성 테스트의 특수하게 조작 된 환경 변수는 1) 파서를 죽음으로 혼동합니다. 2) 버퍼에 스크랩을 남겨 둡니다. 3) 원래 bash 명령이 수행하는 작업을 완전히 변경하도록 설계되었습니다. 버퍼에 이미있는 스크랩과 결합합니다.
따라서 환경 변수를 분석하려면 다음을 수행하십시오.
X='() { (a)=>\'
- 파서는 분석
() { (a)=>\
합니다. 그 주 \
문자열의 일부입니다; 그것은되어 있지 후행 따옴표를 탈출.
() {
(a)=
>\
- 파서는 마지막 두 문자를 버퍼에 그대로 둡니다.
>\[NEWLINE]
sh
명령이 실행 되기 전에 언젠가 개행이 버퍼에 배치됩니다.
>\[NEWLINE]echo date
sh
가 호출 되면 (이 경우 bash의 심볼릭 링크 일 수 있음) 명령 인수를 echo date
버퍼에 이미 존재하는 문자에 추가합니다 .
>echo date
- 개행 이스케이프되므로 떠들썩한 파티는 버퍼 해석하는
>echo date
것과 같은 효과를 가지며, date > echo
. 이름 echo
이 지정된 파일 이 작성되고 date
명령 의 표준 출력 이 경로 재 지정됩니다.
; cat echo
- 두 번째 명령은 단순히 새로 만든 파일의 내용을 표시합니다.