欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

深度研究1款结构简捷的Github数据泄漏爬虫

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

0×01.媒介
Github作为一个代码托管平台,有着海量的开源代码和很多开发者。在代码上传时,有些开发者短缺网安认识,会在不经意间泄漏自己的暗码或者密钥。本文以这里为切入点,先容一个检索代码信息的小爬虫和在写爬虫时的一些奇技淫巧。
0×02.github信息泄漏
正如媒介所述,短缺网安认识的开发者会形成这个成绩。不止web门路下的.git目次会泄漏信息,在托管的开源代码中也会发生信息泄漏。例子很多,好比php衔接数据库的配置文件泄漏,那末能够数据库帐号暗码都泄漏了,任何人都能够拜访这个数据库。再好比通向内网的帐号暗码,管理员帐号暗码乃至ssh密钥。
api,即应用程序编程接口。家喻户晓,http是无状况协定,为了将用户辨别开引进了cookie机制。有很多厂商,供给了api这个接供词用户调取营业,为了辨别用户引进了token,好比'https://example.com/get?info=xxx&token=xxx'
而我比拟爱好做的事便是,在github上找api的密钥。因为比拟与帐号暗码,这个不只泄漏的更多,而且也更难以留意觉察,而且咱们挪用便利。好比查问whois信息,子域名检测等等,很多网安厂商供给了api接口,以是假如你没有密钥,无妨尝尝这个github信息泄漏的办法。
shodan能够很多网安从业者都晓得,这是一个很强大的搜刮引擎。下文我会以爬取github上的shodan api密钥为例子,写一个简略的小爬虫。
0×03.github搜刮成果爬取
1.shodan api格局
起首拜访https://developer.shodan.io/api,这是shodan的api文档,咱们能够看到api哀求格局为https://api.shodan.io/shodan/host/{ip}?key={YOUR_API_KEY}。以后咱们就能够在github上搜刮”https://api.shodan.io/shodan/host/ key=”来看看。
成果如图:

能够看到曾经有人不小心泄漏自己的密钥了,固然另有很多人没有。
2.github信息网络
固然github有供给api,然则对代码检索功效有限制,以是咱们这里不应用api。
起首停止搜刮咱们必要有一个登录状况,人人能够注册一个小号,或者是应用大号,这个不要紧的。
登录状况咱们能够应用cookies,也能够间接登录,咱们这里说间接登录。
起首F12抓包能够看到全部登录流程,即拜访github.com/login,以后将表单的值传递给github.com/session。全部流程异常清楚。
代码以下:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Referer': 'https://github.com/',
'Host': 'github.com',
'Upgrade-Insecure-Requests': '1',
}
payload = {'commit': 'Sign in', 'login': 'xxxxxx@xxxx.xxx',  'password': 'xxxxxx'}
r = requests.get("https://github.com/login", headers=headers)
_cookies = r.cookies
r = requests.post("https://github.com/session", headers=headers, data=payload,  cookies=_cookies)
如上可不能够呢?细心阐发全部流程,实际上,表单值中另有一个authenticity_token,咱们要先抓取到这个值,而后传递给表单。
抓取函数以下:
from lxml import etree
def get_token(text):
#
    html = etree.HTML(text)
    t = html.xpath("//input[@name='authenticity_token']")
    try:
        token = t[0].get('value')
    except IndexError:
        print("[+] Error: can't get login token, exit...")
        os.exit()
    except Exception as e:
        print(e)
        os.exit()
    #print(token)
    return token
payload['authenticity_token'] = get_token(r.content)
如今咱们代码另有甚么毛病呢,我感到便是对cookies的处置不敷优雅。requests有一个奇异的类requests.session(),能够为每次哀求保留cookies,并应用于下次哀求。
在民间文档咱们能够找到http://www.python-requests.org/en/master/user/advanced/#session-objects。

以是这里咱们能够应用requests.session对代码停止优化,即:
import requests
session = requests.Session()
r = session.get("https://github.com/login", headers=headers)
payload['authenticity_token'] = get_token(r.content)
r = session.post("https://github.com/session", headers=headers, data=payload)
得到登录状况后,咱们就能够停止搜刮,以后列举出信息。
这里采纳lxml停止信息提取,xpath很简略,不多说,代码以下:
from lxml import etree
words = "https://api.shodan.io/shodan/host/ key="
url = ("https://github.com/search?p=1&q=%s&type=Code" % words)
r = session.get(url, headers=headers)
html = etree.HTML(r.text)
block = html.xpath("//div[@class='code-list-item col-12 py-4 code-list-item-public ']")
print("[+] Info: get item: %i" % len(block))
codes = html.xpath("//div[@class='code-list-item col-12 py-4 code-list-item-public ']/div[@class='file-box blob-wrapper']/table[@class='highlight']/tr/td[@class='blob-code blob-code-inner']")

[1] [2] [3] [4]  下一页

