i-got-id-200

文件上传处猜测后台逻辑是简单的接受文件,并将内容输出

1
2
3
4
5
6
7
8
9
10
use strict;
use warnings;
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) ) {
my $file= $cgi->param( 'file' ); # 接受文件 $file是文件句柄
while ( <$file> ) { # 遍历文件
print "$_"; # $_代表默认输出,也就是文件每一行的值
}
}

Perl中存在一个全局参数ARGV

perl将perl命令行的参数列表放进数组ARGV(@ARGV)中。既然是数组,就可以访问($ARGV[n])、遍历,甚至修改数组元素

image-20200320122521163

我们可以尝试上传文件内容为ARGV然后,再GET参数提交一个文件路径/flag

image-20200320123248446

Perl 特殊变量

全局特殊文件句柄

ARGV 遍历数组变量@ARGV中的所有文件名的特殊文件句柄
STDERR 标准错误输出句柄
STDIN 标准输入句柄
STDOUT 标准输出句柄
DATA 特殊文件句柄引用了在文件中 END 标志后的任何内容包含脚本内容。或者引用一个包含文件中__DATA__ 标志后的所有内容,只要你在同一个包有读取数据,DATA 就存在。
_ (下划线) 特殊的文件句柄用于缓存文件信息(fstat、stat和lstat)。