【题目描述】
小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
【附件】
在线场景
【过程及思路】
打开在线场景后弹出输入框:
尝试输入了几次后,发现都是这个结果。
老样子,先查看网页源码。
经过代码审计,发现很坑的一件事:输入到输入框的内容经过js的函数window.prompt来保存到变量h中,之后网页直接将h经过dechiffre()这个函数一顿操作,然后把一个不知道什么东西返回并弹出,最后弹出的显然是上面图中的那个结果,中间并未进行任何验证。
也就是说,无论你输入什么都不会得到哪怕一丝有用的结果。
进一步说,本题的解法根本不是输入一个正确的密码然后得到flag。
这可怎么办?
注意到有一行很长的代码,里面有一些\x,表示的16进制的数。
我们将它还原一下..
转换代码(Python):
code = "\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"
strlist = code.split(',');
ans = ""
# print(strlist)
for asc in strlist:
s = chr(int(asc))
ans += s
print(ans)
得到:786OsErtk12
这个看起来像是flag了,拼入题目格式中,答案正确。
本题通过js代码审计、ascii编码还原,绕过假的、不可达的密码路径,从源码中得到我们想要得到的信息。
同时,也给我们一种新的思路:答案并不一定在看起来正常的走法上,可能需要你绕到背后。
【答案】
Cyberpeace{786OsErtk12}
如果文章对你有帮助,就动动手指点赞、喜欢、支持一下咖啡猫吧,谢谢!