今天跟大家唠唠我怎么把那个Discuz!(简称dz)的后台给撬开的,纯属个人实践,不鼓励非法行为!
得承认一开始我是个菜鸟,对着dz的后台,两眼一抹黑。听朋友说,dz的后台有些漏洞,可以利用,我就琢磨着试试看。
第一步,肯定是要搞个dz的程序回来。我在本地搭了个测试环境,用的phpStudy,很简单,几分钟就搞定了。然后,下了个dz的安装包,一路下一步安装
就开始瞎摸索了。
我先是把dz的后台代码翻了个底朝天,看着那些php代码,头都大了。不过我还是硬着头皮,一行一行地看,主要关注那些涉及到用户登录、权限验证的地方。
摸索阶段:先各种百度,看看有没有现成的教程或者工具。结果,找到一些,但是大部分都过时了,或者根本没用。
然后开始自己尝试,各种SQL注入,XSS攻击,反正能想到的都试了。结果,大部分都失败了,dz的防御机制还是有点东西的。
我还试过爆破后台密码,但是dz的密码加密方式比较复杂,爆破起来太慢了,就放弃了。
折腾了几天,感觉毫无进展,人都快崩溃了。
后来我冷静下来,重新梳理了一下思路。我觉得,既然dz的后台这么难搞,那是不是可以从前台入手?
于是我又开始研究dz的前台代码。我发现,dz的前台有些功能,比如用户注册、找回密码等,也涉及到用户信息的处理。
转机:我开始重点关注找回密码这个功能。我发现,dz的找回密码流程,好像存在一些漏洞。
dz会向用户的邮箱发送一个重置密码的链接。
这个链接里面包含一个token,用于验证用户的身份。
如果这个token可以被伪造,那就可以直接重置用户的密码了。
于是我就开始尝试伪造这个token。我先注册了一个普通用户,然后通过找回密码功能,获取了它的token。我分析了这个token的生成规则,发现它好像是基于一些用户信息生成的。
突破:我尝试修改注册用户的某些信息,比如用户名、邮箱等,然后再次获取token,看看token是否会发生变化。
经过多次尝试,我终于找到了token的生成规则。原来,token是基于用户名、邮箱、注册时间等多个因素生成的。
知道了token的生成规则,就可以伪造token了。
我先获取了管理员的用户名和邮箱,然后根据token的生成规则,伪造了一个管理员的token。我将这个token放入重置密码的链接中,访问了这个链接。
奇迹发生了!
我成功进入了管理员的重置密码页面,直接重置了管理员的密码。
最终:用新密码登录后台,我就成功拿到了dz的后台权限。
这只是我个人的实践经历,不鼓励大家去做非法的事情。而且dz官方也在不断修复漏洞,所以这种方法可能已经过时了。
不过通过这回实践,我学到了很多东西。也明白了,安全无小事,任何一个漏洞都可能导致严重的后果。