zoukankan      html  css  js  c++  java
  • 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执行一定的命令。

  • 相关阅读:
    冒泡排序(js版)
    闭包
    继承 (js原型链)
    DBUtility SqlHelp
    ERP 分录大全(轉六朝古都)
    ebs 11i 订单相关表结构学习及销售到出仓所经历的表
    采购管理系统基本概念
    Oracle Purchase Order Types
    PO主要SQL
    学习hashtable
  • 原文地址:https://www.cnblogs.com/-chenxs/p/11953933.html
Copyright © 2011-2022 走看看