中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 程序开发 >> ASP >> 轻轻松松破解开别人ASP木马密码的方法
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
ASP安全:简单学习ASP
ASP开发的WAP格式简易
简单一招用ASP实现对I
asp基础教程:网页间数
ASP优化:几招提高ASP
asp控制xml数据库的6段
ASP进阶:用ASP制作统
ASP进阶:验证身份证号
轻轻松松破解开别人ASP木马密码的方法
字体:

中华网络安全联盟    作者:奇趣    来源:奇趣技术网    时间:2008-5-28 9:22:57

破解目标:破解一经过加密的Asp木马登陆密码。由于木马里没有版本说明,具体也不知道这木马叫什么名。

破解思路:两种,用加密后的密码替换密文和利用密文及加密算法反解出密码。

前者根本算不上真正的破解。如果得不到Asp源代码,那么可以说对破解密码,我毫无胜算。有位华夏的朋友说他得到了一个Web的权限,但是无法修改主页,发现其中已经有个Asp木马,但密码是经过加密的。好了,废话太多了,那么,作好准备,这次的解说将会相当的漫长。

Asp木马登陆密码验证关键代码如下:

if Epass(trim(request.form("password")))="q_ux624q p" then
response.cookies("password")="8811748"

...

很明显,用的是Epass函数把输入的密码进行加密,然后将得到的密文和原密文进行比对。如果稍有点编程基础的话,特别是VB,那么Epass里的加密算法将一目了然。如果没有,那么,没关系,相信经过我的讲解,你很快就会明白。函数中,保存密码的变量是pass。pass&"zxcvbnm,./" 将pass里的内容与zxcvbnm,./相连接得到一个新的字符串。left(pass&"zxcvbnm,./",10)取前10位。StrReverse函数将得到的10位字符串次序颠倒。len(pass)获得密码的长度。下面是一个循环。将得到的字符串中的每一位的Ascii码-密码长度+取整(字符所在位*1.1),然后将得到的数值转换成字符重新连接。最后将得到的字符串中有'字符的全部替换成B,这样密文的产生了。如果我们提取加密算法用自己的密文替换原有密文,那么相映的密码也会变成你的密码。但我说过了,这并不是真正意义上的破解。

假如我们输入的是love,加密过程如下:

love
lovezxcvbnm,./ '连接
lovezxcvbn  '取前10位
nbvcxzevol  '次序颠倒
n
110(ascii)-4(位数)+int(1(位置)*1.1)=107
107的ascii码为k,依次类推,最后密文:
k`ucy hzts

我们可以通过密文和加密算法反推出密码,从算法的最后一步开始往上推。最后一步用B替换所有',有没必要将B替换回'呢,答案是否定的。只要我们能得到最后的密文,密码不一样也是有可能的。如果有10个B,那原密码的个数就2的10次方个,虽然原密码只有一个,但是1024个密码都是正确的。如果要完美破解的朋友,可以自己试着编写全部的组合。那么这步可以忽略了, 上面的算法很清晰。

chr(asc(mid(temppass,j,1))-templen+int(j*1.1))

我们只要简单的将+和-换一下就可以了。

chr(asc(mid(temppass,j,1))+templen-int(j*1.1))

但是还有一个问题,我们事先不知道密码的长度,没关系,幸好密码在1-10位之间,不太长。那么我们可以用一个1到10的循环求出所有可能的密码,再将其用StrReverse函数次序颠倒。那么最后得到的密码我们该怎么确定哪个就是呢。可以根据pass&"zxcvbnm,./",看除密码最后是否有zxvbnm,./的前几位。那么这就是真正的密码。那么如果密码是10位,将是永远正确的,因为后面不存在连接。所以我们可能得到两个答案。

以下便是我编写的解密函数:

function Ccode(code)
for templen1=1 to 10
mmcode=""
for j=1 to 10
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
next
Ccode=strReverse(mmcode)
response.write "密码"&templen1&":"&Ccode&"
"
if mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) and templen1<>10 then
result=left(Ccode,templen1)
next
response.write "最后密码:"&result
end function

好了,算法可能在这么短的时间内无法完全掌握,这是正常的,那么我将在压缩包中附送说明文档和加解密的Asp源代码,大家拿回去好好研究吧。同样,密码10永恒正确的。那么我们将Asp里原有的密文拿过来看看,会有什么结果。

字体:
 
设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
Copyright©2006-2008 中华网络安全联盟 All rights reserved.