
디렉토리 에 /tmp
다음 파일 이름의 파일이 있습니다.
.<?php passthru($_GET['cmd']);echo 'm3rg3';?>
일반적인 방법으로는 이 파일을 제거할 수 없으며 이 파일 이름을 인용하여 시도했지만 결과가 없었습니다.
다음에는 무엇을 시도해야 합니까?
답변1
inode를 확인하는 데 사용하여 ls -li
inode를 제거합니다.find
[root@server tmp]# ls -li .\<*
16163346 -rw-r--r-- 1 root root 0 Jun 23 12:02 .<?php passthru($_GET[cmd]);echo
[root@server tmp]# find . -inum 16163346 -exec rm -i {} \;
rm: remove regular empty file `./.<?php passthru($_GET[cmd]);echo'? y
참조:http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
답변2
이 시도:
rm -iv -- .\<\?php\ passthru\(\$_GET\[cmd\]\)\;echo\ m3rg3\;\?\>
그리고 나중에 정말 이상한 파일 이름이 있으면 쉘을 사용해 보십시오.글로브예를 들면 다음과 같습니다.
ls .*php*
좋은 시작이 될 것입니다. 비슷한 파일 이름을 가진 파일이 많은 경우 고유한 일반 하위 문자열을 사용하세요.
ls .*php*cmd*echo*m3rg3*
그리고 마지막에 Tab사용 중인 쉘에 완성 메커니즘이 있는 경우 파일 이름을 완성할 수 있습니다.
답변3
rm
똑똑한 짐승입니다. glob patterns
논쟁에 사용할 수 있습니다.
귀하의 경우에는 간단하면 rm .\<*
충분합니다
rm
* with를 사용하면 glob patterns
패턴과 일치하는 여러 파일이 삭제되므로 주의하세요.
답변4
find
GNU인지 GNU가 아닌지
GNU 버전을 사용하면 find
inode를 찾지 않고도 직접 작성할 수 있습니다.
find . -name '.<*' -delete
-delete
물론 이전에 옵션 없이 삭제하려는 파일 이름을 확인하는 것이 좋습니다 .
GNU 버전이 아닌 경우에도 직접 수행할 수 있으며 find . -name '.<*' -exec rm -i {} \;
GNU 버전에서도 작동하지만 약 3배 정도 느립니다 .1] 그런 다음 -delete
.
파일이 너무 많지 않으면 find . -name '.<*' -exec rm -i {} +
다시 더 빠르게 사용할 수 있습니다.
perl
.<*
삭제하려는 파일만 모두 선택하는 키로 가정합니다 (일부 파일 제외).체육관문자열에)
perl -e 'for(<'.'\<'*'>){((stat)[9]<(unlink))}'
디렉토리의 모든 숨겨진 파일을 삭제하려면 충분합니다.perl -e 'for(<'.*'>){((stat)[9]<(unlink))}'
파일이 많으면 더 빠릅니다. 나는 일반적으로 Perl을 사용하지 않기 때문에 표현식을 확인하십시오.
해결 방법
일반적으로 다른 모든 파일을 다른 디렉터리로 이동하고 원래 디렉터리를 삭제해 볼 수 있습니다.
mv /tmp /tmp2; mkdir tmp; mv /tmp2/* /tmp; rm tmp2
일부 파일을 사용 중이라면 단점이 있지만... 사용할 수도 있는 경우도 있습니다.
Ps> 옵션을 rsync
잊지 마세요 .../dev/null
-delete