命令执行及代码执行漏洞

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

命令执行及代码执行漏洞

junlebao   2021-01-19 我要评论

一、命令执行漏洞

应用有时需要调用一些执行系统命令的函数,当服务器没有经过严格过滤用户的参数,这时候就可能导致命令执行,从而导致命令执行漏洞

漏洞成因

1.代码过滤不严格

2.系统的漏洞造成命令执行

3.调用的第三方组件存在代码执行漏洞

常用命令执行函数

system():  该函数会把执行结果输出。

passthru():  该函数只调用命令,并把运行结果原样地直接输出没有返回值

exec():  不输出结果,返回执行结果地最后一行

shell_exec():  不输出结果,返回执行结果

 

命令连接符

windows和Linux都支持地命令连接符:

cmd1 | cmd2 只执行cmd2

cmd1 || cmd2只有当cmd1执行失败后,cmd2才被执行

cmd1 & cmd2先执行cmd1,不管是否成功,都会执行cmd2

cmd1 && cmd2先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2

Linux还支持分号(;)cmd1;cdm2按顺序依次执行,先执行cmd1再执行cmd2

防范及修复

1. 尽量少使用执行命令地函数或者直接禁用

2.参数值尽量使用引号包括

3.再使用动态函数之前,确保使用地函数是指定地函数之一

4.再进行执行命令地函数|方法之前,对参数进行严格过滤,对敏感字符进行转义

二、代码执行漏洞

代码执行漏洞

由于服务器对危险函数过滤不严,导致用户输入地一些字符串可以被转换成代码来执行,从而导致代码执行漏洞

漏洞成因

用户能够控制函数输入

存在可执行代码地危险函数

常见地危险函数

eval()、assert()

这两个函数都可以将输入地字符串参数作为php程序代码来执行

eval()的参数必须是合法的php代码,所以必须以分号;结尾

assert(mixed $assertion [,string $description])如果assertion是字符串,它将会被assert()当作php代码来执行

 

 

 

 

还有一些危险函数

preg_replace()、str_replace()、call_user_func()这些函数跟eval、exec等函数地特性相同,都属于危险函数

preg_replace(mixed pattern,mixed replacement,mixed subject [,int limit]):此函数可以用来执行一个正则表达式的搜索和替换

$pattern:正则表达式匹配的内容

$replacement:用于替换的字符串或字符串数组

$subject:要搜索替换的目标字符串或字符串数组

当$pattern存在/e模式修正符,允许代码执行

 

 修复方案

1. 尽量不要执行外部的应用程序或命令

2.使用自定义函数或函数库来替代外部应用程序或命令的功能

3.执行函数的参数做成白名单限制,再代码或配置文件中限制某些参数

了解这些漏洞之后,我们开始去ctfhub上面去做一下rce的题目

0x11 eval执行

这段代码没有经过过滤,然后我们上面也有举例子,我们直接用get方式传入

phpinfo();

因为eval中的参数必须是php标准的语句的字符串,所以必须以分号结尾

最后构造payload:?cmd=system("cat ../../../flag_14453");

拿到ctfhub{bc1644e9e45ddb7e79f9da2d}

0x12文件包含

 

 下面的shell连接就是一个一句话木马,我们这简单需要个绕过就是strpos不能等于flag

我们直接就是利用文件包含构造payload:?file=shell.txt

然后我们post传入一个ctfhub=phpinfo();我们会发现执行了

然后我们就构造拿flag的payload:ctfhub=system("cat ../../../flag");

拿到ctfhub{3041141beefd6faba007a336}

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们