ctfshow-web-爆破(25-28)
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');
}
?>
sset()函数
isset在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,因为传递任何其它参数都将造成解析错误。
hexdec()函数
把十六进制数转换为十进制数,dechex()函数是把十进制转换为十六进制。
wp
-
分析代码,先传参一个r,这里可以直接传0,得出随机数的负值
-
在kali中使用php_mt_seed工具,首先输入make后就可正常使用
-
再通过抓包找到php版本
-
用这个种子写一个php测试脚本
-
得到另一个值后在bp中改包添加Cookie值
然后用bp抓包修改数据即可
web26
和web21一样,直接爆破密码即可