审计代码(攻防世界 web simple_js)

可算刷到web新手区最后一题了,终于上了代码审计。

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

在这里插入图片描述
打开链接页面弹出一个输入密码的对话框,但是试了好几次都显示错误。
F12查看网页源代码。
在这里插入图片描述

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) );

代码审计

咱也没学过js,这个时候审计程序就要抓住重点来看!

  • 最开始定义了一个dechiffre()函数,先略过
  • 下面调用了dechiffre()函数,参数是一行字符串
  • window.prompt(‘Enter password’)意思是弹出一个弹框显示’Enter password’

prompt()方法用于显示可提示用户进行输入的对话框。 这个方法返回用户输入的字符串
语法:prompt(msg,defaultText) 参数 描述
msg 可选。要在对话框中显示的纯文本(而不是 HTML 格式的文本)就是弹框显示文本。
defaultText 可选。默认的输入文本,你输入什么弹框一开始出现里面的输入框就会默认显示你这个文本。

  • h=window.prompt,h是用户输入的值
  • alert()用来弹出dechiffre(h)的值
    多次输入发现弹出的值都是相同的FAUX PASSWORD HAHA
    在这里插入图片描述
    因此推测,dechiffre()函数的返回值必定是FAUX PASSWORD HAHA
    【合理推测可以减轻代码审计工作量】
    现在寻找其它切入点,发现还有一行字符串可以利用。
"\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"

写出python脚本:

s="\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"
print(s)
'''输出结果55,56,54,79,115,69,114,116,107,49,50'''

list1=[55,56,54,79,115,69,114,116,107,49,50]
str=""
for i in list1:
	c=chr(i)
	str+=c
print(str)
'''输出786OsErtk12'''

flag:
Cyberpeace{786OsErtk12}

发布了85 篇原创文章 · 获赞 42 · 访问量 4344

猜你喜欢

转载自blog.csdn.net/weixin_43092232/article/details/104600286