|
关于口令密码校验
<script LANGUAGE="JAVASCRIPT">
<!--
loopy()
function loopy() {
var pass =""
while (pass != "login") //login为密码
{pass = prompt("请输入密码")}
alert("登陆成功")
}
//-->
</script>
此法用了while()死循环,如果密码不对,连用右键和菜单查看源文件的机会都没有,只有关闭Javascript了,不过IE无此功能,用NC吧。
只能输入三次密码的变形:
<script LANGUAGE="JavaScript">
<!-- Begin
function password() {
var testV = 1;
var pass1 = prompt('请输入密码:','');
while (testV < 3) {
if (!pass1)
history.back();
if (pass1 == "password") { //password为密码
alert('登陆成功!');
window.location="time.html"; //正确链接的URL.html
break;
}
testV+=1;
var pass1 =
prompt('密码不对,请重新输入');
}
if (pass1!="password" & testV ==3)
history.go(-1); /*失败则返回前一个文档,可用window.
location="***/***.html"替换 */
return " ";
}
document.write(password());
</script>
以下为一实例(同样也隐去地址,请原谅。)
首页源码
<script language="JavaScript"><!--
function dw(skey,msg)
{document.write(codeIt(skey,msg));}
var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
fghijklmnopqrstuvwxyz!" |#$%&'()*+,-./:;<=>?@[\]^_t`{}~n";
function codeIt (mC, eS)
{var wTG, mcH = mC.length / 2, nS = "", dv;
for (var x = 0; x < eS.length; x++)
{wTG = mC.indexOf(eS.charAt(x));
if (wTG > mcH) {dv = wTG - mcH; nS = nS + mC.charAt(48 - dv);}else {dv = mcH - wTG;nS = nS + mC.charAt(48 + dv);}}return nS;}//--></script>
<script>
dw(key,"FgwhqjfW,[*;#[;=EX.ydy%whqjfXD00FYKK0tnysEn0tnys}En0KKD00FIgwhqjfD");</script> <script>
dw(key,"FgwhqjfW,[*;#[;=EX.ydy%whqjfXW%&?EXdjulwhJfbfXDW00FIgwhqjfD");</script> <script>
dw(key,"FgwhqjfW,[*;#[;=EX.ydy%whqjfXW%&?EXdjjgJfbfXDWWWW00FIgwhqjfD");</script> <script>
dw(key,"FgwhqjfW,[*;#[;=EX.ydy%whqjfXD00FYKK0telwfqkl
WmyqlPO030mumxuhEvkwemulfJynnJeguhlymuJdyneu0jyggEvkw
emulfJynnJjyggckhvJdyneu0ulwhajfqklPO0jyggckhvPO020KK
D00FIgwhqjfD");</script><script>dw(key,"FgwhqjfWnylse
ysuEX.ydy%whqjfXDFYKK0telwfqklW*ucqlvkcPO3cqlvkcJkjul
PXvulspqJrfmXLXXLXruqsrfE`nnLcqvfrE{`nLfkknxyhEaugLvq
huwfkhqugEaugLgfyfegEaugLgwhknnxyhgEaugLhugqZuEaugLmu
lexyhElkXOG20IIWKKDFIgwhqjfD");</script>
其实源文件并不复杂,只不过有几串特长字符让人迷惑罢了。查看
源文件,没有进入会员区的调用和链接,故此五行乱码一定是
JavaScript的调用和链接。观察发现函数codeIt是密码计算式,
函数dw是输出JavaScript语句,试着把第一行的F删去,破坏其语
句结构发现输出script LANGUAGE="JavaScript">再把gwhqjfW,
[*;#[;=EX.ydy%whqjfXD00F删去。输出<!--flag=0 flag2=0-->
由此可得出五行乱码为
script LANGUAGE="JavaScript">"> <!-- flag=0 flag2=0 -->
-> t/script>script LANGUAGE="JavaScript">" SRC="vpencr.
txt"> t/script>script LANGUAGE="JavaScript">" SRC="vpp
s.txt"> t/script>script LANGUAGE="JavaScript">"> t!--
function main() { member=document.all.username.value
pass=document.all.password.value encryption() password()
} --> t/script>script LANGUAGE="JavaScript"> !-- funct
ion NewWindow(){window.open("dengji.htm","","height=400
,width=340,toolbar=yes,directories=yes,status=yes,scrol
lbars=yes,resize=yes,menubar=no");} // --> t/script>当
然实际中困难重重,曾头脑发昏地考虑用计算器算出每个nS值—^@^,
而且F的值有出入,应为"<",但已经无关紧要了。
在IE地址栏输入vpencr.txt,vpps.txt,dengji.htm的URL,获得
vpencr.txt和vpps.txt,并证实dengji.htm的URL正确。
vpencr.txt(密码表)源码
function encryption()
{
mm = "Z"
k = "j"
b = "p"
mmmm = "&"
ccc = "6"
l = "i"
c = "q"
m = "s"
abcd = "m"
o = "n"
u = "z"
e = "d"
gg = "U"
p = "u"
jj = "O"
v = "a"
j = "y"
x = "c"
t = "h"
h = "k"
vv = "C"
*
*
*
*
*
y = "t"
lll = "."
mmm = ","
cccc = "]"
g = "l"
dddd = "{"
eeee = "}"
ffff = ""
gggg = "|"
hhhh = "!"
iiii = "@"
jjjj = "#"
kkkk = "$"
llll = "%"
nnnn = "("
}
奇怪,这个密码表我好象在哪见过?
vpps.txt源码
function password()
{
if(member==h+l+g+g+p+m+v)
{
if(pass==v+y+y+v+x+h)
{alert(" ASS、、、欢迎来到成员区")
window.location.href = y+u+lll+t+y+abcd
flag2=1}
}
if(member=="")
{}
else
{
if(flag==3)
{window.location.href = "http://***.***.com"
flag2=1}
if(flag2==1) {}
else
{alert ("现在要格式化你的硬盘!!!!————骗你的,呵呵")
flag=flag+1}
}
}
对照vpencr.txt,member=h+l+g+g+p+m+v=killusa, pass=
v+y+y+v+x+h=attack, href=y+u+lll+t+y+abcd=tz.htm。搞定!
当然也可把会员区的URL改为window.open(y+u+lll+t+y+abcd,""
,"location=0");叫他进了会员区也不知道自己在哪个目录下。
使用密码表好象成了一种潮流,好处很多啦,无须特殊转换,就能
使"鸡"="?quot;^@^,只不过当前个人主页没有文件权限,看懂密码
表比看懂函数计算式容易多了。有一些个人主页就是直接调用密码
表,不隐藏地址,很容易被人copy下分析。
关于口令无密码校验
一个典型的例子
<script language="JavaScript">
<!--
function hidden(){
var location=document.input.password.value + ".html";
this.location.href = location;
}
// -->
</script>
<form name="input">
<table>
<tr>
<td> assword:<p><input type="text" size="15" name="password"></p>
<p><input type="button" value="Enter" onclick="hidden()"></td>
</tr>
</table>
</form>
这是终极加密,也是极无耻的加密法,但很实用^@^。 链接的加密页为document .input.password.value + ".html",input.password.value就是你输入的密码作为文件名,.html为后缀名(可因需要改为.htm),URL的变化:
var location=document.input.password.value + ".html";(当前路径)
var location="../../../"+document.input.password.value + ".html";(相对路径)
var location="http://***.com/"+document.input.password.value + ".html";(绝对路径)
var location="http://"+"key1"+".com/"+"key2"+"/"+"key3" +…………+"key4"+ ".html";
(主机、目录、文件名都包含进去,key(n)分别为密码的某一部份)
var location=document.input.password.value;
(呵呵,密码就是URL)
常见的几种变形:
<body OnLoad="keyKeeper()">
<script LANGUAGE="JavaScript">
function keyKeeper() {
// Get Password
var password = prompt("输入登陆密码 :", "")
if (password) {
// Get Keys
var key1= password.substring(1,2)
var key2= password.substring(3,4)
var key3= password.substring(5,6)
// Create File Name
var passpage=''+key1+''+key2+''+key3+".htm";
// GO TO FILE
this.location.href = passpage;
} }
</script>
此例不同于关于口令密码校验的例子,可点击取消,让人有“破网”的感觉,但本质还是密码=文件名。
我就曾见过能按系统时间变化加密目录和文件名的脚本,某一时间得出一个目录或文件名,原理一样的,只不过函数计算式较复杂而已。(如果你修改自己的系统时间会……?)
此法最好不要和密码表混用,别人很容易从密码表推出密码或范围。
可见此类型加密的最大特点是无标准密码核对过程。由于没有核对过程,我们无法知道密码的正确性,也无法绕过密码,直接进入URL。相当于在地址上输入成千上万个URL,直到成功。所以此类型的加密破解机率几乎为零。(除非他机子“养马”,或到服务器上改。呵呵)话说回来,这违背了加密原则,等于在主页上写道“请你E-mail来,我将给你页面的URL(密码)”,如此在表单输入密码和在地址栏输入URL是一样的效果,只不过多了个密码表单遮人耳目罢了。是不是很无耻呢???什么……你要用此法加密,我晕倒^@^。 |
|