xctf-i-got-id-200(perl網頁文件+ARGV上傳造成任意文件讀取)


打開url發現有三個鏈接,點進去都是.pl文件,且只有files可以上傳文件。

.pl文件都是用perl編寫的網頁文件

 

 這里上傳了又將文件的內容全部打印出來,那么猜想后台應該用了param()函數。

param()函數會返回一個列表的文件但是只有第一個文件會被放入到下面的接收變量中。如果我們傳入一個ARGV的文件,那么Perl會將傳入的參數作為文件名讀出來。對正常的上傳文件進行修改,可以達到讀取任意文件的目的:

這里附上網上大佬們猜測的后台代碼:

use strict;
use warnings; 
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) ) { 
    my $file= $cgi->param( 'file' );
     while ( <$file> ) { print "$_"; }
} 

bp進行抓包,將上傳的文件類型及文件內容處復制再粘貼一行,將filename去掉,然后內容填入ARGV

然后盲猜flag文件,讀取試試

 

 或者直接先讀取file.pl文件,盲猜在/var/www/cgi-bin/file.pl或者/var/www/cgi-bin/file.pl兩個拿去試

 

 發現確實使用了param()函數,然后我們利用bash來進行讀取當前目錄下的文件

payload為:

/cgi-bin/file.pl?/bin/bash%20-c%20ls${IFS}/| 

%20為空格,可換成+號

 

 列出了當前目錄下的內容,發現flag,直接讀取

 

總結:perl文件遇到上傳可配合ARGV文件使用造成任意文件讀取,然后任意文件讀取可利用bash執行一定的命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM