Home - etc - 워드프레스 해킹 해결 사례: 플러그인 취약점 루트 추정

워드프레스 해킹 해결 사례: 플러그인 취약점 루트 추정

Contents

1차 해킹

오래전에 운영하던 블로그가 있었습니다. 중간에 플러그인 취약점으로 추정되는 해킹 문제가 생겨서 구글 검색 순위가 떡락하는 일이 생겼었죠. 당시 티스토리를 떠나며 워드프레스 공부 겸 시작한거라 크게 신경쓰진 않았지만 해당 도메인은 어떻게 복구해야할지 몰라서 아깝지만 아예 새 도메인으로 시작하자는 생각으로 만든게 지금의 블로그 입니다.

어차피 유지해놓고 나중에 활용, 폐기를 결정할거였고 워드프레스에 대한 지식이 별로 없던 시기여서 다른 사람의 방법들을 보고 해결했었습니다.

  1. 보안 플러그인 설치 후 의심 파일 삭제
  2. 오염된 콘텐츠 코드 수정
  3. 플러그인 최소화 후 모두 삭제

워드펜스라고 불리는 Wordfence Security 플러그인을 설치해서 스캐닝 후 나타난 문제들을 해결하고 각 글에 추가된 정체불명의 코드를 수동으로 삭제했었어요. 해결했다 생각하고 넘어갔는데..

2차 해킹

써놓은 글들이 아깝기도하고 나중에 테스트용으로 사용해보려고 거의 유지만하고 있었는데 올해 로그인해보니 하.. 당시 삭제했던 악성 코드 + 추가 코드가 재주입 되어있었습니다.

스마트폰 브라우저로 접속할 때만 특정 사이트로 납치하는 코드여서 가끔 PC 웹 브라우저로만 접속했던 제가 알아채지 못하고 있었습니다.

1차 해결 당시에 삭제하느라 짜증나서 기억에 새겨져있던 코드라 보자마자 바로 기억이 났습니다. 이게 그대로 다시 되살아났다면 제가 삭제하지 못한 어딘가에 악성코드가 숨겨져 있었다는것..

해킹 케이스가 다양하기 때문에, 제가 당했던 것에 대해서만 말씀드릴게요. 저는 이 분야에 전문가가 아니므로 저에게 해킹 복구 방법을 문의하셔도 알려드릴수 없습니다.

워드프레스 해킹 해결했던 방법

  1. 의심스러운 파일과 폴더 제거
  2. DB 수정
  3. 워드프레스 설정 변경
  4. 콘텐츠 전부 수정

대략적으로 이런데 아래 조금 더 자세히 설명드릴게요.

파일 및 폴더 제거

FTP로 접속 후 삭제하시면 되는데 SSH 환경 사용이 가능하신 분들은 명령어로 폴더별 의심스러운 PHP 파일을 찾아보시는게 더 좋습니다.

제가 했던 것

  • wp-content
    • /languages: 폴더를 다 삭제했습니다. 의심스러워 보이는 파일들이 있었는데 뭐가뭔지 몰라서 전체 삭제. 이건 설정에서 한글로 설정하면 다시 재설치되므로 날려도 됩니다.
    • /themes: 사용하지 않는 것들은 모조리 삭제
    • /Plugins: 내가 설치하지 않았거나, 비활성화 한지 오래 된 사용하지 않는 것들 다 삭제
    • 기타 사용하지 않는 폴더 혹은 의심스럽다 싶으면 다시 사용할지도 모르니까 압축해놓고 삭제해보세요.
  • wp-content/uploads: 이미지 파일이 워낙 많기 때문에 여기에 숨겨놓기도 한다는군요. 폴더 다 뒤져서 청소

Admin 페이지 체크리스트

  • 추가 CSS: 세상에 여기에 숨겨져 있었을 줄이야.. [모양] – [사용자 정의] – [추가 CSS] (custom CSS)로 들어갔더니 여기에도 숨겨져 있었습니다. 전부 청소.
  • 플러그인: 적게 사용할수록 보안에 유리
  • 사용자: 사용자 계정이 추가되어있었고 저의 gravatar가 변경되어있었습니다.
    • 비밀번호 변경
    • 세션 – 다른 모든 곳에서 로그아웃
  • 설정: 설정 – 일반 들어갔더니 ‘사이트 주소 (URL)’이 중국 사이트로 설정되어있었어요.

