目录
本文疯狂参考huamanggg师傅
web21
题目给了一个压缩包,有弱口令字典我们就抓包
并没有显示 账号密码的明文,而是用圈红地方的base64表示的,转码之后得到就是
admin:123 也就是我输入的账号密码 中间还有个冒号
Hint:
考点tomcat 认证爆破之custom iterator使用 tomcat 认证爆破之custom iterator使用 - 007NBqaq - 博客园 下载密码字典抓包,通过burpsuite暴力破解
Payload set ---->custom iterator(自定义迭代器)
三个部分分别导入,第一个账户admin 第二个冒号:其实可以合并到第一个 第三密码字典
需要进行base64编码;payload processing 进行编码设置
取消Palyload Encoding编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响base64 加密的结果
开始爆破就行,时间还是挺久的,这题也可以使用爬虫脚本
web22
http://flag.ctfer.com/index.php
页面已经失效了
web23
<?php
error_reporting(0);
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__);
}
?>
可以知道要GET 一个 token值 满足以上条件 ,很多函数不了解 ,去学习一下
isset() — 检测变量是否设置
substr函数格式 (俗称:字符截取函数)
格式: substr(string string, int a, int b);1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
intavl() 获取变量的整数值
变量token被md5加密,第一位=第十四位=第十七位,
化为整数后(第一位+第十四位+第十七位)/第一位=第三十一位
脚本附上,只判断了第一个条件,然后一个一个试 3j 是对的
import hashlib
a ='0123456789abcdefghijklmnoqprstuvwxxyz'
for i in a:
for j in a:
t=(str(i)+str(j)).encode()
md5=hashlib.md5(t).hexdigest()
if md5[1:2]==md5[14:15]==md5[17:18]:
print(t)
url后面加 /?token=3j ,就出来 了
web24
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_srand([ int $seed] ) : void
用 seed 来给随机数发生器播种。 没有设定 seed 参数时,会被设为随时数。使用者在进行一次mt_srand()操作后,seed数值将被固定下来,给接下来的mt_rand()函数使用。
当种子不变时,实际上生成的随机数是固定的。而这就是伪随机数漏洞,部分ctf题便以此为考点
看到mt_srand()函数即可知道是伪随机数,每次生成的随机数是一样的
那我们就来跑一下题目里的mt_srand(372619038)
<?php
mt_srand(372619038);
echo mt_rand();
url 后传入 /?r=1155388967
web25
error_reporting(0);
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');
}
分析一下代码
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
if((!$rand)) 表示 $rand==0,
$rand = intval($r)-intval(mt_rand()); 就是0,那么可知 $r==mt_rand
并且COOKIE 中传入的值token是 mt_rand()+mt_rand()
因为生成的随机数可以说是一个线性变换(实际上非常复杂)的每一次的确定的但是每一次是不一样的,所以不能 进行第一次*2就得到mt_rand()+mt_rand() 使用说只要我们得到种子就可以在本地进行获得自己想要的值 解题
通过随机数来寻找种子 我们让 ?r=0 得到随机数
用php_mt_seed反解可能存在的seed值,先下载php_mt_seed到kali里面
先输入make ,然后 ./php_mt_seed 随机数
可以看到爆破出几个seed, 1151008722 和1151008723和2282896958和3159902748
写段代码挨个试,可以看到当seed值是3159902748,返回了我们想要的 随机数
得到了种子是3159902748,就可以请求两次并求和得到token的值了
r=1416823701 ,token=811521195
抓包修改参数就行了 ,注意别超时我就是超时题目环境结束了
web26
源码中 提示访问checkdb.php,以post方式提交参数a、p、d、u、pass
根据提示输入后,显示失败,去爆破一下密码,但是直接空表单点击安装 就成功了,直接空就行了,也就是说直接抓包然后Go就出来了,这应该是出题时候代码逻辑的问题
(正常写法需要爆破出正确密码,也一样)
但是我这里一直抓包老不成功,抓的很难受,用Chrome 终于是成功了
web27
录取名单,身份证加密的正好是生日
看来是要爆破出来身份证号,抓包又抓半天
看了师傅们的wp 知道可以在burp里面的date模块爆破出日期,也可以直接爆破数字
应该就是19911016 ,
登陆就行了
web28
Hint:
通过暴力破解目录/0-100/0-100/看返回数据包
爆破的时候去掉2.txt 仅仅爆破目录即可
跟据提示走,爆破目录去掉2.txt, 设置从0~100,用的Cluster bomb集束炸弹
要跑很久,过了一会出来了,