之前参加中科大的ctf比赛有一道题对我影响特别深刻。名字叫cyberpunk2077,点进去后就是一个倒计时。大概估计了一下倒计时走完刚好就是2077年,硬等是不可能了,于是想到调整本地服务器时间。调到2077年,果不其然flag出来了。
于是就想着自己写一道倒计时ctf题目。
利用html里的一个标签加上js函数实现局部刷新,当时间差为0时就输出flag。然偶利用代码混淆将判断语句混淆。
源码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8" />
<title>倒计时</title>
<script type="text/javascript">
function countdown ()
{
var end = new Date ("2019-11-25 00:00:00");//结束时间
var now = new Date ();//获取服务器时间
var m = Math.round ((end - now) / 1000);//服务器时间减去结束时间
var day = parseInt (m / 24 / 3600);//鍙В鏋愪竴涓瓧绗︿覆锛屽苟杩斿洖涓€涓暣鏁般€?
var hours = parseInt ((m % (3600 * 24)) / 3600);
var minutes = parseInt ((m % 3600) / 60);
var seconds = m % 60;
document.getElementById ("clock").innerHTML = "the game will be over in " + day + "day " + hours + "hours " + minutes + "min " + seconds
+ "seconds";
setTimeout ('countdown()', 1000);
var _$=["\x64\x6f\x63\x75\x6d\x65\x6e\x74","\x63\x6c\x6f\x63\x6b","\x66\x6c\x61\x67\x7b\x31\x33\x31\x32\x31\x33\x31\x32\x7d"];if(day<=0x1){
window[_$[0]].getElementById(_$[1]).innerHTML=_$[2]}
}
window.onload = function ()
{
countdown ();
}
</script>
</head>
<body>
<span id="clock"></span>
</body>