进入网站,提示要登陆,妥爆破
抓包
注意到最下行的base64编码
发现就是刚刚输入的账号密码
因此这里就是要选择爆破的地方了
发给inruder,添加爆破位
载入题目给的字典,并且添加爆破的规则
爆
略
代码审计
题目很简单,只要能满足以上条件即可输出flag
但是仍需要一定的编写代码能力
ctf里,能够用工具解决的都是简单题,所以编写代码的能力是很重要的,希望大家别做脚本小子,多亲自写写,相信一定会有不同的感悟和提升
这里我给出两种方法
import requests
import string
strings=string.ascii_lowercase+string.digits
for i in strings:
for j in strings:
url = "http://08945b13-a3f3-425d-a7c5-ae238e8ec15a.challenge.ctf.show/?token="+str(i)+str(j)
res = requests.get(url=url)
if 'ctf' in res.text:
print(res.text)
exit()
这种方法比较慢,但更简单更容易理解,推荐新手使用
php脚本
这个脚本优点是速度更快,但需要一定的php基础
以上两种方式都是可以的
源码:
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
这里搜索一下mt_strand()函数:
即生成随机数
其实说是随机数,但并不是真正的随机,这里其实生成的是伪随机数
如何理解?
首先我们要知道,计算机不能产生绝对的随机数,只能产生伪随机数。伪就是有规律的意思。伪随机数就是说计算机产生的随机数是有规律的。那么计算机是怎么产生随机数的?当然是通过算法,这个算法是有映射关系的,如我放进1234,他会出来一个特定的数。
而系统实现随机数是把当前的系统时间放进去,每次时间都不一样,所以可以实现每次出来的数都不一样。如果你每次都放进一样的种子,生成的随机数列就是一样的了。
也就是说,你在不同的电脑上输入同样的种子(比如1234),输出的随机数是一致的
也就是说这道题里产生的随机数其实是固定的
自己电脑上生成一下
这里还要注意一个细节,你所使用的php版本要和服务器的一样,生成的伪随机数才能一致
源码
审计,种子没有明确给出,但是需要种子才能继续推进,因此需要对种子进行爆破
看到这里,get一个r=0的值,则得到的rand为伪随机一次的相反数
爆破seed,由php的版本,选取7.1以上的进行尝试
尝试可能的seed即可
对数据库密码进行爆破
进入靶场,页面是登陆系统,可以下载附件查看相关考生信息
身份证号不全,需要完整身份证号进行查询,因此对身份证号爆破
unicode转中文:
登陆得到flag:
对目录进行爆破
两个位置均设置好爆破规则即可
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