原理:
开发人员没有对特殊函数入口做过滤,导致用户可以控制函数参数进而上传木马并提交服务端执行,获取权限控制web。
常用危险函数
system、exec、shell_exec、passthru、popen、proc_popen
可通过php手册查询各个函数的具体使用方法
https://www.php.net/manual/zh/function.eval.php
Web服务器没有过滤危险函数导致命令执行漏洞攻击成功。
命令连接符:
如果程序没有进行过滤,那么我们可以通过连接符来执行多条命令。
C1 && C2 先执行C 1,执行成功后执行C2,否则不执行C2
C1 | C2 只执行C2
C1 & C2 先执行C1,不管是否成功,都会执行C2
DVWA靶场实战
1.首先将安全等级调至低等级,选中Commend Injection板块
我们可以看到要求我们输入ip查询,首先尝试可得正常
查看源码:
我们发现它并没有做任何过滤,直接ping我们输入进去的地址,因此我们通过构造语句利用漏洞
2.将安全系数调至中等级,我们首先查看源码
发现对含有&&以及;进行替换为空的过滤,这时候我们要发散自己的思维可以采用127.0.0.1&;&net user或者127.0.0.1&&&net user的方式重新构造语句绕过,因为单纯的对&&以及;进行替换为空的过滤,当识别到上述两个语句是将危险符号替换后并不影响我们代码的正常使用。
3.切换安全等级为高,查看源码
虽然对‘| ’进行了过滤,但是当我们在|后不加空格是,则直接绕过了