~目录~
开始
web22、25、27未复现…
web21 Custom iterator(Base64加密)
发现账号密码被Base64加密了,通过解密得知账号密码的形式为
账号:密码
抓包,添加$
选择Payload type为Custom iterator,在Position1添加admin:(这里其实我们不知道账号为admin,正常爆破时间太长,看了大佬的wp知道账号为admin,我们就只爆破密码了)
在Position2导入网站提供的密码字典
在Payload Processing添加Encode Base64-encode
将下方的URL-encode these characters取消勾选
爆破出密码:
web22 子域名
让我们爆破ctf.show的子域名
在线爆破有很多网站,爆破无果
Hint中提示:
直接访问即可得到flag
但是现在登不上去了
web23 MD5加密
给了一段php代码
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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__);
}
?>
变量token
被MD5加密,且它的第一位=第十四位=第十七位,化为整数后(第一位+第十四位+第十七位)/第一位=第三十一位
cv一段脚本:
import hashlib
dic = "0123456789qazwsxedcrfvtgbyhnujmikolp"
for a in dic:
for b in dic:
t = str(a)+str(b)
md5 = hashlib.md5(t.encode(encoding='utf-8')).hexdigest()
if md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18]:
if int(md5[1:2])+int(md5[14:15])+int(md5[17:18])/int(md5[1:2])==int(md5[31:32]):
print(t)
得到3j,在url后面加上?token=3j
,得到flag
web24 mt_srand(seed)
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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(seed)
是一个随机数生成器,从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数,因此不需要播种,并且如果设置了seed
参数,生成的随机数就是伪随机数,而且每次生成的随机数是一样的
intval()
函数用于获取变量的整数值
<?php
mt_srand(372619038);
echo(mt_rand());
?>
运行得到1155388967
此处注意:PHP版本不同,生成的随机数不同,亲测PHP7.4运行得到的随机数才能出flag
然后就是传入r
web25 mt_rand()和Cookies
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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');
}
利用php_mt_seed脚本
由下列语句可知 将两个随机数相加得token值
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
利用以下脚本
<?php
mt_srand(1993207614);
echo mt_rand()."\n";
echo (mt_rand()+mt_rand());
?>
构造
/?r=1185788614 Cookie: token=710383821
方法就是这样,应该出flag的,但我尝试了所有的可能,都出不来…
web26 弱密码
抓包爆破出密码 7758521
出flag了
web27 出生日期
最大的问题是抓不到包…看这篇吧
web28 目录
根据提示我们爆破目录
设置payload,1和2相同
找状态码为200的数据包,发现flag