前置软件
最好是用火狐浏览器,FoxyProxy插件,burpsuite,ctfshow给的字典附件
如何配置的问题去别的博客搜,都有。
web21(爆破base64加密后的账号密码)
这里访问题目的时候就要开始抓包,然后点forward放包
然后在题目那里输入账号密码,以admin/admin为例,点击登录
又抓到了一个包,可以看到base64加密后的账号密码
CTRL+I放到Intruder爆破模块。添加变量
payloadtype选Custom iterrator,position1填admin,position2填: ,position3导入字典
往下滑paylaod processing选择base64encode
爆破完成后按长度排序发现一个200的状态码
查看响应头发现flag
web22(子域名爆破)
推荐用OneForAll爆破,项目地址:GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具
或者用在线子域名爆破网站:在线子域名查询
提示说这题域名已失效,直接提交flag即可
web23(md5爆破)
<?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__);
}
?>
代码要求get传入的token经过md5加密后,第1位=第14位=第17位并且(第1位+第14位+第17位)/第1位=第31位,可以写一个php脚本跑一下,应该有很多种可能。
<?php
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for($i=0;$i<strlen($string);$i++) {
for($j=0;$j<strlen($string);$j++){
$token = md5($string[$i].$string[$j]);
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 $string[$i].$string[$j]."\n";
}
}
}
}
?>
结果有两个
随便输入一个提交token即可获得flag。
web24(php伪随机数)
<?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');
}
?> Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022
x1.00
考察php伪随机数的爆破
原理参考文章:PHP的伪随机数爆破_WHOAMIAnony的博客-CSDN博客
发现给了随机数种子
查看响应头发现服务器php版本为7.3.11
直接本地用php跑一下随机数
<?php
mt_srand(372619038);
echo mt_rand();
echo "\n";
?>
结果为1155388967,get传入即可得到flag
web25(爆破php伪随机数种子)
关键代码如下
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;
}
传参r=0,这样就可以得到第一次mt_rand()的负数
将117383695拿去爆破,可能出现的随机数种子如下
通过查看响应头可知网站用的是php7.3的版本,接下来要绕过以下代码
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
令r=117383695可以使得!$rand为真,mt_rand()的值本地测试代码如下,经过尝试2590851206为随机数种子.
if($_COOKIE['token']==(mt_rand()+mt_rand()))
通过该行代码我们知道要将两个随机数相加,本地测试代码如下:
<?php
mt_srand(2590851206);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
输出结果如下:
利用hackbar进行get传参,modheader插件进行cookie传参得到flag
最终payload
?r=117383695
Cookie:token=1886562161
web26(数据库密码爆破)
进入容器直接点击开始安装,出现install.php的界面,直接填信息,开始安装,果然报错了,抓个包看看。
感觉是密码错了,直接放入爆破模块,将密码设为变量,字典是网上很常见的top1000,直接开始爆破,竟然没爆出来。直接上了个2w的字典,结果如下:
我看有的师傅参数全部设置为空,传上去也能得到flag,目前不知道什么原理
web27(身份证爆破)
登录网站发现有录取名单,下载下来看一下发现有姓名和身份证号,发现身份证号就缺了生日那部分。
接着看题发现了一个学籍管理系统可以验证姓名和身份证的地方
这时候我们的思路就是可以借助burpsuite进行爆破。先抓包,可能直接点查询不是这个包,forward一下就行
Ctrl+i发送到爆破模块进行如下配置
开始爆破,然后按长度length排序,发现一个成功
将unicode进行在线解码,得到账号密码
登录成功后获得flag
web28(爆破目录)
没啥思路,看看提示
很明确了,去burp爆破目录就行了。模式改成第四个,参数设置俩个
payloads这样设置
然后点击开始攻击,爆破的时候点击设置,只显示2xx的响应包
爆破完后会出现一个成功的包,响应包里有flag