/tmp
디렉토리 에는 다음과 같은 파일 이름을 가진 파일이 있습니다.
.<?php passthru($_GET['cmd']);echo 'm3rg3';?>
일반적인 방법으로는 이 파일을 삭제할 수 없으며 이 파일 이름을 참조하려고 시도했지만 결과가 없습니다.
다음에는 무엇을 시도해야 합니까?
답변1
ls -li
인덱스 노드를 본 다음 다음을 사용하여 인덱스 노드를 삭제하는 데 사용합니다.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
glob patterns
*with를 사용하면 패턴과 일치하는 여러 파일이 삭제되므로 주의하세요.
답변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