安全矩阵

 找回密码
 立即注册
搜索
查看: 2345|回复: 0

PHP大马基础组件开发——目录遍历组件

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-8-23 11:06:56 | 显示全部楼层 |阅读模式
原文链接:PHP大马基础组件开发——目录遍历组件

前言:PHP大马入门知识
php大马,可以通俗理解为由php编写而成的大型木马程序,一般是用来对站点进行全面管理,以便后续渗透操作而用,因为带有提权和站点修改功能,所以也算是木马的一种,是用来控制WEB站点的一种利器。
php大马一般包含以下几个基础功能组件,文件的写入,文件删除,目录浏览,命令执行,文件上传和服务器基本环境信息获取这几个基础功能。
0x01 PHP目录操作
1.新建目录:mkdir(具体路径);
例子:在C盘目录下创建一个www目录
  1. <?php
  2. $dir='C:\www';
  3. mkdir($dir);
  4. ?>
复制代码


2.删除目录:rmdir(具体路径);
例子:删除在C盘下的www目录
  1. <?php
  2. $dir='C:\www';
  3. rmdir($dir);
  4. ?>
复制代码


3.打开目录:opendir(具体路径);
例子:打开C盘下的www目录
  1. <?php
  2. $dir='C:\www';
  3. $open=opendir($dir);
  4. echo $open;
  5. ?>
复制代码


其它更多功能也大同小异,可以以此类推
0x02 目录遍历函数编写
在PHP大马功能组件中,函数部分往往是最关键的主题部分,而这又取决于逻辑的成败与否,一般来说我们进行目录遍历时,都会遇到以下几种情况:
1.可以直接读取目录下的文件
2.目录下还有目录要读取
3.目录或文件没有权限访问
因此我们的基本逻辑是这样的:
先定义一个函数,然后打开这个需要遍历的目录,再用循环语句去读取里面的一层层目录,再判断读取的内容是文件还是目录,如果是文件则直接输出文件名,如果是目录则再次进行读取,周而复始
循环部分代码:
  1. $dir = opendir($dirfile);
  2.         while (($file = readdir($dir)) !== false) {
  3.             if (is_dir("$dirfile{$file}") && ($file != ".") && ($file != "..")) {
  4.                 if (is_readable("$dirfile{$file}")) {
  5.                     echo "dir $dirfile{$file} </br>";
  6.                     tree("$dirfile{$file}");
  7.                 } else {
  8.                     echo "dir $dirfile{$file} can't be visited</br>";
  9.                 }

  10.             } else {
  11.                 if (($file != ".") && ($file != "..")) {
  12.                     echo "file $dirfile/{$file} </br>";
  13.                 }

  14.             }
  15.         }
复制代码


函数主体代码:
  1. function tree($dirfile)
  2.     {
  3.         $dir = opendir($dirfile);
  4.         while (($file = readdir($dir)) !== false) {
  5.             if (is_dir("$dirfile{$file}") && ($file != ".") && ($file != "..")) {
  6.                 if (is_readable("$dirfile{$file}")) {
  7.                     echo "dir $dirfile{$file} </br>";
  8.                     tree("$dirfile{$file}");
  9.                 } else {
  10.                     echo "dir $dirfile{$file} can't be visited</br>";
  11.                 }

  12.             } else {
  13.                 if (($file != ".") && ($file != "..")) {
  14.                     echo "file $dirfile/{$file} </br>";
  15.                 }

  16.             }
  17.         }
  18.         //closedir($dir);
  19.     }

  20.     tree($dirfile);
复制代码


0x03 前后端交互部分编写
前端部分:
前端部分功能很简单,只要完成一个form表单能让用户提交即可,但由于目录很可能是中文的,因此还要弄一个UTF-8的编码才行
完整前端代码:
  1. <html>
  2. <meta charset="UTF-8">


  3. <body>

  4. <form method="post">
  5.     <p>You can enter the dir you want to see here </p>
  6.     <p>Or you can enter the file which you want to read(in a absolute dictionary)</p>
  7.     <input type="text" name='o'>
  8.     <input type="submit" name='submit'>
  9. </form>

  10. </body>

  11. </html>
复制代码


后端部分:
后端部分只要接受前端部分返回的数据并且进行变量的定义与赋值,最后再由传参的形式传输函数中运行即可
完整代码:
  1. $dirfile = $_POST['o'];
  2. if($dirfile!='') {
  3.     if (isset($_POST['o'])) {
  4.         if ($dirfile != '') {
  5.             echo "Your aim dir is $dirfile </br>";
  6.         }
  7.     }
复制代码

0x04 完整代码与效果1.完整组件代码
  1. <?php
  2. error_reporting(0);
  3. echo "Directory traversal";
  4. //递归遍历目录
  5. $dirfile = $_POST['o'];
  6. if($dirfile!='') {
  7.     if (isset($_POST['o'])) {
  8.         if ($dirfile != '') {
  9.             echo "Your aim dir is $dirfile </br>";
  10.         }
  11.     }

  12.     function tree($dirfile)
  13. {
  14.         $dir = opendir($dirfile);
  15.         while (($file = readdir($dir)) !== false) {
  16.             if (is_dir("$dirfile{$file}") && ($file != ".") && ($file != "..")) {
  17.                 if (is_readable("$dirfile{$file}")) {
  18.                     echo "dir $dirfile{$file} </br>";
  19.                     tree("$dirfile{$file}");
  20.                 } else {
  21.                     echo "dir $dirfile{$file} can't be visited</br>";
  22.                 }

  23.             } else {
  24.                 if (($file != ".") && ($file != "..")) {
  25.                     echo "file $dirfile/{$file} </br>";
  26.                 }

  27.             }
  28.         }
  29.         //closedir($dir);
  30.     }

  31.     tree($dirfile);

  32. }
  33. ?>
  34. <html>
  35. <meta charset="UTF-8">


  36. <body>

  37. <form method="post">
  38.     <p>You can enter the dir you want to see here </p>
  39.     <p>Or you can enter the file which you want to read(in a absolute dictionary)</p>
  40.     <input type="text" name='o'>
  41.     <input type="submit" name='submit'>
  42. </form>

  43. </body>

  44. </html>
复制代码
2.运行效果
访问页面:

输入C:
遍历C盘下的一些目录


功能可以完全实现
后续我们将依次讲解命令执行,文件删除,文件上传,文件写入等功能组件的编写


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 17:24 , Processed in 0.012759 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表