Php168 v 4.0 sp global.php 写入漏洞

PS:转自大蝉的BLOG,原创作品,值得研究!

昨晚无事,看到一个感兴趣的网站,职业病又犯了,随便转转,发现是一个叫PHP168的整站,没见过,于是去官方网站下了份代码来读,看到困的要死的时候,发现了点什么.

在global.php中有这样的代码:
function login_logs($username,$password){
      global $timestamp,$onlineip;
      $logdb[]="$username/t$password/t$timestamp/t$onlineip";
      @include(PHP168_PATH."cache/adminlogin_logs.php");
      $writefile="              if($jj>200){
                    break;
             }
      }
      write_file(PHP168_PATH."cache/adminlogin_logs.php",$writefile);
}

当登陆admin界面时,每次登陆的username都记录在cache/adminlogin_logs.php中,但是却没有对$username变量进行过滤,导致攻击者可以构造恶意$username变量,最终向cache/adminlogin_logs.php写入木马程序.
哈哈,这就是我要找的了,我开始考虑构造的问题,由于前面有 结束掉前面的脚本标记,可是问题又来了

$logdb[]="$username/t$password/t$timestamp/t$onlineip";

在$username之前有个极其讨厌的”号,必须要再写入一个”来关闭它,可是默认设置下写入”或者’会在前面加上/,从而变成/”,双引号也就没用了.
这个问题困扰了我5个小时,凌晨4点钟,困的实在是受不了了,准备放弃了,谁知峰回路转,上帝在我失败的前一秒钟眷顾了我,我突然发现程序过滤/和$,也就是说,第一次写入”,自动加上了/,但是再次写入的时候,/就被去掉了
哈哈哈,大功告成,去官方网站测试了一下,轻松拿到shell
入侵到此结束. 

你可能感兴趣的:(PHP,function,shell,脚本,include,login)