blubiu

My Love

上网不网恋,简直浪费电.


2017强网杯线下AWD进攻&防御


2017强网杯线下总结(高校组)


题记

参加这次比赛颇有收获,学到很多,也认识了很多dalao

虽然被吊打,但是感觉很开心


目录:


进攻篇

images


这次线下攻防用的是一个Finecms ,版本是5.0.9

比赛的时候对这个cms并不了解

现在复现一下,

从哪里跌倒,就从哪里爬起来。

朋友给我看了自己审计的一片文章

http://www.cnblogs.com/post/readauth?url=/test404/p/7351144.html

其实百度也很多,

5.0.9这个版本存在头像上传getshell漏洞

比赛的源码是修改了的,先来看看

    /**
     *  上传头像处理
     *  传入头像压缩包,解压到指定文件夹后删除非图片文件
     */
    public function upload() {

        // 创建图片存储文件夹
        $dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';
        @dr_dir_delete($dir);
        !is_dir($dir) && dr_mkdirs($dir);

        if ($_POST['tx']) {
            $file = str_replace(' ', '+', $_POST['tx']);
            if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){
                $bad_ext=array('php','php3','php4','php5');
                if(in_array($result[2],$bad_ext)){
		   exit('hack');
		}
                $new_file = $dir.'0x0.'.$result[2];
                
		if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {
                    exit(dr_json(0, '目录权限不足或磁盘已满'));
                } else {
                    $this->load->library('image_lib');
                    $config['create_thumb'] = TRUE;
                    $config['thumb_marker'] = '';
                    $config['maintain_ratio'] = FALSE;
                    $config['source_image'] = $new_file;
                    foreach (array(30, 45, 90, 180) as $a) {
                        $config['width'] = $config['height'] = $a;
                        $config['new_image'] = $dir.$a.'x'.$a.'.'.$result[2];
                        $this->image_lib->initialize($config);
                        if (!$this->image_lib->resize()) {
                            exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));
                            break;
                        }
                    }
                    list($width, $height, $type, $attr) = getimagesize($dir.'45x45.'.$result[2]);
                    !$type && exit(dr_json(0, '图片字符串不规范'));
                }
            } else {

                exit(dr_json(0, '图片字符串不规范'));
            }
        } else {
            exit(dr_json(0, '图片不存在'));
        }

// 上传图片到服务器
        if (defined('UCSSO_API')) {
            $rt = ucsso_avatar($this->uid, file_get_contents($dir.'90x90.jpg'));
            !$rt['code'] && $this->_json(0, fc_lang('通信失败:%s', $rt['msg']));
        }


        exit('1');
    }

}

可以看到这一段代码

$bad_ext=array('php','php3','php4','php5');

这里把基本把php后缀的文件都给屏蔽了

但是忘了我们还有phtml

说明:

PHTML(有时叫做PHP)网页是一种包含PHP(一种和JavaScript或Microsoft VBScript类似的语言)
脚本的网页和ASP一样,PHP脚本镶嵌在网页的HTML代码之中。

其实比赛中应该要想到了,之前CTF就有遇到过,我想我可能被打懵了吧。。。

这里先上传一个jpg的一句话

PS: 因为直接上传的话phtml可能不行,他会判断是不是图片.

images


然后再点击保存抓包

images


然后将这里jpeg改成phtml

images

images


然后Forward ,他会报错

images


但是我们看源码,并没有这一句英文的错误

images


到目录上看看,果然上传上去了

images


然后菜刀连接直接可以在根目录上看到flag了

这里就不演示了


防御篇

1. 修改代码

$bad_ext=array('php','php3','php4','php5');

可以看到这段代码,没过滤phtml,这里可以添加上去,

也可以添加其他后缀的文件,免得dalao们各种奇淫技巧突破

比赛后还听到有dalao说上传asp的增加权限

这里我就不清楚了,不过也可以添加上去过滤掉


2. 改admin密码

images


admin密码其实可以在数据库中找到

比赛中我是直接弱口令admin上去的

然后手速要快,修改之后别人就无法用你账号进入后台了


3. 修改注册代码

images


这里是注册的代码

你可以修改成不管怎么输入最后都注册不了,

改完admin密码,改完注册代码后基本上可以防御绝大多数进攻了

这样可以不用删除这个注册页面,删除的话会判断down机


4. 挂waf

比赛后跟dalao交谈,说除了头像上传外还有一处命令执行漏洞,

这个时候就要用到waf了,

因为比赛中一般是user普通用户,没有权限重启服务

所以只能采用包含waf脚本了

可以直接包含在index里面,注意waf所在目录

images


你可以添加过滤各种函数,符号,base64编码等等

这样可以有效抵御一般的命令执行了(dalao路过)

当然,如果会修改那个漏洞更好。


后续

比赛不是唯一,能学到东西就好。

能交到很多朋友,我很高兴。

每经历一次比赛就成长一次,

多总结,提升自己。

最后,最后,

感谢团队的支持,

感谢支持我的朋友,

感谢各位dalao帮我解答问题。