命令执行介绍:
- 产生命令执行漏洞的原理:1. 用户输入未过滤或净化的参数。2. 拼接到系统命令中执行。
- 命令执行漏洞原理:web应用程序接收用户输入,并拼接到要执行系统命令中执行。
远程命令执行漏洞:
如果目标站点在设计时期过滤功能不严格或数据与代码区分不明显,极易导致命令执行漏洞的存 在。以Web木马中的一句话木马为例,在常见的PHP小马 <?php @eval($post['x']);?>中,就以 eval 的方式将 POST 传过来的参数,以PHP的方式加以执行。其中 X 参数由外部传入,也就是成为攻击者可以空的参数,从而形成远程命令执行的漏洞。
系统函数远程命令执行
- 在PHP下允许远程命令执行的函数有 eval()、assert()、perg_replace()、 call_user_func() 。如果在页面中存在上述函数且参数可被用户控制,同时没有对参数做有效的过 滤,那么就可能存在远程命令执行漏洞。
1. eval()与assert()函数的区别
- eval()与assert()函数在执行效果上基本相同,均可动态执行代码,且接收的参数为字符串。 assert()函数虽然也会执行参数内的代码,但主要用来判断一个表达式是否成立,并返回 True 或 false 。
实战中,eval()函数通常会被系统禁用,因此在一句话木马中通常利用 assert() 来实现 代码执行。但需要注意的是: eval 参数必须是合法的PHP代码,必须以分号结尾,否则会报错。如:
eval("phpinfo() "); #不可执行
assert("phpinfo() "); #可执行
- eval()函数正确执行的方式该是 eval("phpinfo();"); ,即符合PHP的代码规范,须在 phpinfo() 后面添加 ; ,否则会报错。而 assert() 函数则不存在此问题,也就是他针对PHP语法规范要求并不明显。
- 在这个过程中,就是利用了PHP的系统命令执行函数来调用系统命令并执行。这类的函数有 system()、exec()、shell_exec()、passthru()、pcntl_exec()、open()、proc_open() 等此外华 友反引号命令执行,这种方式实际上是调用 shell_exec() 函数来执行。
Windows和Linux环境下原理的区别
windows 下:
|
直接执行后面的语句||
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句&
前面和后面命令都要执行,无论前面真假&&
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
Linux 下:
;
前面和后面命令都要执行,无论前面真假&
前面和后面命令都要执行,无论前面真假|
直接执行后面的语句||
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句&&
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令