2019-11-13:任意代码执行,基础学习, 笔记

session文件的位置linux一般在/tmp/或在/var/lib/php5/ 等位置,windows下如果使用phpstudy,phpstudy\PHPTutorial\tmp\tmp下,新版本的在phpstudy_pro\Extensions\tmp\tmp

phpmyadmin任意文件包含漏洞,cve-2014-8959
漏洞范围 4.0.1-4.0.10.6 4.1.1-4.1.14.7 4.2.1-4.2.12
http://127.0.0.1/phpmyadmin4/gis_data_editor.php?token=002b368c387963db9fbd71e3ef38310b&gis_data[gis_type]=/../../../2.jpg%00,token值为登录之后自己获得的,gis_data[gis_type]=../../../2.jpg为已经上传成功的图片马,../目录为跳转到根目录

文件包含漏洞防御
1,修改Php的配置文件将open_basedir的值设置为可以包含的特定目录,后面要加/,例如 open_basedir=/var/www/html
2,关闭allow_url_fopen和allow_url_include可以防止远程文件包含
3,对可以包含的文件进行限制,可以使用白明单的方式,或者设置可以包含的目录,如open_basedir
4,进行严格的检查,参数值不允许出现../之类的目录跳转符号

命令执行漏洞是,日常的网络访问中,我们常常可以看到某些Web网站具有执行系统命令的功能,比如:有些网站提供ping功能,我们可以输入一个IP地址,它就会帮我们去尝试ping目标的IP地址,而我们则可以看到执行结果。但是如果用户没有遵循网站的本意,而去输入精心构造的指令,可能会对网站本身的功能逻辑产生逆转,导致让目标网站执行恶意命令。

命令执行漏洞的分类
web代码层命令执行,exec("whoami");
第三方组件命令执行漏洞,WordPress中用来处理图片的ImageMagick组件 ,JAVA中的命令注入漏洞(struts2/ElasticsearchGroovy等) ,vBulletin 5.x 版本通杀远程代码执行
系统层面命令执行漏洞,MS08-067,bash破壳漏洞

命令注入漏洞产生原因有两点,用户可以控制输入的内容,用户输入的内容被当作命令执行

常用执行命令函数
``反撇号输出并返回shell结果。
system()输出并返回最后一行shell结果。
passthru()​ 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。 相同点:都可以获得命令执行的状态码
shell_exec()通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回
exec()不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
popen()
proc_open()
pcntl_exec()

命令执行权限,命令注入漏洞的危害跟web中间件运行的权限有关。由于web应用运行在web中间件上,所以web应用会“继承”web中间件的运行权限。如果存在命令注入漏洞的web应用运行在以系统管理员身份运行的web中间件上,那么通过web执行命令就相当于以管理员权限执行命令。

windows下多条命令执行语法格式
命令1 & 命令2, 先执行命令1后执行命令2,无论命令1执行是否成功
命令1 && 命令2 ,先执行命令1,只有命令1执行成功了,再执行命令2
命令1 || 命令2 ,先执行命令1只有命令1失败了,再执行命令2
命令1 | 命令2 ,|管道符,将命令1执行的结果传递给命令2,命令1如果有错误,命令2一样可以执行

linix下多条命令执行语法格式
命令1 ; 命令2 ,先执行命令1,再执行命令2,无论命令1执行是否成功
命令1 && 命令2 ,先执行命令1,在执行命令2,至于命令1执行成功时候,才执行命令2
命令1||命令2,先执行命令1,在执行命令2,只有命令1执行失败时候才执行命令2
命令1 | 命令2,|是管道,将命令1的执行结果,传输给命令2

代码执行
当应用调用一些能将字符转化成代码的函数时候,如eval(php 7之后没有eval了),没有考虑用户是否能控制这个字符串,将造成代码注入漏洞

扫描二维码关注公众号,回复: 7843568 查看本文章

$data=$_GET['data'];
eval("\$ret=$data;"); 可直接执行函数
eval("\$ret=strtolower('$data');"); 可以采用闭合的方式绕过执行eval("\$ret=strtolower('1') ;phpinfo() ;//');");
eval("\$ret=strtolower("$data");"); 可以采用闭合的方式绕过执行eval("\$ret=strtolower("1") ;phpinfo() ;//');");
urly Syntax 漏洞利用,eval("\$ret=strtolower(\"$data\");"); 可以采用${}方式绕过,${phpinfo()},eval("\$ret=strtolower(\"${phpinfo()}");");

猜你喜欢

转载自www.cnblogs.com/sym945/p/11851117.html