임의의 파일 이름 문자열과 일치하는 정규식

임의의 파일 이름 문자열과 일치하는 정규식

WordPress 설치가 Apache 사용자로서 임의 파일 생성을 허용하는 취약점의 희생양이 된 공유 호스팅 사용자가 있습니다. 생성된 파일은 분명히 무작위 생성기를 사용하여 생성되지만 특정 패턴에 속합니다. 저도 그 그룹만 매칭하는 걸 고려하고 있었는데, 이런 성격의 발견으로 인해 합법적인 파일이 너무 많이 발견되었습니다. 이러한 샘플 악성 파일을 모두 일치시키는 방법은 무엇입니까?

8twcoasx.php
hjoeksdp.php
nzpsmujc.php
oiczdqkp.php
wpebruwi.php
wuclgsvz.php
tie9txh5.php
vza6pn12.php
nwfthzli.php
1wovcnq6.php
1fwevaol.php
zscy86d8.php
ikz45skj.php
n70x0aul.php
nwk34bs0.php
ugdnncmz.php
wdcq2zzi.php
8f4w3dmt1z.php
uqv4e2cm2a.php
55zf4u1dp7.php
szfc8v129e.php
oihfoe09fposf.php (occured more often)
Jwlsjd_baaqifg.php (occured more often)

분명히 저는 WordPress 설치 및 플러그인을 업데이트하기 위해 사용자와 협력할 것이지만, 조회에 넣고 문제가 여전히 존재하는지 빠르게 확인할 수 있는 정규식을 갖고 싶습니다.

내가 볼 수 있는 패턴은 다음과 같습니다.

  1. 항상 8, 10 또는 13자입니다.
  2. 항상 *.php

답변1

먼저 "패턴"이 정확히 무엇인지 결정해야 합니다(정규식 생성). 나는 아무것도 명확하게 볼 수 없습니다. 항상 .php대문자나 소문자, 숫자 또는 8, 10 또는 13자로 끝나고 그 앞에 옵니다 _. 그 외에는 명확하지 않습니다. 예를 들어 항상 숫자가 있는 것은 아닙니다. 이 일반적인 "패턴"을 일치시키려면 ^[a-zA-Z0-9_]{8}\.php$및 10자 또는 13자를 일치시키려면 아마도 많은 오탐지를 얻게 될 것입니다.

대신 현재 수정 날짜로 새 파일이 생성됩니까? 그렇다면 새 구성 이후에 수정된 새로운 의심스러운 파일을 검색할 수 있습니다.

find /path/to/directory -newer /path/to/new_config -regextype egrep -regex '.*/([a-zA-Z0-9_]{8}|[a-zA-Z0-9_]{10}|([a-zA-Z0-9_]{13})\.php'

수정 날짜는 를 사용하여 변경할 수 있습니다 touch. 악성 코드가 이 작업을 수행하는 경우 액세스 시간 -anewer, 상태 변경 시간 -cnewer또는 필터링을 기준으로 필터링될 수 있습니다 -newerXY.

모든 파일이 특정 사용자에게 속한 경우 해당 정보를 사용하여 필터링할 수도 있습니다. 즉, 옵션을 추가합니다 -user apache.

답변2

이것은 PHP 악성 코드이며 이전에 본 적이 있습니다. 동영상을 통해 시청해야 합니다.벤 데크라이가 전화함"이익이 아닌 재미를 위해 바이러스를 작성합니다"이 특정 공격에 관심이 있다면.

내 기여의 핵심은 이것이다. 파일 이름의 md5를 찾는 대신(완벽하게 유효한 접근 방식) 다음과 같은 것을 사용하여 생성합니다(그러나 항상 $length = 10이므로 정확하지는 않습니다).

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0;$i < $length;$i++) {
        $randomString.= $characters[rand(0, $charactersLength - 1) ];
    }
    return $randomString . ".php";
}

특정 날짜보다 오래된 모든 파일을 찾으려면 다음 명령을 사용해야 합니다.

`base64_decode

또는 eval(base64_decode(

이것은 어떤 문자가 일치하고 어떤 문자가 일치하지 않는지를 결정하지는 않지만 내 경험상 아마도 정확에 더 가깝습니다.

저 할 수 있어요.

  1. 서버를 내려보세요.
  2. 지원.
  3. 새 디렉토리에 WordPress 병렬 버전(신규)을 설치합니다.
  4. 오탐지 확인eval(base64_decode(
  5. 이 문자열과 일치하는 모든 파일을 격리합니다.
  6. 위의 정규식과 일치하는 다른 파일이 있는지 확인하세요.
  7. 격리된 파일을 백업합니다.
  8. 위 문자열과 일치하는 격리된 파일을 정리합니다.
  9. 이 취약점을 방지하는 WordPress 패치를 찾거나 WordPress의 새 버전으로 업그레이드하세요.

답변3

i have used below command to achieve

find . -type f -user "user" username | sed -n '/[a-zA-Z0-9_]\{8,\}.php$/p'

It will display all the files whose len is greater than 8

관련 정보