作者:ztencmcp来源:https://www.freebuf.com/articles/web/173479.html
0×00 背景
众说周知,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的值就在如下图位置:
![f6b07b56623b851e3d937e88624a63aa.png](https://i-blog.csdnimg.cn/blog_migrate/080a6d80223070d15712298489460fa6.jpeg)
虽然是隐藏的,但是我们可以通过Xpath来获取它,然后跟其他参数一起提交登陆Github。看代码:
![42e7e046a252f3762a2ce246dbf22550.png](https://i-blog.csdnimg.cn/blog_migrate/b1f13f22d22505a4f0d67129ad55b4f8.jpeg)
2.查询关键词及结果呈现
登陆后请求查询的URL,然后获取响应的页面,使用xpath解析节点获取想要的信息。关于xpath的语法请看这里
http://www.runoob.com/xpath/xpath-tutorial.html
我们还要将获取的信息写入表格里面,便于以后查看。详情如下:
![36c7ca4db0b15fcfd5d5fc909840e182.png](https://i-blog.csdnimg.cn/blog_migrate/b966fbca326224616626fa15b0666695.jpeg)
![7afd04f03bc8716af83328bc96ecd6ef.png](https://i-blog.csdnimg.cn/blog_migrate/9634e14f9c6cb121c71276736b3d7797.jpeg)
以上代码的核心主要是采用xpath解析DOM树,然后根据需要的数据逐一获取然后写入表格中。最后请求raw.githubusercontent.com来获取源代码,根据用户提供的payload进行逐一匹配,如果匹配则记录payload、URL以及代码,然后发送邮件预警。
3.邮件预警
其实邮件发送部分不是工具的重点,但是还是有必要贴上代码部分。请看:
![9c12868a9a559d302cb40777e6151421.png](https://i-blog.csdnimg.cn/blog_migrate/628c67af87cef70eec9e64e9059cdd2d.jpeg)
4.配置文件读取
我们将创建一个.ini的文件,便于工具读取我们想要传入工具的关键词、用户名、密码以及payload等等。ini配置文件定义如下:
![c41bda7842eda3a48a76ff067bff468d.png](https://i-blog.csdnimg.cn/blog_migrate/ade43738f6ea3146c916105da126e11e.jpeg)
然后我们在main函数中读取它们,然后传入工具中。
![1c28f50fb90f85df5c83f82a7b9bfc23.png](https://i-blog.csdnimg.cn/blog_migrate/f5fce6633c8bd1b086a0bf2cfcf6a7bc.jpeg)
以上代码中存在另外一个sendmail函数,同样是发送邮件的功能跟sendwarning功能一样,只是发送的内容不一样。这里不再赘述。这样我们就完成了整个工具的核心部分。怎么样?对于老司机来说很简单吧!
0×03 监控效果
1.运行效果
![ee53452eb1cfc4edb8cccf67f610da0b.png](https://i-blog.csdnimg.cn/blog_migrate/ea1f058ec91ff7b8269e198eef5ddee6.jpeg)
2.邮件预警
![d116502b3139683259530c1dc72d0ecb.png](https://i-blog.csdnimg.cn/blog_migrate/e2c5c254fcb5355a07d9903b5492ce78.jpeg)
0×04 总结
该工具的特点在于它会先使用主关键词进行搜索,比如公司域名、邮箱、人员姓名等等。然后再从结果中去搜索使用者自定义的payload,如Password,User,Database等等。另外配合crontab可以做到每天进行搜索然后进行预警,但是建议每天运行2次,以防触发Github的反爬机制。其实写工具并不难,多思考,多练习,人人都是开发大佬。最后感谢@0xbug大佬的Hawkeye带来的灵感和参考。最后完整代码参考https://github.com/Hell0W0rld0/Github-Hunter。各位大佬请轻拍!谢谢!