Javascript CTF比赛的形式其实跟其他的CTF大同小异,利用客户端身份验证过程的漏洞找到Flag,同时这也展示了客户端验证是多么的不可靠。
https://www.net-force.nl/challenges/
在这个挑战,弹出了一个需要用户名和密码的JavaScript警告框。
不能直接右键查看源文件,在chrome中,可以使用view-source查看页面源文件。如:
view-source:https://www.net-force.nl/challenge/level101/secret.html
很容易就看到了用户名和密码。
密码就是 javascript 。
查看页面源文件,发现有生成密码的函数submitentry()。这个函数运行完毕之后就会得到密码,确实是“不会等太久”。
我们可以通过在线执行js代码( http://js.do )得到密码,我们稍微修改下代码,让密码“alert”出来。
密码:bingo123
这种挑战给我们展示了一个需要用户名和密码登录框,而安全性是由一个JavaScript函数的形式实现……
查看源文件发现有一个unescape()函数对某些内容进行了解码。稍微修改下代码,将解码后的值赋值给m,然后用alert显示m的值。
所以我们很容易看到了正确的值。
Username:user
Password:member
跟其他的题目一样,也需要用户名密码,查看源文件发现有一处注释的内容是一段哈希值。
我们使用“John the Ripper”跑下这段哈希,得到了明文“blaat”。
然而,这并不是这道题目的password,再看了下js代码发现用户会被重定向到一个与username有关的链接。
https://www.net-force.nl/challenge/level103/soulslayer/
于是我在这个链接后面加了“blaat.html”。
于是我们得到了密码:blaataap。
页面很明确的要求需要ie的参与。
看了下页面源代码,需要解码一段编码后的字符串。我们依然使用js.do在线执行代码。解码后发现内容是用javascript.encode编码的。
Jscript.encode是微软用来编码js和vb脚本的。如果我们要读取源代码则需要进行解码。我们使用 http://the-computer-site.com/jscript-decode.php 进行在线解码。
仔细看完脚本后,我们能够确定它是用URL计算密码。我们稍微修改脚本,并使其显示存储在URL值中的密码。删除了for循环,因为这只是用来验证密码的代码。通过alert显示addr和pass2两个值。
现在我们得到了藏有正确密码的链接:
https://www.net-force.nl/challenge/level105/solution.php?blabla=Hall0
密码:hack0r
这个挑战告诉我们这个页面的源文件是由HTML Guarding保护。
我们的目标是绕过HTML Guardian的防护并读取实际的源文件。我们注意到右键单击在这个页面上禁用的,所以我们通过view-source查看源文件。
view-source: https://www.net-force.nl/challenge/level106/
正如所料,源文件也是加密过的,不过我们发现了eval()和unescape()用来解码一段脚本。
在线执行之后得到了这段被解密后的脚本。
对代码进行了缩进和排序后,我们注意到函数Koh()经过计算后返回M的值。
我们在函数返回M的值之前将其展现出来。
密码:0nd3rW4t3r
这个挑战需要一组用户名和密码,并且页面被HTML protect保护。
我们的目标是定位藏在页面源文件某处的用户名和密码。当我们查看源文件发现被编码的代码,解码后的结果赋值给变量e。通过alert读取e的值。
然而这段明文脚本只是计算s的值。因此我们试图执行此脚本确定s的值。然而我们只跑了涉及到“e ” 的一部分代码,脚本报错显示”d ” 的值未确定。我们从页面源文件得到了d的值,并修改代码使得成功运行,得到了“明文”。
当我们在这个脚本向下滚动,我们注意到了“passwdok()”函数(密码OK)。此函数的名称表明它执行密码验证检查。这一功能的主要部分被编码,我们需要解码。因此,我们让js.do解码这个脚本。
现在我们了解了认证过程,该变量good_login和good_pass分别是正确的用户名和密码的SHA1。该脚本计算用户提供的用户名和密码的哈希值,并进行判断是否都一致,如果结果为真则alert( ‘ Well Done! ’ )。现在我们接着用John the Ripper来解密哈希值。
或者我们可以提交到在线平台去解密
http://www.hashkiller.co.uk/sha1-decrypter.aspx。