深入分析一款简单的Github信息泄露爬虫

大数据

作者:grt1stnull

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):

#<input name="authenticity_token" value="Wwc+VXo2iplcjaTzDJwyigClTyZ9FF6felko/X3330UefrKyBT1f/eny1q1qSmEgFfTm0jKv+HW7rQ5hYu84Qw==" type="hidden">

    html = etree.HTML(text)

    t = html.xpath("//input[@name='authenticity_token']")

    try:

        token = t[0].get('value')

    except IndexError:
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值