【CTF | WEB】004、攻防世界WEB题目之simple_js

simple_js

题目描述:

小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

题目场景:

解题思路

尝试了一下随便输入密码,显示如下:


按下F12查看页面元素,发现JS代码:


    function dechiffre(pass_enc){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab  = pass_enc.split(',');
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        n = tab2.length;
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));
                        }
        p += String.fromCharCode(tab2[17]);
        pass = p;return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );

对代码进行审计,发现无论输入什么密码都会显示之前的画面,函数中传入的变量根本没有被调用,去除一些多余的变量:

    function dechiffre(){
            var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
                        var tab2 = pass.split(',');
                        var i;
                        var p = "";
                        for(i = 0; i <  n; i++ ){
							     p += String.fromCharCode((tab2[i]));
                        }
		  return p;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );

代码解释:

1、String["fromCharCode"] 这个语句是一种非标准语法的写法,它实际上是等价于标准语法中的 String.fromCharCode
String.fromCharCode()函数用于从一些Unicode字符值中返回一个字符串,String.fromCharCode()方法的返回值为String类型,其返回值为Unicode数值所表示的字符串。

2、"\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30" 是使用**十六进制(hexadecimal)**表示的ASCII编码

\x35 表示 ASCII 码 53,对应字符 '5'。
\x2c 表示 ASCII 码 44,对应字符 ','。

依此类推,这个字符串代表的是以下的字符序列:

"55,56,54,79,115,69,114,116,107,49,50"
document.writeln( String.fromCharCode( 65, 66, 67, 68, 69, 70, 71 ) ); // ABCDEFG
document.writeln( String.fromCharCode( 78 ) ); // N
document.writeln( String.fromCharCode( 20013, 22269 ) ); // 中国
document.writeln( String.fromCharCode() ); // (空字符串)

阅读完代码之后,我们发现上述dechiffre()的主要作用就是对含有逗号的数字字符串进行解码,将每个数字转换为其对应的unicode字符。所以我们将16进制编码的字符串放进函数的代码中运行:

<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
 function dechiffre(){
      var pass = "\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30";
						var tab2 = pass.split(',');
						var i;
						var p = "";
                        for(i = 0; i <  tab2.length; i++ ){
							  p += String.fromCharCode((tab2[i]));
                        }
		    return p;
    }
    alert(dechiffre());
</script>
</head>
<body></body>
</html>

得到flag为Cyberpeace{786OsErtk12}

CTF (Capture the Flag) 中的 Web 部分通常指的是 Web 漏洞挖掘、Web 安全攻防和渗透测试等内容。如果你想要学习这个方向,可以按照以下步骤规划你的学习路线: 1. **基础知识**: - 学习 HTML/CSS/JavaScript:这是构建网站的基础,理解它们的工作原理对于发现 Web 应用程序的漏洞至关重要。 - 熟悉HTTP协议和TCP/IP:了解网络通信原理有助于理解 Web 安全。 2. **Web安全基础**: - 学习 OWASP Top 10:这列出了常见的 Web 安全威胁,如SQL注入、XSS攻击等。 - 掌握基本的安全工具:如Burp Suite、Nmap等用于扫描和分析网络服务。 3. **Web应用框架和服务器端语言**: - Python Flask/Django、Node.js Express等:了解如何构建 Web 应用,熟悉其内部结构。 - PHP、ASP.NET等:了解常见 Web 开发语言的特性和可能存在的安全隐患。 4. **漏洞发掘与利用**: - 学习如何识别和利用各种Web漏洞,如CSRF、文件包含漏洞等。 - 参加OWASP WebGoat或其他在线课程练习实战。 5. **渗透测试**: - 获取渗透测试相关的认证,如CEH (Certified Ethical Hacker) 或 GPEN (Giacomelli Penetration Tester)。 - 使用Kali Linux或类似系统进行渗透实验。 6. **实践项目**: - 参与线上比赛或社区的 CTF 比赛,不断锻炼实战能力。 - 尝试修复已知的漏洞或构建安全策略,提升防御意识。 7. **持续跟进**: - 关注最新的 Web 安全动态和技术更新,关注网络安全博客和论坛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值