声明:以下CTF题均来自网上收集,在这里主要是给新手们涨涨见识,仅供参考而已。需要题目数据包的请私信或在下方留言。
1.MD5之守株待兔,你需要找到和系统锁匹配的钥匙(来源:实验吧)
1.关卡描述
2.解题步骤
分析:
点开链接可以发现有两串字符,而且系统的秘钥是一直在变化的
题目中已经给了MD5加密,那么用MD5解密发现您的秘钥是[空密码]
系统秘钥一直在变化,猜可能是时间戳
思路:每刷新一次,系统key都会变化一次,解密md5后可以发现,系统key是一个类似“1530346200”的数字,且每刷新一次,key值都加1(如果有其他人提交,可能返回结果不止加1),写个脚本来守株待兔。
注意:脚本中的key值,应根据当前页面返回的系统key md5解密后的值,往后顺延一定的位数
如当前页面的系统key为1530346100,可以设置脚本中的key为1530346200
在线时间
http://tools.sharejs.com/unixtime.html
# -*- coding: utf8 -*-
import requests,time
url='http://ctf5.shiyanbar.com/misc/keys/keys.php?key=1547450636'
s=requests.session()
while(1):
res=s.get(url)
print res.content
if res.content.find('false')==-1:
break
time.sleep(1)
CTF{c04ffec18156c696}
2.你没有见过的加密!(来源:实验吧)
1.关卡描述
2.解题步骤
分析:
解密代码:
<?php
$cryptedstr = "MDEzMjE5MDAyMTg0MTUzMjQwMTQ0MDc3MjUzMDk2MTc1MTUzMTE4MTg4MDEwMDA2MTg4MDA0MjM4MDI1MTA3MTU4MTc5MTM4";
$cryptedstr = base64_decode($cryptedstr);
$len = strlen($cryptedstr);
$str = "";
srand(3284724);
for($i=0;$i<$len/3;$i++){
$temp = substr($cryptedstr, 0, 3);
$cryptedstr = substr($cryptedstr, 3);
$n = intval($temp)^rand(0, 255);
$str .= chr($n);
}
echo "$str";
?>
在线程序解释器
flag{you_are_successful}
代码部分解析:
1.rand()函数
作用:返回随机整数
用法:rand(min,max) min和max规定随机数产生的范围,可以省略不写,不写时rand() 返回 0 到 RAND_MAX 之间的伪随机整数。
2.srand()函数
作用:播下随机数发生器种子
用法:srand(seed)
说明:只使用rand()函数时,并不能产生的随机数随机性很差,用srand()后,随机性大大增加。
注:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现在已自动完成。
有时在代码中仍然会遇到srand()。
真正的随机数是没有的,rand也是通过一定的数学计bai算模拟的,而如果没有初始化,每次产生的随机数都会重复,所以要加上 srand,php 4.2以后已经可以不用加了,但测试发现,加上万无一失