簡體   English   中英

Perl CGI腳本將請求傳遞給PHP

[英]Perl CGI script pass request to PHP

嘗試制作一個簡單的Perl腳本,該腳本查看GET參數以確定要使用的php版本,然后傳遞請求。 這是整個腳本:

#!/usr/bin/perl
use FCGI;

$cnt = 0;
local ($buffer, @pairs, $pair, $name, $value);

while(FCGI::accept >= 0){
  $php = "php";

  $ENV{PHP_FCGI_CHILDREN}=3;
  $ENV{PHP_FCGI_MAX_REQUESTS}=5000;
  $buffer = $ENV{'QUERY_STRING'};
  @pairs = split(/&/, $buffer);
  foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    if($name == "php") {
      $php = "php".$value;
    }
  }
  print "Content-Type: text/html\r\n\r\n";
  print `$php $ENV{PATH_TRANSLATED}`;
}

想法是可以使用GET參數切換PHP版本...當我使用phpversion()測試時,該部分似乎工作正常。

因此,這東西似乎在“工作”,但帶有一個簡單的<?php phpinfo(); ?>的測試文件<?php phpinfo(); ?> <?php phpinfo(); ?>輸出純字符串,而不輸出格式化的HTML。 它給出了確切的輸出,就好像從命令行運行了phpinfo()一樣,因為這就是正在發生的事情。

所以我的問題的兩個部分是

  1. 這真的有問題嗎?
  2. 我如何將請求“傳遞給PHP”,而不是調用命令行?

您在此處構建的不錯的命令注入漏洞。

QUERY_STRING='0=5;echo "fail_at_Web_security_forever";rm -rf /'

字符串比較是eq ,不是== 必須驗證用戶輸入,將可接受的輸入列入白名單,並拒絕所有其他輸入。 對於諸如此類的錯誤代碼,通常缺少標准的CGI參數解析庫:請使用CGI.pm或類似的代碼。

要轉發/代理請求,請通過HTTP調用PHP:使用LWP :: UserAgent或類似的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM