secretinfo.txt
디렉토리에 있는 파일을 편집하려고 합니다 .SensitiveData
현재 디렉터리와 파일에는 다음과 같은 권한이 있습니다.
drwx------ 2 www-data root 4096 Apr 20 17:39 SensitiveData
-rw------- 1 www-data root 28 Apr 20 17:20 secretinfo.txt
파일과 디렉터리는 명령 주입 공격에 취약한 Apache 웹 서버를 실행하는 UbuntuVM에 있으며(이것은 제가 연습하고 있는 개인 VM입니다) cat /var/SensitiveData/secretinfo.txt
명령 출력을 주입할 수 있었습니다 My bank account pin is 4565
. 동일한 명령 주입 기술을 사용하여 핀을 변경해 보았으나 성공하지 못했습니다. 지금까지 다음 명령을 시도했지만 텍스트 파일은 변경되지 않습니다.
sed -i ‘s/4565/1111/’ /var/SensitiveData/secretinfo.txt
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
sed를 사용할 때 뭔가 빠졌나요? 아니면 다른 명령을 사용하여 텍스트를 바꿔야 하나요? 첫 번째 명령은 아무 작업도 수행하지 않지만 두 번째 명령은 빈 파일을 덮어쓰고 만듭니다.
답변1
파일 secretinfo.txt
길이는 81자입니다. 내용을 보면 cat
일부만 표시됩니다.
4565
그 이유 중 하나는 여러 문자열이 있고 표시된 문자열이 아닌 숨겨진 문자열을 바꾸는 것이기 때문일 수 있습니다 . 따라서 각 줄의 첫 번째 문자열뿐만 아니라 가능한 모든 문자열을 바꾸십시오.
sed -i ‘s/4565/1111/g’ /var/SensitiveData/secretinfo.txt
또 다른 이유는 표시된 문자 사이에 보이지 않는 문자가 있기 때문일 수 있습니다. hd
( ) 명령을 사용하여 파일의 정확한 내용을 hexdump
알아보세요 . secretinfo.txt
그래야만 관련 sed
명령을 작성할 수 있습니다.
그런데, 이러지 마세요:
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
첫째, 파일을 수정하는 동안 파일을 읽고 있습니다(일부 조건에서는 작동할 수 있지만 제어할 수 없는 상황임을 고려하고 이 구성을 피하세요).
둘째, -i
옵션에는 파일이 인수로 필요하고 명령은 출력을 생성하지 않으므로 리디렉션에서는 파일을 지웁니다.