web21
抓包
进行了base64加密,解码后发现账号和密码格式是
账号:密码
爆破
位置一开始选错了,应该是不含Basic的
模式选择custom iterator(自定义迭代器)
自定义迭代器可以自定义拼接方式
分别设置三个位置,第一个位置为admin
第二个位置为:
第三个位置
导入他下载的字典
选择base64解密 ,去掉url编码
web22
域名也可以爆破的,试试爆破这个ctf.show的子域名
环境没了
web23
还爆破?这么多代码,告辞!
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
变量 token 被 md5 加密,且它的第一位 = 第十四位 = 第十七位,化为整数后(第一位 + 第十四位 + 第十七位)/ 第一位 = 第三十一位,则可获得 flag。
<?php
for($i=0;$i<10000;$i++)
{
$token = md5($i);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1))
{
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1)))
{
echo 'token='.$i.'&'.'md5='.$token;
}
}
}
?>
得到token为422
传参
web24
爆个🔨
环境
e第一次看到这个函数,还以为是他打错了哈哈哈哈
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');
}
主要参考CTF_Web:php伪随机数mt_rand()函数+php_mt_seed工具使用_星辰照耀你我的博客-CSDN博客
简单来说就是说如果有mt_srand函数的话,就是有了种子,生成的随机数是固定的。但是如果没有这个函数,随机数每运行一次都会发生改变
题目就是要让r等于生成的随机数
ok了
web25
爆个🔨,不爆了
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
没有给出seed,所以我们需要通过工具推出seed
php_mt_seed
拖进kali,解压
make
随便传个参,r=0
输入 ./php_mt_seed 随机数
,开始爆破。
发现有很多个seed,查看网络看一下php的版本
看到php的版本是7.3,所以可能的种子就是2166812886和2550700805
写个脚本,试了第一个种子不行。
第一个得到的是r,第四个是cookie的token
因为只有在$rand不存在时,$_COOKIE['token']==(mt_rand()+mt_rand() 才能执行,而1722723182是我们在传?r=0时页面输出的随机数
此时的$rand = mt_rand()即第一个生成的随机数,因此只要我们使$r=mt_rand()=1722723182,就能让$rand=0,不存在,从而执行接下来的代码
web26
这个可以爆
打开
开始安装,跳转到了install.php
查看页面源代码
function check(){
$.ajax({
url:'checkdb.php',
type: 'POST',
dataType:'json',
data:{
'a':$('#a').val(),
'p':$('#p').val(),
'd':$('#d').val(),
'u':$('#u').val(),
'pass':$('#pass').val()
},
success:function(data){
alert(data['msg']);
},
error:function(data){
alert(data['msg']);
}
});
}
没懂
'a':$('#a').val()是一个 JavaScript 代码片段,其中使用了 jQuery 库的语法。
$
符号是 jQuery 库的别名,用于选择 HTML 元素。$('#a')
表示选择具有 id 属性为 "a" 的 HTML 元素。.val()
是 jQuery 提供的一个方法,用于获取元素的值。- jQuery 是一个 JavaScript 库。
所以,'a': $('#a').val()
这段代码的意思是获取具有 id 为 "a" 的 HTML 元素的值,并将其作为键 "a" 的值。通常这是在处理表单数据时使用的,可以获取用户在输入框中输入的值。
https://www.cnblogs.com/peterzhangsnail/p/10054533.html
这里就是第一种
审计一下代码,因为正确和错误都是返回一样的msg,所以这几个参数可以随便给,但是如果要过pass的值,u的值就一定要为admin
web27
CTFshow菜鸡学院招生啦!
ok 打开是个登录平台
下面有录取名单,意思就是要爆破随便一个人的身份证中间出生年月日
点击学籍查询系统
用火狐抓不到post的包,用了谷歌
抓到包,a和p参数
要爆破p中间几位,选择位置,以及爆破方式
uncode解码
ok登陆成功
web28
大海捞针
打开,确实有点奇怪/0/2
一样抓包一下
选择爆破的位置,以及爆破的方式要换成cluster bomb
两个位置都选numbers,步长为1