2013-08-08 1 views
1

에 의해 제공되는 파일 경로를 찾을 수 없습니다. 우선, 나는 이것이 ServerFault 또는 다른 곳과는 반대로 여기에 속한다는 긍정적이지 않습니다. 그것이 그 대신에 속하면 미안하다.xargs는 입력 파일

어쨌든 다음은 내 문제에 대한 배경입니다. 나는 다양한 고객의 웹 사이트를 관리하는 회사에서 일하고 있으며 우리가 취한 한 명의 고객은 제거해야 할 많은 악성 코드가있는 웹 사이트를 가지고 있습니다. 이제 grep, find, xargs 등을 사용하여 특정 파일 이름, 파일 크기, 특정 문자열이나 텍스트 패턴을 포함하는 파일에 대한 작업을 찾아서 수행하는 측면에서 지난 몇 주 동안 많은 것을 배웠습니다.

일부 이미지에 악의적 인 exif 데이터가 삽입되어 있다는 것을 발견했습니다 (기본적으로 Make 속성은 /.*/e이고 Model 속성은 eval(base64_decode(...));의 효과가 있습니다). 여기서 인코딩 된 문자열은 공격자가 허용하는 PHP 스크립트입니다. 특정 속성을 가진 POST 요청을 보낸 다음 평가 (를 통해 그 속성의 입력을 실행). 그리고, 그들은 다른 PHP 스크립트에 다음 코드를 주입 ​​한합니다.

<?php 
$exif = exif_read_data('/path/to/image.jpg'); 
preg_replace($exif['Make'],$exif['Model'],''); 
?> 

을 그래서 그들은 정규 표현식을 교체 . *는 POST 요청을 받아들이고 주어진 코드를 실행하는 PHP 코드로 무엇이든 (빈 주제를 포함하여) 일치시킵니다. , 이것은 공격자가 클라이언트 웹 사이트에서 원하는 PHP 코드를 실행할 수있게합니다. 알아내는 것은 매우 흥미롭지 만, 고치는 것은 고민한다.

PHP는 exif 데이터 (즉, exif_read_data())를 읽는 도구가 있으며이를 사용하여 클라이언트 웹 사이트의 모든 이미지 파일을 검사하고 악의적 인 exif 데이터가있는 이미지 목록을 컴파일했습니다. 그러나 PHP는 해당 데이터를 수정할 수있는 방법을 제공하지 않습니다. 그래서 저는 약간의 연구를했으며 exif 데이터를 변경할 수있는 "ExifTools"라는 리눅스 프로그램이 있음을 발견했습니다. 그 파일을 설치하고 다음 명령을 실행했습니다 :

xargs -a files_with_malicious_exif.txt exiftool -make="" -model="" 

텍스트 파일에는 각자의 줄에있는 파일 경로 목록 만 있습니다. 스크립트는 파일 이름을 제대로 읽습니다. 그 이유는 "오류 : 파일을 찾을 수 없습니다 - ./path"메시지 (각 경로마다 하나씩)가 출력되기 때문입니다.

문제는, 그 경로는 실제로 존재하고, 않습니다 나는 다음과 같은 명령을 실행하는 경우 : 그것은 작동

exiftool -make="" -model="" ./path/that/does/exist/and/is/in/the/file/like/this.jpg 

합니다. 나는 파일을 검사하고 exif 데이터에있는 두 항목이 정리되었습니다.

그러나 감염된 파일의 수가 상당히 많기 때문에 파일별로 파일을 이동하여 각 파일에서 명령을 실행하고 싶지 않습니다.

절대 경로를 사용하고 파일 이름에서 "./"을 제거하려고했습니다. 두 번째 명령이 상대 경로와 함께 작동한다는 사실에 의해 입증 된 것처럼 상대 경로가 올바른 디렉터리에서 실행 중이지만 여전히 파일을 찾을 수 없습니다.

내가 잊고 있거나 제대로하지 않는 것이 있습니까?

+0

xargs 명령은 파일을보고 입력 파일이 정상적으로 작동한다고 가정해야합니다.한 가지주의 사항 : 파일 이름에 공백이 없다고 가정해도 좋습니다. – Ciclamino

+0

더 많은 정보를 제공해야한다고 생각합니다. 'head -3 files_with_malicious_exif.txt |의 결과는 무엇입니까? xargs ls -1'? – nosid

+0

파일 이름에 공백이 표시되지 않습니다. 텍스트 편집기에서 공백 문자를 검색하면 공백이 나타납니다. @nosid 그 명령의 출력': 해당 파일이나 디렉토리가 없습니다. *** org /**.***. org/web/content/images/****. jpg : 해당 파일이나 디렉토리가 없습니다. ** * .org /**.*** org/web/content/images/multimedia/*** .jpg : 해당 파일이나 디렉토리가 없습니다. ***/org/web/content/images/***. jpg' 내 클라이언트를 식별 할 수 있기 때문에 별표가있는 경로의 일부를 검열했습니다. "디렉토리"바로 뒤에있는 부분이 시작 부분에서 잘린 것처럼 보입니다 (경로의 전체 시작이 아님). – imkingdavid

답변

2

xargs를 사용하여 설정 한 경우 진단을 통해 문제를 해결할 수 있습니다. 단순히 작업을 완료하는 것이 목표라면 아래의 작은 작은 루프가 작동합니다. 특수 문자가있는 파일 이름이 있으면 $ fixfile을 "$ fixfile"으로 변경해야합니다.

cat files_with_malicious_exif.txt | while read fixfile; do exiftool -make="" -model="" $fixfile; done 
+0

xargs를 사용할 때 확실히 설정되지 않았습니다. 그게 내가 명령을 내릴 수있는 유일한 방법이었다. – imkingdavid

+0

그래서 그 명령을 실행하려고 시도했지만 여전히 파일을 찾을 수 없습니다. 나는 절대 경로를 사용하는 것뿐만 아니라 선도 ./없이 그것을 시도했다. 어떤 문제인지 모르겠습니다. – imkingdavid

+0

$ fixfile 대신 "$ fixfile"을 사용해보고 차이가 있는지 알려주십시오. – user2662831