콘텐츠 수정

Post, Page 모두 하나하나 들어가서 코드 모드에서 수동으로 깔끔하게 삭제해주세요. 정규 표현식으로 해볼수도 있겠지만 확실히 하기위해선 글이 수백개가 아닌이상 직접 체크하는게 좋을 것 같아요.

DB 수정

여기서 반복적으로 나오는 코드가 있습니다. DB 검색시 광범위한 검색 결과가 나오지 않도록 검색할 코드를 찾아봅니다. 특정 도메인이나 반복되는 코드 짧은거 하나 선택합니다.

저는 코드의 시작이었던 ‘9e23’을 DB 검색어로 정했습니다.

DB 수정을 위한 쿼리는 저기에 입력 후 이미지에서는 잘렸는데 아래 ‘실행’ 버튼을 누르시면 돼요.

아래는 AI 형님이 알려주신 것을 다시 정리한 것입니다. AI 시대가 아니었다면 저는 정말 해결하기 힘들었을것같아요.


🔍 리다이렉트 / JS 인젝션

납치 스크립트 이런게 포스팅 코드에 숨겨져있나 보는거예요.

SELECT ID, post_title
FROM wp_posts
WHERE post_content REGEXP
'(<script|window\\.location|document\\.location|http-equiv|iframe|atob\\(|eval\\()';

게시글 revision 포함 전체 검사

revision(변경된 내용)까지 한 번 더 검사해봅시다. (***은 해커가 코드에 심어놓은 주소)

SELECT ID, post_title, post_type
FROM wp_posts
WHERE post_content REGEXP
'(*****\\.dev|***\\.life|window\\.location|<script|iframe)';

📌 post_type = 'revision' 이라도 감염이면 삭제 대상

저는 리비전까지 다 감염되어있었어요. 아래 명령어로 삭제.

DELETE FROM wp_posts
WHERE post_type = 'revision';

wp_options 악성 트리거 탐색

SELECT option_name
FROM wp_options
WHERE autoload = 'yes'
AND option_value REGEXP
'(script|iframe|window\\.location|eval\\(|atob\\(|fromCharCode)';

도메인 기반 재주입 여부 확인

  • 아래는 저에게 주입되어있던 url을 검색한거예요. ***처리함 여러분의 악성코드를 AI에게 알려주고 삭제 방법을 알려달라고하세요.
  • 정상적인 필드도 함께 나옵니다. 다 지우지 마시고 ‘수정’ 눌러서 이상한것만 삭제하세요.
SELECT option_name
FROM wp_options
WHERE option_value REGEXP
'(*****\\.dev|***\\.life|https?://)';

난독화 트리거 검색

아래 9e23은 제가 찾을 코드입니다. 여러분의 것으로 바꾸세요.

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%9e23%';
SELECT option_name
FROM wp_options
WHERE option_value LIKE '%9e23%';
SELECT meta_id
FROM wp_postmeta
WHERE meta_value LIKE '%9e23%';

이렇게 검색해서 나오는 것들을 다 삭제했습니다.

사용자 계정 확인

내가 입력한 이메일 주소가 맞고 다른 것은 없는지 확인

SELECT ID, user_login, user_email
FROM wp_users;

관리자 권한 확인

SELECT u.user_login
FROM wp_users u
JOIN wp_usermeta m
ON u.ID = m.user_id
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%administrator%';

예약 작업 (wp-cron) 감염 여부

SELECT option_name
FROM wp_options
WHERE option_name = 'cron'
AND option_value REGEXP '(script|iframe|eval|atob)';

이상한 옵션명 자체 탐지

*각 필드별로 ‘수정’ 버튼 눌러서 의심스러운 것만 삭제

SELECT option_name
FROM wp_options
WHERE option_name REGEXP
'(_temp|_cache|_inject|_redirect|_payload|base64|eval)';

