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: [email protected]
# @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
error_reporting(0);
$str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
echo strlen($str);
for ($i = 0;$i < 62;$i++){
for ($j = 0;$j < 62;$j++){
$flag = $str[$i].$str[$j];
$token = md5($flag);
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;
}
}
}
}
?>
python脚本
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
# md5 = hashlib.md5(dic).hexdigest()
for a in dic:
for b in dic:
t = str(a)+str(b)
t = t.encode(encoding='utf-8')
md5 = hashlib.md5(t).hexdigest()
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])
这里两个答案ZE和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');
}
这里考察的是伪随机数
知识点:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,每次生成的随机数 是一样的
编写php脚本
<?php
mt_srand(372619038);
echo mt_rand();
?>
运行得到1155388967
通过get传参得到flag
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');
}
参考文章
php伪随机数漏洞
种子破解程序下载地址
看程序可以知道我们传入的参数减去生成的mt_rand()要等于0才能进入下一个判断,所以我们必须要爆破出mt_rand().
WEB26
burp抓包爆破密码。
web27
这里下载下来有一个文件,然后发现这有个身份证但是少了8位,这里我们可以爆破出来。
得到身份证621022199002015237.
然后在这个网站https://www.bt.cn/tools/unicode.html转义,登入。
web28
看到了2.txt就想到改数字,改了以后url就一直在变化加一些0101,访问不进去,所以选择burp来爆破目录,暴力破解目录/0-100/0-100/看返回数据包
如果不去掉2.txt还是没有回显的,所以爆破的时候记得去掉2.txt,这里我测试了一下burp发现就算爆破出来,但是这个数字很难找,所以我们直接用python脚本。
import requests
for i in range(0,100):
for j in range(0,100):
payload = f"http://063829fe-41fe-4d08-9fd5-1f023a475b75.challenge.ctf.show:8080/72/20/"
result = requests.get(payload)
if "ctfshow" in result.text:
print(result.text)
exit()
flag立马就出来了。