存在文件上传页面,点击提交按钮会回显文件内容。
注意到题目都是用perl编写的网页文件(.pl) 。
if ($cgi->upload('file')) { my $file = $cgi->param('file'); while (<$file>) { print "$_"; print "<br />"; } }
param()函数会返回一个列表的文件。但是只有第一个文件会被放入到下面的file变量中。而对于下面的读文件逻辑来说,如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。这样,我们的利用方法就出现了:在正常的上传文件前面加上一个文件上传项ARGV,然后在URL中传入文件路径参数,这样就可以读取任意文件了。
具体参考了这个:戳我
bp进行抓包,将上传的文件类型及文件内容处复制再粘贴一行,将filename去掉,然后内容填入ARGV。大概这样:
然后在地址栏最后写上要读取的文件(/flag)即可。
将LFI转为RCE: