"echo os.system('/bin/bash')"가 작동하는 이유는 무엇입니까?

"echo os.system('/bin/bash')"가 작동하는 이유는 무엇입니까?

나는 일종의 해킹 도전을 하고 있었는데, 그 중 일부는 내가 명령이 거의 없는 제한된 셸에 갇혀 있다는 것을 발견했습니다. 사용 가능한 명령 중 하나는 입니다 echo. 몇 시간 동안 고생한 끝에 몇 가지 팁을 추가하기로 결정했습니다. 이것이 당신을 제한된 껍질에서 벗어나게 한다는 것이 밝혀졌습니다 echo os.system('/bin/bash')... 이것을 본 후에야 구글에 검색할 수 있었지만 당신이 찾을 수 있는 것 외에는 그것에 대한 어떤 정보도 찾지 못했습니다.뭔가하다제한된 쉘 상황. zsh 및 bash로 시도하면 터미널에서 작동하지 않습니다. 왜 이것이 여전히 작동합니까? 이 os.system부분이 제게는 Python처럼 보입니다. 누군가 제게 배경지식을 알려줄 수 있나요? 이것이 Python이라면 echo와 함께 어떻게 사용할 수 있습니까?

답변1

이게 문제인 것 같네요껍데기0.9.15, Python으로 구현된 제한된 쉘입니다.

취약한 기능은 check_path()명령줄에서 사용자가 특정 경로에 접근할 수 있는지 확인하는 기능이다.

문제는 이 함수가 eval()명령줄에서 따옴표를 제거하는 방법으로 사용된다는 것입니다. 이 함수는 유효한 Python 표현식도 행복하게 실행합니다.

        행 항목의 경우:
            # 잠재적인 인용문을 제거합니다
            노력하다:
                프로젝트 = 평가(프로젝트)
            와는 별개로:
                통과

이 문제는 나중에 호출을 정규식으로 대체하여 다음 커밋에서 eval()해결 되었습니다.https://github.com/ghantoos/lshell/commit/4e05ac2e9c12142beed0e0fa16331ee0fd7dbd42#diff-edb4dda47bc5b086988a93df2615df6f

관련 정보