명령 대체 사용 시 예기치 않은 grep 동작

명령 대체 사용 시 예기치 않은 grep 동작

grepbase64로 인코딩된 문자열이 포함된 모든 파일을 찾아서 인쇄하기 위해 명령 대체를 사용하려고 합니다.

먼저 문자열을 base64로 인코딩한 다음 grep을 사용하면 파일을 찾을 수 있습니다.

$ echo "FLAG" | base64
RkxBRwo=

$ grep -nr "Rkx"
test.txt:1:RkxBR3tUaGl6STVUaDNGbDRnfQo=

그러나 명령 대체를 사용하면 어떤 출력도 얻지 못합니다.

$ grep -nr `echo "FLAG" | base64`

답변1

Steeldriver가 답변을 댓글로 게시했으므로 답변으로 게시하겠습니다.  echo "FLAG" | base64 출력 RkxBRwo=, 그래서 당신의

grep -nr `echo "FLAG" | grep -nr `echo "FLAG" grep -nr `echo "FLAG" base64`
명령이 실행되고 있습니다
grep -nr RkxBRwo=
그러나 표시된 내용에 따르면 파일 에는 ;가 test.txt포함되어 있지 않습니다 (뒤에 다른 문자가 표시됨).RkxBRwo=RkxBR

파일에서 base64 인코딩의 처음 5자를 검색하려면 FLAG다음을 수행하십시오.

grep -nr `echo "FLAG" | grep -nr `echo "FLAG" | grep -nr `echo "FLAG" 64비트|cut-c1-5`

답변2

주문하다

grep -nr `echo "FLAG" | base64`

현재 디렉터리의 모든 파일에 대한 재귀 검색 명령에 의해 반환된 패턴을 나타냅니다 echo "FLAG" | base64.

대신에, 나는 당신이 원한다고 믿습니다

echo "FLAG" | base64 | grep -n 'Rkx'

또는 어떤 이유로 명령 대체가 필요한 경우:

grep -n 'Rkx' <<< $(echo "FLAG" | base64)

$()명령 대체에는 백틱 대신 표현식이 사용됩니다.그렇기 때문에.

관련 정보