0×01.媒介
Github作为一个代码托管平台,有着海量的开源代码和很多开发者。在代码上传时,有些开发者短缺网安认识,会在不经意间泄漏自己的暗码或者密钥。本文以这里为切入点,先容一个检索代码信息的小爬虫和在写爬虫时的一些奇技淫巧。
0×02.github信息泄漏
正如媒介所述,短缺网安认识的开发者会形成这个成绩。不止web门路下的.git目次会泄漏信息,在托管的开源代码中也会发生信息泄漏。例子很多,好比php衔接数据库的配置文件泄漏,那末能够数据库帐号暗码都泄漏了,任何人都能够拜访这个数据库。再好比通向内网的帐号暗码,管理员帐号暗码乃至ssh密钥。
api,即应用程序编程接口。家喻户晓,http是无状况协定,为了将用户辨别开引进了cookie机制。有很多厂商,供给了api这个接供词用户调取营业,为了辨别用户引进了token,好比'https://example.com/get?info=xxx&token=xxx'
而我比拟爱好做的事便是,在github上找api的密钥。因为比拟与帐号暗码,这个不只泄漏的更多,而且也更难以留意觉察,而且咱们挪用便利。好比查问whois信息,子域名检测等等,很多网安厂商供给了api接口,以是假如你没有密钥,无妨尝尝这个github信息泄漏的办法。 内容来自无奈安全网
shodan能够很多网安从业者都晓得,这是一个很强大的搜刮引擎。下文我会以爬取github上的shodan api密钥为例子,写一个简略的小爬虫。
0×03.github搜刮成果爬取
1.shodan api格局
起首拜访https://developer.shodan.io/api,这是shodan的api文档,咱们能够看到api哀求格局为https://api.shodan.io/shodan/host/{ip}?key={YOUR_API_KEY}。以后咱们就能够在github上搜刮”https://api.shodan.io/shodan/host/ key=”来看看。
成果如图:

能够看到曾经有人不小心泄漏自己的密钥了,固然另有很多人没有。
2.github信息网络
固然github有供给api,然则对代码检索功效有限制,以是咱们这里不应用api。
起首停止搜刮咱们必要有一个登录状况,人人能够注册一个小号,或者是应用大号,这个不要紧的。
登录状况咱们能够应用cookies,也能够间接登录,咱们这里说间接登录。
起首F12抓包能够看到全部登录流程,即拜访github.com/login,以后将表单的值传递给github.com/session。全部流程异常清楚。 copyright 无奈人生
代码以下:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Referer': 'https://github.com/',
'Host': 'github.com',
'Upgrade-Insecure-Requests': '1',
}
payload = {'commit': 'Sign in', 'login': 'xxxxxx@xxxx.xxx',  'password': 'xxxxxx'}
r = requests.get("https://github.com/login", headers=headers)
_cookies = r.cookies
r = requests.post("https://github.com/session", headers=headers, data=payload,  cookies=_cookies)
如上可不能够呢?细心阐发全部流程,实际上,表单值中另有一个authenticity_token,咱们要先抓取到这个值,而后传递给表单。
抓取函数以下:
from lxml import etree
def get_token(text):
#
    html = etree.HTML(text)
    t = html.xpath("//input[@name='authenticity_token']")
    try:
        token = t[0].get('value')
    except IndexError:

本文来自无奈人生安全网

        print("[+] Error: can't get login token, exit...")
        os.exit()
    except Exception as e:
        print(e)
        os.exit()
    #print(token)
    return token
payload['authenticity_token'] = get_token(r.content)
如今咱们代码另有甚么毛病呢,我感到便是对cookies的处置不敷优雅。requests有一个奇异的类requests.session(),能够为每次哀求保留cookies,并应用于下次哀求。
在民间文档咱们能够找到http://www.python-requests.org/en/master/user/advanced/#session-objects。

以是这里咱们能够应用requests.session对代码停止优化,即:
import requests
session = requests.Session()
r = session.get("https://github.com/login", headers=headers) 本文来自无奈人生安全网
payload['authenticity_token'] = get_token(r.content)
r = session.post("https://github.com/session", headers=headers, data=payload)
得到登录状况后,咱们就能够停止搜刮,以后列举出信息。
这里采纳lxml停止信息提取,xpath很简略,不多说,代码以下:
from lxml import etree
words = "https://api.shodan.io/shodan/host/ key="
url = ("https://github.com/search?p=1&q=%s&type=Code" % words)
r = session.get(url, headers=headers)
html = etree.HTML(r.text)
block = html.xpath("//div[@class='code-list-item col-12 py-4 code-list-item-public ']")
print("[+] Info: get item: %i" % len(block))
codes = html.xpath("//div[@class='code-list-item col-12 py-4 code-list-item-public ']/div[@class='file-box blob-wrapper']/table[@class='highlight']/tr/td[@class='blob-code blob-code-inner']")

copyright 无奈人生

[1] [2] [3] [4]  下一页 无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。