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

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]下一页
在未来3-5年中大多数机构会投资建立私有云,而云计算的保障系统将会被建立。所有的IT产业都将会受到这个巨变带来的影响。

猜您喜欢

RSA 热点研讨会在京召开 绿盟“云地人机”实力诠释协同联动
中联重科与新快报陈永洲事件背后的信息安全思考
CyberSecurity Law Introduction 网络安全法宣传视频系列
河南男子深夜被撞身亡 家属拦车要钱
AMERICAN-EXTERIORS 24TV
如何向无意愿的人们推销信息安全