PHP代码审计之命令注入
命令注入
命令注入就是通过利用无验证变量构造特殊语句对服务器进行渗透.
注入的种类有很多,而不仅仅是SQL Injection. php常见注入有以下几种(常见:,常见!!):
- 命令注入 (Command Injection)
- Eval注入(Eval Injection)
- 客户端脚本攻击(Script Injection)
- 跨网站脚本攻击(Cross Site Scripting,XSS)
- SQL注入攻击(SQL Injection)
- 动态函数注入攻击(Dynamic Variable Evaluation)
- 序列化注入 & 对象注入
php中一般用5个函数来执行外部的应用程序或函数(当然,能实现这样功能的手段不只是这5个函数)
system() , exec() , passthru(), shell_exec(),
关键字发现
我们拿到一套web源码的时候,有的时候没必要通读的情况下,我们可以结合编辑器特性对关键字进行全局搜素,以便我们快速的定位那些代码使用了我们指定的函数.
对搜素到的代码双击即可进入指定的代码段,我们可以结合代码段的上下文来分析具体逻辑.
我们可以看到. 代码中并没有对$target进行过滤.直接接收POST数据然后拼接到了代码里.
由此我们基本可以确定是存在注入漏洞的.进行手动验证..
通过验证得知. 注入漏洞确实存在.接下来我们就需要做相应的修复.
注入修复
通过发现漏洞过程,得知造成此问题是因为参数过滤不严导致的,那我们如果能对提交的参数做很好的验证过滤,保证我们提交的数据时ip类型或者域名类型是不是就可以解决了?
这里以正则匹配过滤的模式来对参数进行校验.如果参数合法.则执行ping操作. 否则抛出异常信息 IP is error
修复完手工验证. 发现漏洞已修复.