命令注入基础

本文详细介绍了命令执行漏洞的产生原理,特别关注了PHP中的eval()和assert()函数,以及它们在不同环境下的执行行为。强调了用户输入过滤和代码安全的重要性。
摘要由CSDN通过智能技术生成

        命令执行介绍:

  •         产生命令执行漏洞的原理: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 下:

  • ; 前面和后面命令都要执行,无论前面真假
  • & 前面和后面命令都要执行,无论前面真假
  • | 直接执行后面的语句
  • || 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
  • && 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值