환경 변수의 바이너리 내용을 보는 방법은 무엇입니까?

환경 변수의 바이너리 내용을 보는 방법은 무엇입니까?

저는 CTF(캡처 플래그)를 연습 중이며 환경 변수의 내용을 보고 싶습니다.

MyEnv=`python3 -c 'print(64*"A"+"\x0a\x09\x0a\x0d",end="")'`

이제 hexdump배관 입력 시 다음이 표시됩니다 echo.

$ echo -n $MyEnv | hexdump -Cv
00000000  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
00000010  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
00000020  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
00000030  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
00000040  20 0d                                             | .|
00000042

echo이는 마지막 4개의 16진수를 인쇄하는 것을 꺼리는 것과 관련이 있습니다.

MyEnv하지만 연습 문제를 풀었기 때문에 마지막 네 자리가 포함되어 있다는 것을 알고 있습니다 .

환경 변수의 바이너리 내용을 표시하는 방법은 무엇입니까?

답변1

$MyEnv아니요, 따옴표가 없는 변수가 분할되고 변수의 문자 [1]을 잘라내는 것과 관련이 있습니다 IFS. 기본적으로 공백( \x20), 탭( \x09) 및 개행( \x0a)입니다. 그런 다음 공백 연결( ) echo을 사용하여 분할 필드를 작성합니다 . \x20.

이러한 문자를 보려면 변수를 인용 $MyEnv하고 printf대신 echo -n[2]를 사용하십시오.

$ printf %s "$MyEnv" | hexdump -Cv
...
00000040  0a 09 0a 0d                                       |....|
00000044

일반적으로 환경 변수에 이진 데이터를 저장할 수 없습니다. 이진 데이터는 NUL 바이트( \0)를 포함할 수 있으며 환경 변수의 값은 0으로 끝나는 문자열입니다. NUL 바이트는 bash내부(내보내지 않은) 변수 에도 적용되지 않습니다 .

[1] IFS의 문자가 "공백"이 아닌 경우 쉘은 실제로 단일 문자를 분할하고 빈 필드를 생성할 수 있습니다. 전체 설명은 다음 위치에 있습니다.필드 분할표준 부품.

[2] echo표준 쉘은 \n변수를 더욱 복잡하게 만들 수 있는 일부 백슬래시 이스케이프(예: 개행 문자 등)를 해석할 수 있습니다.

관련 정보