本来我不习惯开QQ,可好友打来电话说有事找我,遂上线。因为我用的QQ是能显示IP地址的木子版本,所以看到好友的IP:xxx.xxx.19.24,发现好友是在学校的实验室上网。
分析加密函数的算法:从密码第一位开始,取密码的一个字符,取key对应位的一个字符,转换成Ascii码相加,然后相加结果再减去key中下一位的Ascii,然后把最后结果再转换成字符即所谓密文存储。
Substr(string,i,j)函数的作用是将字符串string的第 i 位起取出 j 个字符。Ord()和chr()则分别是字符到Ascii和Ascii到字符的转换函数。简化一下上面算法就是:$i_crypt=$i_text+$i_key-$i+1_key。先拿第一位算吧,假设原密码第一位Ascii码为x,则:
x+ascii(j)-ascii(p)=ascii(4)
用Ascii码算就是x+106-112=52
x=58转换成字符就是“:”,好奇怪。把六位密码全部还原回来,再去论坛登录,糟了,希望破灭了,提示密码错误!管理员大概不会去改代码中加密部分的算法的,难道,管理员把key改了?
重又回到论坛,注册一个新用户ecawen,密码mygod,然后打开它的user.dat观看,加密后的密文为p|lcv,按下载回来的论坛源代码中的密钥算了算,不对,果然key被改了。但包含key的文件是个mishi.php,key也在PHP语句里,远程根本无法得到,浏览器里打/forums/db/mishi.php返回的只是空白页面,因为传出时PHP语句早被服务器过滤了。怎么办,想了大约几秒钟,还是有办法的,我们不一定要知道确切密钥,知道密文和算法了,这么简单的算法我们应该能把需要的搞出来。
假设未知密钥第一位是Ascii码a,每二位是b,依此类推……
我的用户ecawen的密码(我注册的,当然知道,我输的是mygod)加密后密文是p|lcv,所以我们可以这样算:
(为了看着简洁ascii(m)我们直接用ascii码109)
109+a-b=112
121+b-c=124
103+c-d=108
.
.
.
看晕了吧,其实,我们加个()就豁然开朗了。
109+(a-b)=112
121+(b-c)=124
103+(c-d)=108
.
.
.
好了,拿出他的管理员密文来算吧:
x+(a-b)=52
x+(b-c)=36
x+(c-d)=64
.
.
.
把x再还原成字符,好了,原密码出来了吧?有点复杂?越这样你会越激动的!不过,有点要注意的是,你注册的用户密码位数要不少于管理员密码位数,此处管理员密码是六位,我一不小心注册了个五位的,到第六位不能算了,还得另注册个用户,走了弯路。
好了,拿解出的密码登录论坛,成功登录。打开secureCRT通过SSH登录其系统,用户名ROOT,密码为刚解出的那个密码,怀着激动的心情默念到第N声芝麻开门的时候,门开了!进去转吧,因为是好友学校的机器,代理我都没用,有事CALL好友出来垫背!
后来还发现系统中存在与论坛管理员同名的那个aaa用户且密码也相同,就不再详述了。那些ida/idq、webdav什么的早已远去了, 冲击波那个漏洞满城风雨后也早销声匿迹了,现在专门找系统漏洞的攻击及入侵已经快跟不上时代了,况且网上很多主机前面又是防火墙又是IDS的。而转而分析网站综合缺陷,从网站数据库入手,SQL注入等这些手段正是热潮,所以,管理员同志们,看好你们的每道关口、每个细节!