真正破解你的AWVS
字数 1182 2025-08-10 12:17:59
AWVS漏洞扫描器反连平台认证绕过技术详解
1. 背景介绍
AWVS (Acunetix Web Vulnerability Scanner) 是业内最强大的Web漏洞扫描器之一,但在实际渗透测试中发现其针对log4j等需要外联平台的漏洞检测存在缺陷。本文详细分析该问题并提供完整的解决方案。
2. 问题发现与分析
2.1 初始发现问题
- 在AWVS检测项中确认存在log4j漏洞检测功能
- 实际扫描log4j靶场时却无法检测出漏洞
- 通过代理服务器(Burp Suite)分析扫描流量
2.2 关键发现
- AWVS使用外联平台bxss.me进行认证
- 认证数据包路径为
/ng/auth(POST请求) - AWVS根据响应中的
success字段判断认证是否成功 - 只有认证成功时才会进行需要外联平台的漏洞检测
3. 手动验证方法
3.1 使用Burp Suite进行中间人攻击
- 配置AWVS使用Burp作为代理服务器
- 启动扫描log4j靶场
- 在Burp中拦截认证请求响应
- 修改响应内容,将
success值从false改为true - 放行修改后的响应
3.2 验证结果
- 扫描流量中出现大量反连平台数据包
- 最终成功检测出log4j漏洞
4. 自动化解决方案
由于手动操作繁琐,提出自动化解决方案:
4.1 系统修改
- 修改本地hosts文件,添加:
使bxss.me域名解析到本地127.0.0.1 bxss.me
4.2 Python自动化脚本
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from datetime import datetime, timedelta
from flask import Flask, jsonify, request
import os
app = Flask(__name__)
@app.route('/ng/auth', methods=['POST'])
def auth():
return jsonify(success=True, msg="!p1")
def generate_self_signed_cert(cert_path, key_path):
if not os.path.exists(cert_path) or not os.path.exists(key_path):
key = rsa.generate_private_key(
public_exponent=65537,
key_size=4096,
backend=default_backend()
)
subject = issuer = x509.Name([
x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"),
x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"California"),
x509.NameAttribute(NameOID.LOCALITY_NAME, u"San Francisco"),
x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"My Company"),
x509.NameAttribute(NameOID.COMMON_NAME, u"localhost"),
])
cert = x509.CertificateBuilder().subject_name(
subject
).issuer_name(
issuer
).public_key(
key.public_key()
).serial_number(
x509.random_serial_number()
).not_valid_before(
datetime.utcnow()
).not_valid_after(
datetime.utcnow() + timedelta(days=365)
).sign(key, hashes.SHA256(), default_backend())
with open(cert_path, "wb") as f:
f.write(cert.public_bytes(serialization.Encoding.PEM))
with open(key_path, "wb") as f:
f.write(key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption()
))
if __name__ == '__main__':
CERT_PATH = 'selfsigned_cert.pem'
KEY_PATH = 'selfsigned_key.pem'
generate_self_signed_cert(CERT_PATH, KEY_PATH)
app.run(host='0.0.0.0', port=443, ssl_context=(CERT_PATH, KEY_PATH))
4.3 脚本功能说明
- 使用Flask创建简单的Web服务
- 监听443端口(HTTPS)
- 自动生成自签名证书
- 对
/ng/auth的POST请求返回{"success": true, "msg": "!p1"}
4.4 使用步骤
- 保存上述代码为Python文件(如
awvs_auth_bypass.py) - 运行脚本:
python awvs_auth_bypass.py - 确保脚本持续运行
- 正常使用AWVS进行扫描
5. 技术原理总结
- 认证机制:AWVS依赖外联平台bxss.me的认证
- 认证缺陷:仅检查响应中的success字段,无其他验证
- 解决方案:
- 通过DNS欺骗将bxss.me指向本地
- 本地模拟认证服务器返回成功响应
- 效果:完全启用AWVS内置的反连平台功能
6. 注意事项
- 需要管理员权限修改hosts文件
- 脚本需要Python环境和相关依赖(cryptography, flask)
- 443端口不能被占用
- 防火墙需允许443端口的入站连接
- 自签名证书可能引起浏览器警告,但对AWVS无影响
7. 扩展应用
该方法不仅适用于log4j漏洞检测,还可用于AWVS所有依赖外联平台的漏洞检测功能,包括但不限于:
- SSRF漏洞
- XXE漏洞
- 各种反连类漏洞检测
通过此方法,可以完全解锁AWVS的高级扫描功能,无需依赖官方外联平台。