Author:CCc1
QQ:1027832304
Web23
题目:还爆破?这么多代码,告辞!
源码:
<?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__);
}
?>
分析:
subset:获取字符
intval:获取整数值
get传参token,并进行md5加密
判断 第2位 === 第15位 并且 第15位 === 第18位
判断 (第2位整数值+第15位整数值+第18位整数值)/第2位整数值===第32位整数值
脚本:
import hashlib
dic = '0123456789qwertyuiopasdfghjklzxcvbnm'
for a in dic:
for b in dic:
t = str(a) + str(b)
md5 = hashlib.md5(t.encode('utf-8')).hexdigest()
if md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18]:
print(t)
获得以下字符串:
1m
3j
k0
kv
ll
mw
尝试后,满足条件的是3j
payload:?token=3j
Web24
题目:爆个锤子
源码:
<?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(372619038)生成一个随机数
如果给r的参数等于随机生成的随机数则,获得flag
注:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的
因为有了伪随机数,所以知道随机数,然后传给r,就可以获得flag
获得随机数1155388967
payload:?r=1155388967
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');
}
分析:
hexdec:将16进制转换成10进制
$rand = intval($r)-intval(mt_rand());
通过上面这句,可以通过传入r获得第一个随机数,然后使用php_mt_seed进行逆推,获得种子
如果rand存在的,则输出rand,可以将r传入0,使之为负
获得第一个种子802091803
进行逆推
通过网站的响应头发现php的版本为7.3.11
则符合只剩下两个
经测试是第二个
通过代码:
if($_COOKIE['token']==(mt_rand()+mt_rand()))
可知需要将两个随机数相加获得cookie
通过代码:
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
可知rand不存在的时候才可以继续往下执行
而802091803是我们r=0时输出的随机数
使r=802091803,就可让rand=0让其不存在继续执行下面代码
然后使用burp进行修改cooke即可获得flag
Web26
没成功....
Web27
题目:CTFshow菜鸡学院招生啦!
登录需要学号和密码
下面有录取名单和学生学籍信息查询系统
录取名单为:
学生学籍信息查询系统为:
学生学籍信息查询系统查询需要姓名和身份证号
录取名单则有姓名和身份证号,但是身份证号中的出生年月是没有的
这样可以进行爆破
进行抓包,设置爆破点
设置成dates yyyyMMdd
进行爆破
19901004则出现不一样,进行Unicode解码
得到学号和密码
用户名为学号:10043419
密码为身份证号:451023199010043419
登录获得flag
Web28
没成功
wp是爆破前两个目录.....
评论 (4)