php 사이트 가 뚫 렸 는 지 확인 하 는 방법

6064 단어 PHP로그검출
from :http://www.gregfreeman.org/2013/how-to-tell-if-your-php-site-has-been-compromised/
0x 01 접근 로그 보기
파일 업로드 작업 이 있 는 지 확인 (POST 방법),
IPREMOVED - - [01/Mar/2013:06:16:48 -0600] "POST/uploads/monthly_10_2012/view.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
IPREMOVED - - [01/Mar/2013:06:12:58 -0600] "POST/public/style_images/master/profile/blog.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"

nginx 기본 기록 로그 형식: 
access_log logs/access.log

혹시
access_log logs/access.log combined;

nginx 기본 기록 로그 의 위 치 는:
nginx    /log/

0x 02 악성 php 코드 가 있 는 파일 찾기
2.1 최근 변 경 된 php 파일 찾기
find . -type f -name '*.php' -mtime -7

- type f 는 정상 적 인 일반 파일 검색 을 표시 합 니 다.  -mtime - 7 은 7 * 24 시간 내 에 수정 한 파일 을 표시 합 니 다.
결 과 는 다음 과 같 을 수 있 습 니 다.
./uploads/monthly_04_2008/index.php
./uploads/monthly_10_2008/index.php
./uploads/monthly_08_2009/template.php
./uploads/monthly_02_2013/index.php

2.2 파일 에 의심 코드 가 있 는 지 찾 습 니 다.
find . -type f -name '*.php' | xargs grep -l "eval *(" --color

 (* 임의의 빈 칸 을 의미 함)
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color
find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color