Salt 업데이트

wp-config.php 파일에 있는 salt 값 업데이트

https://api.wordpress.org/secret-key/1.1/salt

접속해서 만들어진 것으로 교체

또 감염되면?

DB는 청소 완료되었기 때문에 재감염 된다면 어딘가에 악성 코드 파일이 남아있는 것 입니다.

  • 테마, 플러그인 재설치
  • uploads 파일 다시 검사
  • 그래도 문제면 서버측 의심

저는 대충 이정도로 끝났습니다. 만약 또 재발하면 새로운 환경에 세팅해서 콘텐츠만 옮길 생각입니다.

테스트용으로 만들어놨던 다른 블로그까지 동일하게 감염된거라 호스팅쪽 의심도 해봤는데.. 500원짜리 파킹용으로 사용하는거라 나중에 집에 놀고있는 컴퓨터로 서버만들어서 다 옮겨놔야겠습니다.

[업데이트]

며칠 뒤 확인해보니 기존처럼 엄청 긴 텍스트가 덕지덕지 붙는 문제는 없으나 글 상단에 리디렉션 코드가 또 생김.. ㅜㅜ 찾아보니 문제없을거라 생각했던 유명 플러그인 파일 하나가 변조되었음. 플러그인 모두 삭제 후 다시 새걸로 설치.

블로그 전체 다운로드 받아서 파일 내부에 관련 코드를 검색해보니 wp-admin, wp-includes 폴더에 변조된 파일이 많았습니다. 새 버전 다운로드 받아서 해당 폴더 삭제후 재업로드

[업데이트 후 재확인]

구석구석 모두 청소하고 2주정도가 지났는데 더이상 재발하지 않고있습니다. 이번에 이 부분을 해결하면서 공부 많이 됐습니다. 결론은 DB, CSS, 폴더 전수검사해서 모조리 삭제(통으로 교체가능한 것은 그냥 싹 교체).

