利用解析漏洞与写文件漏洞getwebshell小记一篇

2012-12-21 15:07:02 25 3949
0x01 目标基本信息搜集,发现敏感文件

目标  xxx.com
手工测试了下没发现注入,上传之类的,网站也很简单
gpc也开着,所有就算有包含漏洞也没什么用了
google一下也没发现什么有用的东西,后台地址也没有

拿出pker  扫了下,发现有.bash_history文件和  /tmp目录 没发现别的有用的
/tmp打开发现居然是服务器的连接状态,发现22端口开着,不过连不上,也不知道是不是ssh端口
tcp        0      0 :::22                   :::*                    LISTEN      
tcp        0      0 :::9022                 :::*                    LISTEN   
0x02 从敏感文件发现网站备份,发现解析漏洞

仔细翻了翻.bash_history
就发现一处可能有用的

访问http://xxx.com/api/myfile.zip  文件还在

不过这个时候才注意到服务器是nginx的,而且还有解析漏洞,只要找到能传图片的地方基本就能搞定了

0x03 从网站备份包里寻找漏洞,毫无收获
myfile.zip文件


里面总共也没几个php文件,看来有悬
在源码里搜索了下fwrite一个都没


又搜索fopen,总共发现三处,有两处是写文件的
                $handle = fopen("/data/web/api/con/con2012-".$date.".csv","w+");
                fputcsv($handle,array("当日参与id","用户姓名","电话","参与类型","0:未处理,1:中奖或发券","操作时间"));
                foreach($DataArrays as $key=>$data){
                        $data["name"]=iconv('utf-8', 'gbk', $data["name"]);
                        //var_dump($data);
            fputcsv($handle,$data);
                }
                fclose($handle);
悲剧的是没找到调用的地方,我看到config.php还包含了别的目录下的文件,估计是别的目录下调用的

又在config\.svn\text-base下发现了key.pem.svn-base 和pub.pem.svn-base


不过连不上22端口,所以也没用

看到.svn
我又跑到web的其它一些目录下试了下/.svn/entries文件存不存在,忙活了半天也没啥收获

还是继续看看myfile能不能发现什么

在app/controller/admincontroller.php
找到了后台登陆地址,猜了下弱口令无果

继续往下看代码倒是发现一处上传的
        public function add_vido(){//在线视频
                $p = $this->getAllParams();
               
                if($_FILES['img']['name']!=''){
                        if($_FILES['img']['error'] > 0){
                        $this->echoAlert('上传文件失败,请联系客服');
                        }else{
                        $type = explode('/',$_FILES['img']['type']);
                        $_FILES['img']['name'] = time().".".$type['1'];
                                if(!move_uploaded_file($_FILES['img']['tmp_name'],$this->vido_img.$_FILES['img']['name'])){
                                        $this->echoAlert('文件上传失败,请联系客服');
                                }
                        }
悲剧了是验证了登陆状态
                if(!isset($_SESSION['admin_role'])){
                        //exit('非法操作');
                        $this->_redirect('/api/?c=admin');
                }

而且还没注入。。

最后在/logs/目录下看到些记录文件


0x04 柳暗花明,发现一处可写点

于是搜索了下  logs
找到了操作的地方
<?php
header("Content-type: text/html; charset=utf-8");
$postString=print_r($_POST,true);
foreach($_POST as &$p){
        $p=str_replace(',','',$p);
}
unset($p);

$html=date('Y-m-d H:i:s').'|'.$_SERVER['REMOTE_ADDR'].'|'.$postString."\r\n";
file_put_contents(dirname(__FILE__).'/logs/'.date('Y-m-d').'.txt',$html,FILE_APPEND);
$thtml=date('Y-m-d H:i:s').','.$_SERVER['REMOTE_ADDR'].','."姓名:".$_POST['name'].',职业:'.$_POST['profession'].',手机号:'.$_POST['mobile'].',年龄:'.$_POST['age']."\r\n";
file_put_contents(dirname(__FILE__).'/logs/'.date('Y-m-d').'.csv',$thtml,FILE_APPEND);
echo '您的信息已经被成功提交~!谢谢参与~!';
?>
file_put_contents(dirname(__FILE__).'/logs/'.date('Y-m-d').'.txt',$html,FILE_APPEND);
文件名是年月日.txt

内容:
$postString=print_r($_POST,true);
$html=date('Y-m-d H:i:s').'|'.$_SERVER['REMOTE_ADDR'].'|'.$postString."\r\n";
可控呵呵

自己随便post试下


没问题

0x05 成功getwebshell
phpinfo()看看


直接nginx解析漏洞


*********************************************************************************

中间省略了一些枯燥无味的过程,各位顶顶更健康

关于作者

zafe75篇文章1321篇回复

评论25次

要评论?请先  登录  或  注册