自己动手打造Github代码泄露监控工具
众说周知,Github这块肥肉很受安全人员和黑客关注。因为很多新进程序猿和老手不经意就会把他们的劳动成果分享出来,而往往这种开源精神,奉献精神会对企业带来一定的安全风险。
例如代码里面包含各种敏感信息(用户名、密码、数据库信息、内网IP,甚至程序猿的身高、体重、年龄和婚姻状况。哈哈),所以Github信息泄露监控就不得不亮剑。另外也是小弟所在的企业被第三方找出有敏感信息泄露,囧,本来打算自己找些开源工具。看了些开源工具,都不太适合,所以就有了这篇自己动手打造Github代码泄露监控工具。
0×01 撸起袖子开干
人生苦短,我用Python!
Python强大的库、简洁语言以及开发迅速等特点,深受广大程序开发者喜爱。那么我们就用Python来开发吧!
原理及步骤
我们知道Github并未开放查询搜索的API,那么我们只能通过爬虫来爬取页面,然后通过解析器对返回的内容解析,从而获取到我们想要的信息。具体步骤如下:
1.登陆Github;
2.查询关键词结果呈现;
3.邮件预警;
4.配置文件读取。
开发环境及用到的Python库
开发环境为:MacOS10.12.6, Python版本3.6.5
Python库:requests,lxml,csv,tqdm,email,smtplib,configparser,time
请看官老爷们去了解以上Python库的用法,这里不再赘述。
0×02 步骤解析
1.登陆Github
登陆这里设置了一个坑,登陆https://github.com/login会跳转到https://github.com/session,然后提交请求主体。而主体包含了如下参数:
“commit=Sign+in&utf8=%E2%9C%93&authenticity_token=sClUkea9k0GJ%2BTVRKRYsvLKPGPfLDknMWVSd%2FyWvyGAR9Zz09bipesvXUo8ND2870Q2FEVsQWFKScyqtV0w1PA%3D%3D&login=YourUsername&password=YourPassword”
commit、uft8、login和password值相对来说是固定的,我们要做到工具登陆,那么需要获取到authenticity_token这个值,然后一起通过POST方法提交。那应该如何获取该值呢?
我们打开浏览器尝试手动正常登陆,同时按F12打开“开发者工具”,输入用户名和密码可以看到跳转到https://github.com/session,而authenticity_token的值就在如下图位置:
虽然是隐藏的,但是我们可以通过Xpath来获取它,然后跟其他参数一起提交登陆Github。看代码:
def login_github(username,password):#登陆Github
#初始化参数
login_url = 'https://github.com/login'
session_url = 'https://github.com/session'
try:
#获取session
s = requests.session()
resp = s.get(login_url).text
dom_tree = etree.HTML(resp)
#获取authenticity_token
key = dom_tree.xpath('//input[@name="authenticity_token"]/@value')
user_data = {
'commit: 'Sign in',
'utf8': '✓',
'authenticity_token':key,
'login': username,
'password': password
}
#发送数据并登陆
s.post(session_url,data=user_data)
#验证是否登陆成功
s.get('https://github.com/settings/profile')
return s
except:
print('产生异常,请检查网络设置及用户名和密码')
2.查询关键词及结果呈现
登陆后请求查询的URL,然后获取响应的页面,使用xpath解析节点获取想要的信息。关于xpath的语法请看这里
http://www.runoob.com/xpath/xpath-tutorial.html
我们还要将获取的信息写入表格里面,便于以后查看。详情如下:
def hunter(gUser,gPass,keyword,payloads):
global sensitive_list
global tUrls
sensitive_list = []
tUrls = [] try:
#创建表格
csv_file = open('leak.csv','w',encoding='utf-8',newline='')
writer = csv.writer(csv_file)
#写入表头
writer = writerow(['URL','Username','Upload Time','Filename'])
众说周知,Github这块肥肉很受安全人员和黑客关注。因为很多新进程序猿和老手不经意就会把他们的劳动成果分享出来,而往往这种开源精神,奉献精神会对企业带来一定的安全风险。
例如代码里面包含各种敏感信息(用户名、密码、数据库信息、内网IP,甚至程序猿的身高、体重、年龄和婚姻状况。哈哈),所以Github信息泄露监控就不得不亮剑。另外也是小弟所在的企业被第三方找出有敏感信息泄露,囧,本来打算自己找些开源工具。看了些开源工具,都不太适合,所以就有了这篇自己动手打造Github代码泄露监控工具。
0×01 撸起袖子开干
人生苦短,我用Python!
Python强大的库、简洁语言以及开发迅速等特点,深受广大程序开发者喜爱。那么我们就用Python来开发吧!
原理及步骤
我们知道Github并未开放查询搜索的API,那么我们只能通过爬虫来爬取页面,然后通过解析器对返回的内容解析,从而获取到我们想要的信息。具体步骤如下:
1.登陆Github;
2.查询关键词结果呈现;
3.邮件预警;
4.配置文件读取。
开发环境及用到的Python库
开发环境为:MacOS10.12.6, Python版本3.6.5 www.wnhack.com
Python库:requests,lxml,csv,tqdm,email,smtplib,configparser,time
请看官老爷们去了解以上Python库的用法,这里不再赘述。
0×02 步骤解析
1.登陆Github
登陆这里设置了一个坑,登陆https://github.com/login会跳转到https://github.com/session,然后提交请求主体。而主体包含了如下参数:
“commit=Sign+in&utf8=%E2%9C%93&authenticity_token=sClUkea9k0GJ%2BTVRKRYsvLKPGPfLDknMWVSd%2FyWvyGAR9Zz09bipesvXUo8ND2870Q2FEVsQWFKScyqtV0w1PA%3D%3D&login=YourUsername&password=YourPassword”
commit、uft8、login和password值相对来说是固定的,我们要做到工具登陆,那么需要获取到authenticity_token这个值,然后一起通过POST方法提交。那应该如何获取该值呢?
我们打开浏览器尝试手动正常登陆,同时按F12打开“开发者工具”,输入用户名和密码可以看到跳转到https://github.com/session,而authenticity_token的值就在如下图位置:
虽然是隐藏的,但是我们可以通过Xpath来获取它,然后跟其他参数一起提交登陆Github。看代码:
def login_github(username,password):#登陆Github
#初始化参数
login_url = 'https://github.com/login'
session_url = 'https://github.com/session'
try:
#获取session
s = requests.session()
resp = s.get(login_url).text
dom_tree = etree.HTML(resp)
#获取authenticity_token
key = dom_tree.xpath('//input[@name="authenticity_token"]/@value')
user_data = {
'commit: 'Sign in', 内容来自无奈安全网
'utf8': '✓',
'authenticity_token':key,
'login': username,
'password': password
}
#发送数据并登陆
s.post(session_url,data=user_data)
#验证是否登陆成功
s.get('https://github.com/settings/profile')
return s
except:
print('产生异常,请检查网络设置及用户名和密码')
本文来自无奈人生安全网
2.查询关键词及结果呈现
登陆后请求查询的URL,然后获取响应的页面,使用xpath解析节点获取想要的信息。关于xpath的语法请看这里
http://www.runoob.com/xpath/xpath-tutorial.html
我们还要将获取的信息写入表格里面,便于以后查看。详情如下:
def hunter(gUser,gPass,keyword,payloads):
global sensitive_list
global tUrls
sensitive_list = []
tUrls = [] try:
#创建表格
csv_file = open('leak.csv','w',encoding='utf-8',newline='')
writer = csv.writer(csv_file)
#写入表头
writer = writerow(['URL','Username','Upload Time','Filename'])
内容来自无奈安全网
无奈人生安全网