주해: 많은 명령 이 파이프 전달 파 라 메 터 를 지원 하지 않 고 실제로 이렇게 해 야 하기 때문에 xargs 명령 을 사 용 했 습 니 다. 이 명령 은 파이프 전달 파 라 메 터 를 사용 할 수 있 습 니 다.grep - l 은 특정한 문자열 만 포함 하 는 파일 이름 을 표시 합 니 다. - l 을 제거 하면 특정한 문자열 과 일치 하 는 줄 내용 을 표시 합 니 다.
몇 가지 특수 문자열 의 의미: eval () 은 문자열 을 phop 코드 에 따라 실행 하 며 가장 흔히 볼 수 있 는 phop 한 마디 목마 입 니 다.
base64_decode () 는 문자열 base 64 를 디 코딩 합 니 다. 공격 할 때 payload 는 base 64 인 코딩 이 므 로 이 함수 가 유용 합 니 다.
gzinflate () 는 문자열 을 압축 해제 합 니 다. 공격 할 때 payload 는 gzdeflate 로 압축 한 후 이 함 수 를 사용 하여 압축 을 풀 수 있 습 니 다.
str_rot 13 () 문자열 에 rot 13 인 코딩 하기
정규 표현 식 으로 파일 을 검색 할 수도 있 고 코드 를 찾 을 수도 있 습 니 다.
find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *("

웹 셸 에서 자주 사용 하 는 함수 설명:
mail (): 사이트 사용자 에 게 스 팸 메 일 을 보 낼 수 있 습 니 다.
fsockopen (): 네트워크 연결 이나 유 닉 스 소켓 연결 을 열 면 payload 에서 원 격 요청 을 보 낼 수 있 습 니 다.
pfsockopen (): fsockopen () 과 유사 한 역할
stream_socket_client (): 원 격 연결 을 만 듭 니 다. 예 는 다음 과 같 습 니 다.
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);  
if (!$fp) {  
    echo "$errstr ($errno)<br />
";   } else {       fwrite($fp, "GET / HTTP/1.0\r
Host: www.example.com\r
Accept: */*\r
\r
");       while (!feof($fp)) {           echo fgets($fp, 1024);       }       fclose($fp);   }   ?>

exec (): 명령 실행 함수
system (): exec ()
passthru (): exec ()
preg_replace () 정규 표현 식 은 수정자 'e' 로 수식 할 때 문자열 을 바 꾸 기 전에 phop 코드 에 따라 실행 해 야 합 니 다. 이 경우 다음 과 같은 검색 을 사용 할 수 있 습 니 다.
find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color

0x 03 비교 코드 파일
이 코드 는 사용 중인 코드 와 비교 할 수 있 는 깨끗 한 코드 가 필요 하 다.예컨대
diff -r wordpress-clean/ wordpress-compromised/ -x wp-content

위의 예 는 wordpress - clean / 와 wordpress - comprised / 두 개의 디 렉 터 리 를 비교 하고 디 렉 터 리 안의 wp - content / 하위 디 렉 터 리 는 비교 하지 않 습 니 다.
0x 04 쓰기 가능 한 디 렉 터 리 찾기
이 디 렉 터 리 에 수상 한 파일 이 있 는 지 확인 하 십시오. 다음 스 크 립 트 에서 777 권한 을 가 진 디 렉 터 리 에 phop 파일 이 있 는 지 확인 하 십시오.
search_dir=$(pwd)
writable_dirs=$(find $search_dir -type d -perm 0777)
for dir in $writable_dirs
    do
        #echo $dir
        find $dir -type f -name '*.php'
done

해커 는 jpg 파일 에 phop 코드 를 자주 삽입 하기 때문에 이 디 렉 터 리 를 조회 할 때 도 jpg 파일 을 조회 해 야 합 니 다.
find wp-content/uploads -type f -iname '*.jpg' | xargs grep -i php

메모: - name 은 파일 이름 이 대소 문 자 를 구분 하지 않 음 을 표시 합 니 다.    grep - i 도 대소 문자 구분 안 함
0x 05 iframe 태그 검출
해커 가 자주 하 는 것 은 iframe 라벨 을 삽입 하 는 것 이기 때문에 웹 페이지 의 소스 코드 를 볼 수 있 고 iframe 라벨 이 존재 하 는 지 검색 할 수 있 습 니 다. 다음 명령 을 사용 할 수 있 습 니 다.
grep -i '<iframe' mywebsite.txt

동적 으로 생 성 된 페이지 에 대해 서 는 ff 의 Live HTTP Headers 플러그 인 을 사용 하여 원본 코드 에 다운로드 한 후 iframe 태그 가 있 는 지 찾 을 수 있 습 니 다.
0x 06 데이터베이스 에 민감 한 문자열 이 있 는 지 찾 습 니 다.
% base 64% 포함,%eval (% < 등 위 에서 언급 한 키워드 들
0x 07 검사. htaccess 파일
auto prepend file 과 auto append file 이 포함 되 어 있 는 지 여 부 는 다음 명령 을 사용 하 십시오.
find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file
find . -type f -name '\.htaccess' | xargs grep -i auto_append_file

auto prepend file 은 현재 스 크 립 트 파일 을 불 러 오기 전에 먼저 불 러 오 는 php 스 크 립 트 auto append file 의 역할 은 현재 스 크 립 트 파일 을 불 러 온 다음 에 불 러 오 는 php 스 크 립 트 입 니 다. 해커 가 이렇게. htaccess 파일 을 수정 하면. htaccess 디 렉 터 리 의 php 스 크 립 트 에 접근 할 때 불 러 오 려 는 악성 스 크 립 트 를 불 러 올 수 있 습 니 다. .
htaccess 파일 은 방문 사이트 의 데 이 터 를 해커 의 사이트 로 납치 하 는 데 도 사용 된다.
RewriteCond %{HTTP_USER_AGENT}^.*Baiduspider.*$
Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]

baidu 파충류 의 방문 을 해커 의 사이트 로 재 설정 합 니 다 (HTTP USER AGENT 와 http 키워드 포함)
RewriteCond %{HTTP_REFERER} ^.*baidu.com.*$ Rewriterule ^(.*)$ http://www.hacker.com/muma.php [R=301]

baidu 검색엔진 에서 온 데 이 터 를 해 킹 사이트 (HTTP REFERER 과 http 키워드 포함) 로 재 설정 합 니 다. htaccess 수정 으로 인해 데이터 가 납 치 됐 는 지 확인 하기 위해 htaccess 파일 을 검색 할 때 다음 명령 을 사용 할 수 있 습 니 다. 
find . -type f -name '\.htaccess' | xargs grep -i http;
find . -type f -name '\.htaccess' | xargs grep -i HTTP_USER_AGENT; 
find . -type f -name '\.htaccess' | xargs grep -i HTTP_REFERER

좋은 웹페이지 즐겨찾기