2개의 댓글

  1. 챗지피티 사용하다가 갑자기 궁금해서 netxhack.com를 분석해달라고 하니까

    챗지피티 답변
    공개적으로 확인 가능한 정보 기준으로 보면 netxhack.com은 한국어 중심의 VPN·프라이버시·보안 소프트웨어 리뷰/해설 블로그에 가깝습니다. 사이트 소개 페이지에서 운영자는 한국에서 10년 넘게 VPN, 오픈소스, 디지털 프라이버시 관련 주제를 다뤄 왔다고 설명하고, 독자를 위해 보안 지식과 개인정보 보호 방법을 쉽게 풀어 쓰는 것이 목적이라고 밝힙니다.

    핵심 주제도 일관됩니다. 검색 결과로 확인되는 주요 콘텐츠는 VPN 추천·비교, DNS, 브라우저/앱 보안, 피싱 방지, 방화벽, 오픈소스 프라이버시 도구 등입니다. 즉, 도메인 이름에 hack이 들어가지만 현재 공개된 사이트 성격은 “해킹 툴 배포”보다 보안/프라이버시 정보 제공과 제품 리뷰 쪽입니다.

    상업성은 분명히 있습니다. 운영자는 About 페이지에서 방문자가 추천 링크로 가입하면 자신이 커미션을 받는 제휴(affiliate) 구조라고 명시하고, 별도 제휴 정책 페이지에서도 일부 콘텐츠에 제휴 링크가 포함된다고 공개합니다. 따라서 이 사이트는 “개인 블로그”이면서 동시에 제휴 마케팅 기반 리뷰 사이트로 보는 것이 맞습니다.

    신뢰성 면에서는 장점과 한계가 같이 보입니다. 장점은 제휴 여부를 숨기지 않고, 직접 사용·직접 리뷰를 강조하며, 개인정보처리방침과 운영 원칙을 비교적 자세히 공개한다는 점입니다. 한계는 추천과 수익이 연결된 구조라서, 운영자가 독립성을 주장하더라도 이해상충 가능성 자체는 남아 있다는 점입니다. 즉 “사기 사이트로 보인다”는 공개 정황은 현재 검색에서 두드러지지 않지만, 그렇다고 추천 순위의 완전한 중립성을 외부에서 검증할 수 있는 것도 아닙니다.

    개인정보/추적 관련해서는 사이트가 “개인정보는 수집하지 않는다”고 주장하면서도, 동시에 Google Analytics를 사용한다고 명시합니다. 또한 댓글 작성자 IP는 완전 저장이 아니라 일부를 0으로 마스킹해 저장한다고 설명합니다. 그래서 “아무 정보도 전혀 안 남긴다”기보다는, 직접 식별 가능한 정보 수집을 최소화하려고 한다고 주장하는 블로그로 이해하는 편이 정확합니다.

    보안/운영 측면에서 눈에 띄는 점도 있습니다. 개인정보처리방침에는 HTTPS 사용과 최신 보안 패치 유지를 적었고, 2026년 2월 글에서는 본인 워드프레스 블로그의 플러그인 취약점 기반 해킹 문제를 직접 정리한 게시물이 확인됩니다. 이건 운영자가 워드프레스를 쓰는 정황과, 실제 운영 이슈를 다루는 기술 블로그 성격을 보여주지만, 반대로 말하면 과거 운영 환경에서 보안 사고/침해 대응 경험이 있었을 가능성도 시사합니다. 공개 정보만으로 현재 사이트가 침해 상태인지까지는 판단할 수 없습니다.

    종합하면, netxhack.com은 현재 기준으로 악성 피싱/사기 사이트라기보다, 프라이버시·VPN 중심의 개인 보안 블로그 + 제휴 마케팅 리뷰 사이트로 보는 것이 가장 타당합니다. 다만 추천/순위 콘텐츠는 제휴 수익 구조를 감안해 읽어야 하고, 제품 선택 전에는 공식 벤더 문서·독립 보안 감사·환불정책 같은 1차 자료로 교차검증하는 것이 좋습니다.

    물론 일부러 백지인 상태에서 물어보긴 했지만 이글도 읽어들이고 또 이 블로그에서 댓글다는 사람 ip를 0으로 마스킹을 한다는 점까지 연관지어서 이 사이트(즉, NetxHack님) 신뢰도를 평가하니까 인상깊더라고요

    이글하고는 관계없는 얘기인데, 2026년 9월부터 구글이 개발자 인증 절차를 강제해서 F-droid같은 FOSS 플랫폼에서 반대 운동을 하던데 확인하셨나요? 혹시 제가 글을 못 본 건지요? F-droid측 설명으로는 앞으로 구글 개발자 인증절차를 안 한(구글 플레이스토어에 등록 안한) FOSS 앱 종류를 설치하지 못할 수도 있다는 것 같은데 이점을 어떻게 생각하시나요?

    1. 오 그런것도 나오는군요 ㄷㄷ 제가 소개 페이지에 적어놨는데 댓글 작성하시는 분들 IP 주소를 저장하지 않기 위해서 한자리를 아예 0으로 나오게 설정해두었어요. 별거 아니지만 그래도 No Log를 중시하는 입장에서 이런 작은 노력이라도 하려고 설정해두었습니다. ㅎㅎ 워드프레스 관리자는 자기 블로그에 댓글다는 사람 IP 주소를 다 볼 수 있거든요.

      전부다 0.0.0.0으로 처리할수도 있지만 스팸 댓글 봇 처리가 안되는거 같아서 한자리만 해두었습니다.

      그리고 마지막 질문에 대한 부분
      An Open Letter Opposing Android Developer Verification 글을 보았는데
      하.. 뭐랄까요 구글이 이렇게까지 무리수를 둬야하나 싶기도하고.. FOSS 진영 영향력 또한 어마무시한데 그래도 최소한의 타협은 해주지 않을까? 라고 기대하고 있습니다.

      안드로이드의 아이폰 대비 장점이 ‘자유도’인데 이걸 막는건 자충수라고 생각해서 일단 지켜보고만 있네요.
      깔아놓고 잘 쓰고있는 FOSS 앱들이 있는데 ㅜㅜ

댓글 남기기