CTFshow web(php特性129-132)

                                                                web129


/*
# -*- 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" 在字符串中第一次出现的位置:


输出:9

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

CTFshow web(php特性129-132)_第1张图片
                                                                        web130


/*
# -*- 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


/*
# -*- 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:

CTFshow web(php特性129-132)_第2张图片

CTFshow web(php特性129-132)_第3张图片

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

                                                                        web132

CTFshow web(php特性129-132)_第4张图片

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

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

2.御剑扫描

CTFshow web(php特性129-132)_第5张图片

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


/*
# -*- 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: [email protected]
# @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

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

你可能感兴趣的:(php,开发语言,ctfshow,web安全)